使用多个 USB 网络摄像头进行视频聊天
Video chat with multiple usb webcamera
我正在尝试使用 webrtc 进行网络视频聊天。
我检查了 webrtc,这对这个解决方案来说已经足够了。
但是,就我而言,一台计算机上有三个摄像头(网络摄像头、USB 摄像头)。
camera1
camera1 <-> camera2
camera3
所以,我尝试将多个流添加到一个 RTCPeerConnection。
但是,webrtc 不支持这个。
我需要为此创建 3 个 RTCPeerConnection。
如果我创建3个peer,那好像是视频聊天室。
还有其他解决方案吗?
pc = new RTCPeerConnection(null);
pc.addStream(localStream1);
pc.addStream(localStream2);
pc.addStream(localStream3);`
这可能吗?
是的,WebRTC 确实 支持这一点,正如您展示的那样。
Except 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
s 并以这种方式关联,因为 stream.id
s 在远程是相同的。但是请注意,track.id
s 并不稳定。第三种方法是使用 transceiver.mid
进行关联,它始终稳定,除了最初是 null
。
我正在尝试使用 webrtc 进行网络视频聊天。
我检查了 webrtc,这对这个解决方案来说已经足够了。
但是,就我而言,一台计算机上有三个摄像头(网络摄像头、USB 摄像头)。
camera1
camera1 <-> camera2
camera3
所以,我尝试将多个流添加到一个 RTCPeerConnection。
但是,webrtc 不支持这个。
我需要为此创建 3 个 RTCPeerConnection。 如果我创建3个peer,那好像是视频聊天室。
还有其他解决方案吗?
pc = new RTCPeerConnection(null);
pc.addStream(localStream1);
pc.addStream(localStream2);
pc.addStream(localStream3);`
这可能吗?
是的,WebRTC 确实 支持这一点,正如您展示的那样。
Except 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
s 并以这种方式关联,因为 stream.id
s 在远程是相同的。但是请注意,track.id
s 并不稳定。第三种方法是使用 transceiver.mid
进行关联,它始终稳定,除了最初是 null
。