远端用户流
在会议模式下,参会用户进入音视频房间后,如果想看 到别人的画面、听见别人的声音,需要订阅(Subscribe)其他人已发布的资源。
SDK 提供两套操作远端用户流的方法,适用于不同业务需求。
- 普通订阅、取消订阅方法:
subscribe
/unsubscribe
- (要求 SDK 版本 ≧ 5.4.4)支持任务队列、任务自动合并的订阅、取消订阅方法,针对频繁订阅或者取消远端用户流的操作进行了优化:
addSubscribeTask
/addUnsubscribeTask
/addUpdateSubscribeListTask
订阅资源的时机
通过此方法订阅房间内其他用户的资源。订阅一般需要在两个地方进行处理:
-
加入房间成功后,会返回 RCRTCRoom 房间实例、房间内其他用户 ID,以及房间内已发布的资源。此时可进行订阅房间内已发布的资源。
-
加入房间后,通过房间实例注册房间事件监听器 IRoomEventListener。房间内
onTrackPublish
事件被触发时,即可按需订阅对方所发布的资源。// 注册房间事件监听器,重复注册时,仅最后一次注册有效
room.registerRoomEventListener({
/**
* 房间内用户发布资源
* @param tracks 新发布的音轨与视轨数据列表,包含新发布的 RCRemoteAudioTrack 与 RCRemoteVideoTrack 实例
*/
async onTrackPublish (tracks: RCRemoteTrack[]) {
// 按业务需求选择需要订阅资源,通过 room.subscribe 接口进行订阅
const { code } = await room.subscribe(tracks)
if (code !== RCRTCCode.SUCCESS) {
console.log('资源订阅失败 ->', code)
}
},
/**
* 订阅的音视频流通道已建立, track 已可以进行播放
* @param track RCRemoteTrack 类实例
*/
onTrackReady (track: RCRemoteTrack) {
// 订阅的音视频轨道已连接,可以根据业务需求选择性播放
if (track.isAudioTrack()) {
// 音频播放无需传递组件
track.play()
} else {
// 此处的 videoNode 为 <video> 标签元素实例
track.play(videoNode)
}
}
})
订阅资源
调用 subscribe 方法订阅音视轨资源。
视频流支持订阅大小流机制。为了节省下行带宽,可选择订阅对方的视频小流。仅在其他用户发布资源时设置了发布大小流的情况下可订阅小流。若对方并未发布小流,接收的仍然是对方的大流数据。
const { code } = await room.subscribe([
// 音频不支持大小流
audioTrack,
{
track: videoTrack,
subTiny: true // 订阅小流
}
])
取消订阅
调用 unsubscribe 方法取消订阅音视轨资源。
const { code } = await room.unsubscribe([audioTrack, videoTrack])
// 取消订阅完成后,业务层移除相关的 UI 信息即可