跳到主要内容

远端用户流

用户进入音视频房间后,想让其他人看见你的画面、听见你的声音,需要发布(Publish)本地资源。想看到别人的画面、听见别人的声音,需要订阅(Subscribe)其他人已发布的资源。

订阅

用户的订阅需要在两个时机进行处理:

  1. 在加入房间的成功回调里,需要遍历 RCRTCRoom#remoteUsers 得到房间内已经存在用户发布的流,并订阅。
  2. 在收到远端用户发布流的通知 didPublishStreams 时,可调用 RCRTCLocalUser 中的 subscribeStreams 来订阅单个或多个媒体流。
提示

若远端视频流开启了大小流功能,可将订阅的视频小流通过 subscribeStreams 方法的 tinyStreams 参数传入。

参数说明

参数类型说明
streamsRCRTCInputStream[]音视频流集合
tinyStreamsRCRTCInputStream[]视频小流集合
返回值Promise<ICompletionResult>订阅结果的 Promise

示例代码

typescript
let streams: Array<RCRTCInputStream> = new Array();
room?.remoteUsers?.forEach(remoterUser => {
streams.push(...remoterUser.streams);
});
if (streams.length === 0) {
promptAction.showToast({message: '无可用订阅流'});
return;
}
room?.localUser.subscribeStreams(streams, []).then((result => {
if (result.code === RCRTCCode.SUCCESS) {
// 订阅成功
} else {
// 订阅失败
}
}));

取消订阅

当需要取消订阅时,可调用 RCRTCLocalUser 中的 unsubscribeStreams 来取消订阅一道流或多道流。取消订阅接口通常跟订阅接口配对使用,但如果是用户想要退出房间,则不需要调用取消订阅方法,在调用退出房间接口时,SDK 内部会自动进行取消处理。

参数说明

参数类型说明
streamsRCRTCInputStream[]要取消订阅的音视频流
返回值Promise<ICompletionResult>取消订阅结果的 Promise

示例代码

typescript
room?.localUser.unsubscribeStreams(streams).then((result => {
if (result.code === RCRTCCode.SUCCESS) {
// 取消订阅成功
} else {
// 取消订阅失败
}
}));