声网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天