声网Agora web-RTC监听订阅对端音视频轨无效

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:49   2464   0

声网web-RTC与对端都在频道内后,web本端如何都无法订阅到对端(Linux服务端)的音视频轨道,具体代码如下:

1、加入RTC并监听频道内用户的发布和取消发布

async function joinRTC() {
  clienRTC.on("user-published", handleUserPublished);
  clienRTC.on("user-unpublished", handleUserUnpublished);
    try {
      [options.destRtcUid, localTracks.audioTrack, localTracks.videoTrack] = await Promise.all([
        clienRTC.join(options.appId, options.rtcChannelName, options.destRtcToken || null, Number(options.destRtcUid) || null),
        AgoraRTC.createMicrophoneAudioTrack({
          encoderConfig: {
            sampleRate: 48000,
            stereo: true,
            bitrate: 128,
          },
        }),
        AgoraRTC.createCameraVideoTrack({
          encoderConfig: {
            width: 360,
            // 支持指定一个范围和参考值,具体配置参考相关 API 文档
            height: {
              ideal: 640,
              min: 640,
              max: 640
            },
            frameRate: 24,
            bitrateMin: 800,
            bitrateMax: 1000,
          },
          optimizationMode: "motion"
        })
      ]);
      await clienRTC.publish(Object.values(localTracks));
      localTracks.videoTrack.play("myself_vedio");
      console.log("发布本地音视频成功");
      $("#leave").show();
    } catch (error) {
      try {
        localTracks.audioTrack = await AgoraRTC.createMicrophoneAudioTrack();
        await clienRTC.publish(localTracks.audioTrack);
      } catch (audioErr) {
        console.log("摄像头与麦克风设备不可用,无法建立通话")
      }
    }
}

2、监听到订阅对端音视频轨道

function handleUserPublished(user, mediaType) {
  const id = user.uid;
  remoteUsers[id] = user;
  subscribe(user, mediaType);
}
// subscribe to a remote user
async function subscribe(user, mediaType) {
  const uid = user.uid;
  await clienRTC.subscribe(user, mediaType);
  console.log("subscribe success");
  if (mediaType === 'video') {
    const player = $(`
      <div id="move_bar">
        <div class="vedio_outer" id="otherside_vedio">
          <div class="myself" id="myself_vedio"></div>
          <p id='downMention' style="display:none">请耐心等候对方同意接收音频通话~</p>
          <div class="two_btn videobtn_outer">
            <button id="leave" type="submit" class="btn btn-danger btn-sm leaveCall">挂断</button>
            <button id="downToAudio" class="btn btn-primary btn-sm">音频模式</button>
          </div> 
        </div>
      </div>
    `);
    $("#remote-playerlist").append(player);
    user.videoTrack.play("otherside_vedio");
  }
  if (mediaType === 'audio') {
    user.audioTrack.play();
  }
}

问题所在:这样的代码流程反复对接了后发现并无问题,但是前提在频道内已有对端用户的轨道发布,本端仍然无法触发user-published事件。

解决:说的是两端joinRTC时必须保证uid都是int型,后来web端先改为int后再试就可以了,我是服务端给的string型就直接join的RTC,所以只用修改以下红框处,坑了2天

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP