文档中心
语音通话 (Legacy)
Console 官网 社区 技术支持

如何对远端用户进行上下麦/禁言/禁摄像头操作?

分类: 集成类    平台: Android / iOS / macOS / Web / Windows / Linux / Unity / Cocos Creator / Electron / React Native / Flutter / Flutter2   最后更新时间: 2023/01/16 19:53:53

简介

在实时音视频互动中,经常会有本地对远端用户操作的需求。例如,语聊房场景中的主播可以邀请观众上麦互动,也可以将上麦观众变回为普通观众;视频会议的主持人则可以对与会人进行禁言、禁摄像头操作。

在实际应用场景中,你可以结合声网 RTM SDK 的消息发送与频道属性功能,和声网 RTC SDK 的切换用户角色和停止/恢复发布本地音频或视频流的功能,实现本地对远端用户的操作。

实现方法

下文展示如何通过 RTM SDK 和 RTC SDK 实现本地对远端用户的操作。使用前,请确保你的项目中已经集成了 RTM SDK 和 RTC SDK。具体的集成文档,请参考:

上下麦

主播邀请观众上麦的基本 API 时序图如下:

具体步骤如下:

  1. 主播端调用 RTM SDK 的 sendMessageToPeer 方法,向观众发送点对点消息,邀请观众上麦;
  2. 观众端通过 RTM SDK 的 onMessageReceived 回调接收主播的邀请信息;
  3. 观众端调用 RTC SDK 的 setClientRole 方法,并将用户角色设置为主播 CLIENT_ROLE_BROADCASTER
  4. 成功切换角色为主播后,观众端会收到 onClientRoleChanged 回调;
  5. 观众端调用 RTM SDK 的 addOrUpdateChannelAttributes 方法,将角色切换事件通知到频道内的所有用户;
  6. 主播端再通过 RTM SDK 的 onAttributesUpdated 得知该观众已成功切换角色,可以进行音视频互动。

同理,如果想要实现下麦功能,则观众端在收到主播要求下麦的消息后,再次调用 setClientRole,然后将用户角色设置为观众 CLIENT_ROLE_AUDIENCE 即可。

禁言/禁摄像头

本地要求远端禁言或禁摄像头的 API 时序图如下所示:

与上下麦操作类似,该场景也是通过 sendMessageToPeeronMessageReceived 来实现消息的传输。远端收到禁言/禁摄像头消息后,分别调用以下方法:

  • 禁言:muteLocalAudioStream
  • 禁摄像头:muteLocalVideoStream

远端成功禁言或禁摄像头后,本地会收到 onRemoteAudioStateChangedonRemoteVideoStateChanged 回调。你可以在该回调中调用 RTM SDK 的 addOrUpdateChannelAttributes,将该事件通知到频道内的所有用户。

各语言方法对照表

本文提及的方法名均为 Java 语言。其他语言对应的方法名如下表所示:

Java/C++ Objective-C JavaScript
sendMessageToPeer sendMessage sendMessage
onMessageReceived messageReceived MessageFromPeer
setClientRole setClientRole setClientRole
onClientRoleChanged didClientRoleChanged Client.on("client-role-changed")
addOrUpdateChannelAttributes addOrUpdateChannelAttributes addOrUpdateChannelAttributes
onAttributesUpdated attributeUpdate AttributesUpdated