在实时音视频互动中,经常会有本地对远端用户操作的需求。例如,语聊房场景中的主播可以邀请观众上麦互动,也可以将上麦观众变回为普通观众;视频会议的主持人则可以对与会人进行禁言、禁摄像头操作。
在实际应用场景中,你可以结合声网 RTM SDK 的消息发送与频道属性功能,和声网 RTC SDK 的切换用户角色和停止/恢复发布本地音频或视频流的功能,实现本地对远端用户的操作。
下文展示如何通过 RTM SDK 和 RTC SDK 实现本地对远端用户的操作。使用前,请确保你的项目中已经集成了 RTM SDK 和 RTC SDK。具体的集成文档,请参考:
主播邀请观众上麦的基本 API 时序图如下:
具体步骤如下:
sendMessageToPeer
方法,向观众发送点对点消息,邀请观众上麦;onMessageReceived
回调接收主播的邀请信息;setClientRole
方法,并将用户角色设置为主播 CLIENT_ROLE_BROADCASTER
;onClientRoleChanged
回调;addOrUpdateChannelAttributes
方法,将角色切换事件通知到频道内的所有用户;onAttributesUpdated
得知该观众已成功切换角色,可以进行音视频互动。同理,如果想要实现下麦功能,则观众端在收到主播要求下麦的消息后,再次调用 setClientRole
,然后将用户角色设置为观众 CLIENT_ROLE_AUDIENCE
即可。
本地要求远端禁言或禁摄像头的 API 时序图如下所示:
与上下麦操作类似,该场景也是通过 sendMessageToPeer
和 onMessageReceived
来实现消息的传输。远端收到禁言/禁摄像头消息后,分别调用以下方法:
muteLocalAudioStream
muteLocalVideoStream
远端成功禁言或禁摄像头后,本地会收到 onRemoteAudioStateChanged
或 onRemoteVideoStateChanged
回调。你可以在该回调中调用 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 |