我即将使用webRTC + socket.io + node.js建立一个视频会议系统,所以我已经读过这本书作为Simon Pietro Romano的“与webRTC进行实时通信”的起点,我已经读完了,我我将在100 Mbps本地网络上运行这个系统,所以我将使用网状网络拓扑,因为带宽在这里不是问题,我不想专注于此,我只是有一个关于与许多用户合作的简单问题,特别是在使用这些功能时:
var pc // PeerConnection Object
pc.onaddstream = ...//for receiving stream from remote party
pc.setRemoteDescription()...//for setting .sdp file from remote party
我知道我必须在每个对等体上建立点对点连接,但我们假设我有3个用户:A,B和C.
A将成为房间发起人,然后B加入房间,这里A向B发送要约并接收来自B的回答,setRemoteDescription(answerB)和B setRemoteDescription(offerA),但是当C加入房间时, A和B将是它的发起者,所以它们都会向C发送报价,而C会向他们发送答案,这是我的困惑:
当C首次收到来自A的报价时,这是C setRemoteDescription(offerA),但是当收到来自B的报价时,这是C setRemoteDescription(offerB),我在这里设置一个新值并且从A中丢失之前的报价,是这个程序只是暂时的?,是不是C还需要A报价?,我知道这个sdp文件只包含webbrowser媒体信息。我对onaddstream有同样的疑问,这个程序是否会自动从一个对等端然后从另一个对等端捕获流?第一个捕获B的流,第二个从C开始,当最后一个加入房间时?在捕获C时,A会丢失B的流吗? ?
另一方面,addIceCandidate只是为每个对等体添加远程候选者,因此本地对等体具有远程对等体路由,它永远不会丢失远程对等体路由,我想,我是对的吗?
我找到了关于webRTC视频会议的源代码,我发现onaddstream和setRemoteDescription就像临时函数,一旦设置了对等体之间的连接,那些就不再需要了,我不知道,也许我错了。< / p>
提前致谢。
答案 0 :(得分:4)
当C首次收到A的报价时,这是C setRemoteDescription(offerA),但是当从B接收报价时,这是 C setRemoteDescription(offerB),我在这里设置一个新值 失去以前的A报价,这个程序只是暂时的吗? 是不是C不再需要A报价?
您需要在客户端与其他参与者建立对等连接(pc
),您将执行类似以下操作:
socket.on('offer', function(from, data) {
users[from].pc.setRemoteDescription(new RTCSessionDescription(data));
// create answer..
});
请注意,节点服务器正在发送商品以及发送商品的用户的ID。此外,users
将包含每个房间参与者的条目,并引用其pc
。您将为每个参与者添加他们自己的pc
的远程描述。
互联网上有很多例子,我的是http://github.com/jconde/euphony:)