实时音视频

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

    发布和订阅

    最近更新时间:2022-04-02 15:08:40

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

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

    发布 Track

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

    请确保在发布前已经成功加入房间,否则将发布失败。

    client.publish(tracksList, QNPublishResultCallback)
    

    其中,QNPublishResultCallback 回调了发布操作的结果通知:

    client.publish(trackList[], (onPublished,error) => {
        if(onPublished) {
            // 发布成功
        }else {
            // 发布失败
        }
    })
    

    发布 Track 失败的错误码可参考 Android 发布 Track 相关错误码 以及 iOS 发布 Track 相关错误码。其中两个端错误 code 一致,错误信息可能有略微差异。

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

    client.on("onUserPublished", (params) => {
        console.log(params.remoteUserID, params.trackList)
    })
    

    取消发布 Track

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

    client.unpublish(tracksList)
    

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

    client.on("onUserUnpublished", (params) => {
        console.log(params.remoteUserID, params.trackList)
    })
    

    订阅远端 Track

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

    client.setAutoSubscribe(false)
    

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

    client.subscribe(tracksList)
    

    本地订阅远端用户媒体流成功后,会触如下回调:

    client.on("onAudioSubscribed", () => {
        // 视频轨订阅成功触发该回调
        this.remoteAudioTrack = params.trackList
    })
    client.on("onVideoSubscribed", () => {
        // 音频轨订阅成功触发该回调
        this.remoteVideoTrack = params.trackList
    })
    

    成功订阅远端视频后将获取到 remoteTrack 对象, 通过该对象传参给 QNRTC-UniPlugin-SurfaceView 组件,即可渲染远端视频流。

    <QNRTC-UniPlugin-SurfaceView :local="1" :identifyID="remoteVideoTrack.identifyID" :userID="remoteVideoTrack.userID" :trackID="remoteVideoTrack.trackID"></QNRTC-UniPlugin-SurfaceView>
    

    其中 local 为 1 代表该组件渲染远端 Track

    取消订阅远端 Track

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

    client.unsubscribe(tracksList)
    
    以上内容是否对您有帮助?
  • Qvm free helper
    Close