跳到主要内容

远端用户流

在会议模式下,参会用户进入音视频房间后,如果想看到别人的画面、听见别人的声音,需要订阅(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 信息即可