远端用户流
用户进入音视频房间后,想让其他人看见你的画面、听见你的声音,需要发布(Publish)本地资源。想看到别人的画面、听见别人的声音,需要订阅(Subscribe)其他人已发布的资源。
订阅
用户的订阅需要在两个地方进行处理:一是在加入房间的成功回调里,需要遍历 RCRTCRoom#getRemoteUsers
得到房间内已经存在用户发布的流,并订阅;二是在收到远端用户刚刚发布流的通知,即 onRemoteUserPublishResource
时订阅。可调用 RCRTCLocalUser
中的 subscribeStream
或 subscribeStreams
来订阅单个或多个媒体流,如果远端用户发布的视频流开启了大小流功能,可以通过视频流 RCRTCVideoInputStream
对象的 setStreamType
方法,来选择订阅大流或小流(默认).
-
参数说明:
参数 类型 说明 streams List<? extends RCRTCInputStream> 音视频流集合 callBack IRCRTCResultCallback 订阅结果回调 -
示例代码:
for (RCRTCInputStream inputStream : inputStreams) {
if (inputStream.getMediaType() == RCRTCMediaType.VIDEO){
RCRTCVideoInputStream videoInputStream = (RCRTCVideoInputStream) inputStream;
//如果未绑定过VideoView,则需要创建并绑定VideoView
if (videoInputStream.getVideoView() == null) {
VideoView videoView = new VideoView(XXXActivity.this);
videoInputStream.setVideoView(videoView);
//添加到 Activity 布局中
videoViewManager.add(videoView);
}
}
}
rtcRoom.getLocalUser().subscribeStreams(inputStreams, new IRCRTCResultDataCallback<List<RCRTCInputStream>>() {
@Override
public void onSuccess() {
// 订阅成功
}
@Override
// 如果 SDK ≧ 5.3.4,您可以使用 IRCRTCResultDataCallback,onFailed 方法会返回订阅失败的流列表和错误码。
// 如果 SDK < 5.3.4,仅支持使用 IRCRTCResultCallback,onFailed 方法仅返回错误码。
public void onFailed(List<RCRTCInputStream> failedStreams, RTCErrorCode errorCode) {
// 订阅失败
}
});
取消订阅
当需要取消订阅时,可调用 RCRTCLocalUser
中的 unsubscribeStream
或 unsubscribeStreams
来取消订阅一道流或多道流。取消订阅接口通常跟订阅接口配对使用,但如果是用户想要退出房间,则不需要调用取消订阅方法,在调用退出房间接口时,SDK 内部会自动进行取消处理。
-
参数说明:
参数 类型 说明 streams List<? extends RCRTCInputStream> 要取消订阅的音视频流 callBack IRCRTCResultCallback 取消订阅的音视频流的回调 -
示例代码:
rtcRoom.getLocalUser().unsubscribeStreams(unPublishResource, new IRCRTCResultCallback() {
@Override
public void onSuccess() {
// 取消成功
}
@Override
public void onFailed(RTCErrorCode errorCode) {
// 取消失败
}
}); -
API 参考: