实时音视频

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

    发布和订阅

    最近更新时间: 2022-07-14 15:45:25

    本部分介绍能够实现向房间发布媒体流或取消发布,订阅媒体流或停止订阅等操作。

    发布本地 Track

    发布 Track 前,需要对 Track 进行配置和创建,详情请见音视频采集

    创建好 Track 后即可将该 Track 通过 publish 方法向房间内进行发布。

    await mClient.publish(tracks);
    

    发布 Track 成功后,远端用户在监听 user-published 后会收到如下事件通知:

    mClient.on('user-published', function(userID, track){
        console.log('user-published', userID, track)
    });
    

    取消发布本地 Track

    调用 unpublish 取消发布本地媒体流。

    await mClient.unpublish(tracks);
    

    取消发布成功后,远端用户在监听 user-unpublished 后会收到如下事件通知:

    mClient.on('user-unpublished', function(userID, track) {
        console.log('user-unpublished', userID, track);
    });
    

    订阅远端 Track

    当收到远端用户发布的信息后,可以调用 subscribe 方法订阅该 track。

    mClient.on('user-published', async function(userID, track) {
        const subscribedTrack = await mClient.subscribe(track)
    });
    

    与本地 track 相同,成功订阅远端 track 后,即可通过 play 方法播放。

    取消订阅远端 Track

    调用 unsubscribe 方法取消订阅远端 track。

    await mClient.unsubscribe(tracks);
    

    自动订阅逻辑

    /**
     *  用生成的roomToken加入房间
     */
    async function joinRoom(roomToken) {
      // 创建QNRTCClient对象
      const client = QNRTC.createClient();
      // 需要先监听对应事件再加入房间
      autoSubscribe(client);
      // 传入RoomToken,加入房间
      await client.join(roomToken);
      console.log("joinRoom success!");
    }
    
    /**
     * 订阅远端用户发布的音视频轨道
     */
    async function subscribe(client, tracks) {
      // 传入远端用户发布的音视频轨道执行订阅操作。
      // 订阅成功后异步返回订阅成功的远端音视频轨道
      const remoteTracks = await client.subscribe(tracks);
      // 选择页面上的一个元素作为父元素,播放远端的音视频轨
      const remoteElement = document.getElementById("remotetracks");
      // 遍历返回的远端 Track,调用 play 方法完成在页面上的播放
      for (const remoteTrack of [...remoteTracks.videoTracks, ...remoteTracks.audioTracks]) {
          remoteTrack.play(remoteElement);
      }
    }
    
    // 这里的参数 client 是指刚刚初始化的 QNRTCClient 对象, 同上
    function autoSubscribe(client) {
        // 添加事件监听,当房间中出现新的 Track 时就会触发,参数是 trackInfo 列表
        client.on("user-published", (userId,tracks) => {
            console.log("user-published!", userId,tracks);
            subscribe(client, tracks)
            .then(() => console.log("subscribe success!"))
            .catch(e => console.error("subscribe error", e));
        });
    }
    
    以上内容是否对您有帮助?
  • Qvm free helper
    Close