Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在WebRTC中自动传输远程cam?_Javascript_Node.js_Webrtc_Getusermedia - Fatal编程技术网

Javascript 如何在WebRTC中自动传输远程cam?

Javascript 如何在WebRTC中自动传输远程cam?,javascript,node.js,webrtc,getusermedia,Javascript,Node.js,Webrtc,Getusermedia,到目前为止,我已经成功地在具有数据通道的两个对等方之间建立了(运行node.js server)RTC连接。我可以来回发送数据 我还成功地将网络摄像头从一个对等点传输到另一个对等点,反之亦然。 我到底是怎么做到的 两个对等方都这样做: function handleRemoteStreamAdded(event) { console.log('Remote stream added.'); remoteStream = event.stream; remoteVideo.srcObj

到目前为止,我已经成功地在具有数据通道的两个对等方之间建立了(运行node.js server)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。一切都很好

但我下一步真正想做的是为每个客户机添加一个按钮,并让每个客户机选择是否将其cam流到另一端。如果他们愿意,那么流应该在另一端自动启动。不幸的是,我就是不知道该怎么做

理论上,我的想法是将Eventlistener添加到按钮,然后事件触发:

navigator.mediaDevices.getUserMedia(constraints).then(gotStream).catch(err);
通过这样做,我基本上也做了
pc.addStream(stream)通过
函数gotStream
。然后我向另一端发送一条消息,如“显示我的cam”,通过在另一端接收该消息,另一端应以某种方式触发
handleRemoteStreamAdded
。但是在这个函数中有一个预定义的
事件
,我只能通过
pc.onaddstream=handleRemoteStreamAdded在本地“访问”


当我收到诸如“显示我的cam”之类的消息或通过某些事件时,如何自动开始传输另一方的cam?

在呼叫pc.addStream后,您是否正在创建另一个报价并进行新的信令交换?(不推荐使用哪个fwiw;首选addTrack和ontrack)


有关向纯音频通话添加视频的类似内容,请参阅。

在呼叫pc.addStream后,您是否正在创建另一个优惠并进行新的信令交换?(不推荐使用哪个fwiw;首选addTrack和ontrack)


请参阅,了解向纯音频通话中添加视频的类似内容。

我不太喜欢RTC部分,但启动pc时是否可以解决您的问题?正如我想象的那样,您会从一开始就发送一个静默流,并且只有在用户接受它时才替换MediaStream,这样就不需要重新协商任何内容;pc.addStream=localstream
pc.addStream(localstream)
yes,然后
localstream.removeTrack(silentVideTrack)
localstream.addTrack(gUMVideoTrack)
不知何故
pc.addStream(…)
对dummystream没有任何作用
myVidObj.srcObject=dummyStream
==>这是可行的。另一个没有:-/啊,奇怪。。。您应该能够发送这个虚拟流。我不知道会发生什么,正如我所说的,一旦它离开js引擎,我的知识就非常有限。。。。安维,这里仍然只使用
srcObject
来证明我的想法。我不太喜欢RTC部分,但启动你的电脑时能解决你的问题吗?正如我想象的那样,您会从一开始就发送一个静默流,并且只有在用户接受它时才替换MediaStream,这样就不需要重新协商任何内容;pc.addStream=localstream
pc.addStream(localstream)
yes,然后
localstream.removeTrack(silentVideTrack)
localstream.addTrack(gUMVideoTrack)
不知何故
pc.addStream(…)
对dummystream没有任何作用
myVidObj.srcObject=dummyStream
==>这是可行的。另一个没有:-/啊,奇怪。。。您应该能够发送这个虚拟流。我不知道会发生什么,正如我所说的,一旦它离开js引擎,我的知识就非常有限。。。。安维,这里仍然只使用
srcObject
来证明我的想法。