与多个USB网络摄像头进行视频聊天

时间:2019-05-10 19:46:13

标签: javascript performance architecture webrtc video-conferencing

我正在尝试使用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);` 

这可能吗?

1 个答案:

答案 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