实时音视频

  • 实时音视频 > 使用指南 > Android >发布和订阅

    发布和订阅

    最近更新时间: 2022-06-08 11:19:20

    本文主要介绍如何实现在房间发布、订阅媒体流。

    • 发布是指将创建好的音视频 Track 对应的音视频数据推送到七牛实时音视频服务的操作,执行发布操作后,远端用户可以选择性的进行订阅观看。
    • 订阅是指向七牛实时音视频服务请求拉取远端发布的音视频数据的操作。订阅后,本地即可实时的接收远端发布的音视频数据。
    • 有别于 CDN 转推,发布和订阅的音视频数据是基于实时性更好的 RTP 协议在房间内传输的,若您想要实现 RTMP 直播流分发的场景,请在音视频 Track 发布后,参考 CDN 转推进行实现。

    发布 Track

    发布 Track 前,需要对 Track 进行配置和创建,详情请见音视频采集,对于已经创建好的 Track,可通过 QNRTCClient.publish 接口向房间内进行发布。

    • 请确保在发布前已经成功加入房间,否则将发布失败。
    // 发布本地音视频 track,支持可变参数
    public void publish(QNLocalTrack... tracks);
    public void publish(List<QNLocalTrack> trackList);
    // 发布本地音视频 track,支持可变参数以及发布结果回调通知
    public void publish(QNPublishResultCallback callback, QNLocalTrack... tracks);
    public void publish(QNPublishResultCallback callback, List<QNLocalTrack> trackList);
    

    其中,QNPublishResultCallback 回调了发布操作的结果通知,其接口定义如下:

    public interface QNPublishResultCallback {
        // 成功发布 tracks
        void onPublished();
    
        // 发布 tracks 失败
        void onError(int errorCode, String errorMessage);
    }
    

    发布 Track 失败的错误码可参考发布 Track 相关错误码

    发布 Track 成功后,远端用户会收到如下通知回调:

    public interface QNClientEventListener {
        // 当远端 Track 发布时会触发此回调
        void onUserPublished(String remoteUserID, List<QNRemoteTrack> trackList);
    }
    

    取消发布 Track

    对于已发布的 track,可调用 QNRTCClient.unpublish 接口取消发布。

    // 取消发布本地音视频 track,支持可变参数
    public void unpublish(QNLocalTrack... tracks);
    public void unpublish(List<QNLocalTrack> trackList)
    

    取消发布成功后,远端用户会收到如下通知回调:

    public interface QNClientEventListener {
        // 当远端 Track 取消发布时会触发此回调
        void onUserUnpublished(String remoteUserID, List<QNRemoteTrack> trackList);
    }
    

    订阅远端 Track

    自动订阅

    在 v2.x.x 版本后提供了默认自动订阅的功能,可通过 QNRTCClient.setAutoSubscribe 接口进行自动订阅功能的开启与关闭,默认为开启状态。

    public void setAutoSubscribe(boolean autoSubscribe);
    

    手动订阅

    在自动订阅功能关闭时,用户可以通过调用 QNRTCClient.subscribe 接口订阅远端 Tracks。

    // 订阅远端音视频 track,支持可变参数
    public void subscribe(QNRemoteTrack... tracks);
    public void subscribe(List<QNRemoteTrack> trackList);
    

    无论是自动订阅还是手动订阅,当成功订阅远端用户媒体流后,都会触如下回调

    public interface QNClientEventListener {
        // 当成功订阅远端 Track 时会触发此回调
        void onSubscribed(String remoteUserID, List<QNRemoteAudioTrack> remoteAudioTracks, List<QNRemoteVideoTrack> remoteVideoTracks);
    }
    

    成功订阅远端视频后,即可通过 QNRemoteVideoTrack.play 接口进行远端视频画面的渲染。

    取消订阅远端 Track

    调用 QNRTCClient.unsubscribe 接口取消订阅远端 Tracks。

    public void unsubscribe(QNRemoteTrack... tracks);
    public void unsubscribe(List<QNRemoteTrack> trackList);
    

    示例代码

    发布订阅场景的示例代码可参考 QNRTC-API-Examples

    以上内容是否对您有帮助?
  • Qvm free helper
    Close