我正在尝试使用webrtc进行网络视频聊天。
我检查了webrtc,对于此解决方案就足够了。
但是,就我而言,一台侧面计算机中有三个摄像头(网络摄像头,USB摄像头)。
camera1
camera1 <-> camera2
camera3
因此,我尝试将多个流添加到一个RTCPeerConnection。
但是,webrtc不支持此功能。
我需要为此创建3个RTCPeerConnection。 如果我创建3个对等对象,则好像是视频聊天室。
还有其他解决方法吗?
pc = new RTCPeerConnection(null);
pc.addStream(localStream1);
pc.addStream(localStream2);
pc.addStream(localStream3);`
这可能吗?
答案 0 :(得分:0)
是的,WebRTC 确实支持此功能,正如您所显示的那样。
已弃用addStream
除外,因此您想改用addTrack
。或使用polyfill:
pc.addStream = stream => stream.getTracks().forEach(t => pc.addTrack(t, stream));
添加顺序确定track
事件在另一端触发的顺序:
pc.ontrack = ({streams: [stream]}) => {
for (const video of [remoteElement1, remoteElement2, remoteElement3]) {
if (video.srcObject && video.srcObject.id != stream.id) continue;
video.srcObject = stream;
break;
}
}
上面的代码将三个输入流按顺序分配给三个视频元素进行播放。 track
事件针对每个轨道触发,因此如果流中有多个轨道,我们将检查stream.id
。
或者,我们可以通过数据通道发送stream.id
并以这种方式进行关联,因为stream.id
在远程是相同的。但是请注意,track.id
不稳定。第三种方法是使用始终稳定的transceiver.mid
进行关联,除了最初是null
。