跳到主要内容

远端用户流

进入音视频房间后:要让他人看到您的画面并听到您的声音,请发布(Publish)本地资源;要看到他人的画面并听到他们的声音,请订阅(Subscribe)他人已发布的资源。

订阅

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

  1. 在加入房间的成功回调中,遍历 RCRTCRoom#getRemoteUsers 获取房间内已发布的流并订阅;
  2. 在收到远端用户发布流的通知 onRemoteUserPublishResource 时进行订阅。

您可以调用 RCRTCLocalUsersubscribeStreamsubscribeStreams 来订阅单个或多个媒体流。若远端视频流开启了大小流功能,可在视频流 RCRTCVideoInputStream 对象上通过 setStreamType 选择订阅大流或小流(默认小流)。

  • 参数说明:

    参数类型说明
    streamsList<? extends RCRTCInputStream>音视频流集合
    callBackIRCRTCResultCallback订阅结果回调
  • 示例代码:

    Java
    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 onFailed(RTCErrorCode errorCode) {

    }
    @Override
    public void onSuccess(List<RCRTCInputStream> data) {
    // 订阅成功
    }

    @Override
    // 如果 SDK ≧ 5.3.4,您可以使用 IRCRTCResultDataCallback,onFailed 方法会返回订阅失败的流列表和错误码。
    // 如果 SDK < 5.3.4,仅支持使用 IRCRTCResultCallback,onFailed 方法仅返回错误码。
    public void onFailed(List<RCRTCInputStream> failedStreams, RTCErrorCode errorCode) {
    // 订阅失败
    }
    });

取消订阅

当需要取消订阅时,调用 RCRTCLocalUserunsubscribeStreamunsubscribeStreams 取消订阅一个或多个媒体流。取消订阅接口通常与订阅接口配对使用。若用户退出房间,无需手动取消订阅;调用退出房间接口时,SDK 会自动进行取消处理。

  • 参数说明:

    参数类型说明
    streamsList<? extends RCRTCInputStream>要取消订阅的音视频流
    callBackIRCRTCResultCallback取消订阅结果回调
  • 示例代码:

    Java
    rtcRoom.getLocalUser().unsubscribeStreams(unPublishResource, new IRCRTCResultCallback() {
    @Override
    public void onSuccess() {
    // 取消成功
    }

    @Override
    public void onFailed(RTCErrorCode errorCode) {
    // 取消失败
    }
    });