跳到主要内容

远端用户流

在会议模式下,参会用户加入音视频房间后,如需观看他人画面或收听他人音频,需要主动**订阅(Subscribe)**其他用户已发布的音视频资源。

SDK 提供两套订阅与取消订阅的方式,适用于不同业务场景:

  • 普通订阅、取消订阅方法subscribe / unsubscribe

  • 任务队列优化方法(SDK ≥ 5.4.4)

    使用 addSubscribeTask / addUnsubscribeTask / addUpdateSubscribeListTask 支持任务队列及任务合并优化,适合高频订阅或取消订阅场景。

订阅资源的时机

订阅资源通常需要在以下两个时机进行:

  1. 加入房间成功后

    加入房间成功会返回 RCRTCRoom 房间实例、房间内其他用户的 ID 及已发布的资源列表。此时可以立即订阅房间内已有的音视频资源。

  2. 房间内用户发布新资源时

    加入房间后可通过 IRoomEventListener 事件监听器,监听 onTrackPublish 事件。当有用户发布新资源时按需订阅。

示例代码

typescript
// 注册房间事件监听器,重复注册时,仅最后一次注册有效
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 方法订阅音视轨资源。

视频轨道支持大小流机制:

  • 若远端用户已发布大小流,可通过 subTiny 参数选择订阅小流以节省下行带宽;
  • 若对方未发布小流,即使设置 subTiny: true,依然会接收大流。

接口

typescript
room.subscribe(tracks)

参数说明

参数类型必填说明
tracksRCLocalTrack[] 或者 IPublishAttrs[]音视频资源

示例代码

typescript
const { code } = await room.subscribe([
// 音频不支持大小流
audioTrack,
{
track: videoTrack,
subTiny: true // 订阅小流
}
])

取消订阅

调用 unsubscribe 方法取消订阅已订阅的音视频轨道。

接口

typescript
room.unsubscribe(tracks)

参数说明

参数类型必填说明
tracksRCRemoteTrack[]远端音视频资源。

示例代码

typescript
const { code } = await room.unsubscribe([audioTrack, videoTrack])

// 取消订阅完成后,业务层移除相关的 UI 信息即可