到目前为止,我已成功建立(运行node.js服务器)两个具有数据通道的对等体之间的RTC连接。我可以来回发送数据。
我也成功地将网络摄像头从一个对等体传输到另一个对等体,反之亦然。 我到底是怎么做的?
两个同行都这样做:
function handleRemoteStreamAdded(event) {
console.log('Remote stream added.');
remoteStream = event.stream;
remoteVideo.srcObject = remoteStream;
}
function gotStream(stream){
...
pc.addStream(stream);
...
}
navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(err);
...
pc = new RTCPeerConnection();
...
pc.onaddstream = handleRemoteStreamAdded;
所以我基本上说每当我添加自己的流(pc.addStream)时,请转到handleRemoteStreamAdded。一切正常。
但我真正想要做的是下一步是为每个客户添加一个按钮,并为每个客户提供选项,无论他们是否想要将他们的摄像头传输到另一端。如果他们想要,那么流应该在另一端自动启动。不幸的是,我无法弄清楚如何。
从理论上讲,我认为将Eventlistener添加到按钮然后触发事件:
navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(err);
通过这样做,我基本上也通过pc.addStream(stream);
做了function gotStream
。然后我向另一端发送消息,如“显示我的摄像头”,并在另一端接收此消息,其他同伴应以某种方式触发handleRemoteStreamAdded
。但是在这个函数中,有一个预定义的event
我只能通过pc.onaddstream = handleRemoteStreamAdded;
如果我收到“显示我的相机”或某些事件的消息,我怎么能自动开始流式传输另一侧的相机?
答案 0 :(得分:2)
你是在创建另一个提议并在调用pc.addStream后进行新的信令交换吗? (fwiw已被弃用;更喜欢addTrack和ontrack)
请参阅https://webrtc.github.io/samples/src/content/peerconnection/upgrade/,了解将视频添加到纯音频呼叫的类似内容。