先阐述一下问题,在项目中用到腾讯云的TRTC,A端发布A1、A2两个视频源,在B端订阅A1、A2使用两个view进行播放渲染
问题主流视频源和辅流视频源渲染在同一view上,控制台报错
// 播放远端视频 TRTCService.js;
setRemoteVideo(view) {
this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {
if (event.streamType === TRTC.TYPE.STREAM_TYPE_MAIN) {
console.log("开启主流视频源", view);
this.trtcSdk.startRemoteVideo({
userId: event.userId,
streamType: event.streamType,
view,
});
} else if (event.streamType === TRTC.TYPE.STREAM_TYPE_SUB) {
console.log("开启辅流视频源", view);
this.trtcSdk.startRemoteVideo({
userId: event.userId,
streamType: event.streamType,
view,
});
}
});
}
// vue组件中调用
this.setRemoteVideo(this.el_scan),
this.setRemoteVideo(this.el_other),
监听订阅远端视频事件里判断主流和辅流传不同的view实例,运行结果是主流和辅流视频渲染在同一个view上,控制台报错如下:
问题原因:
解决这个问题的步骤如下:
代码如下:
setRemoteVideo(view) {
// 移除之前的监听器,防止重复监听
this.trtcSdk.off(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE);
this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {
if (view === this.el_scan && event.streamType === TRTC.TYPE.STREAM_TYPE_MAIN) {
console.log("开启主流视频源");
this.trtcSdk.startRemoteVideo({
userId: event.userId,
streamType: event.streamType,
view,
});
} else if (view === this.el_other && event.streamType === TRTC.TYPE.STREAM_TYPE_SUB) {
console.log("开启辅流视频源");
this.trtcSdk.startRemoteVideo({
userId: event.userId,
streamType: event.streamType,
view,
});
}
});
}
运行结果:
继续分析:
继续尝试:
代码如下:
setRemoteVideoMain(viewMain) {
this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {
if (event.streamType === TRTC.TYPE.STREAM_TYPE_MAIN) {
console.log("开启主流视频源");
this.trtcSdk.startRemoteVideo({
userId: event.userId,
streamType: event.streamType,
view: viewMain,
});
}
});
}
setRemoteVideoSub(viewSub) {
this.trtcSdk.on(TRTC.EVENT.REMOTE_VIDEO_AVAILABLE, (event) => {
if (event.streamType === TRTC.TYPE.STREAM_TYPE_SUB) {
console.log("开启辅流视频源");
this.trtcSdk.startRemoteVideo({
userId: event.userId,
streamType: event.streamType,
view: viewSub,
});
}
});
}
// 组件中调用
this.setRemoteVideoSub(this.el_scan),
this.setRemoteVideoMain(this.el_other),