WebRTC视频会议(多对多)

时间:2015-11-09 03:10:56

标签: javascript node.js socket.io webrtc

我即将使用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>

提前致谢。

1 个答案:

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