WebRTC 视频会议(多对多)

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

我知道我需要在每个节点上建立点对点连接,但是假设有三个用户:A、B和C。
A将成为房间的发起者,然后B加入房间,在这里A向B发送一个offer,并从B接收一个answer,A setRemoteDescription(answerB)并且B setRemoteDescription(offerA),但是当C加入房间时,A和B将成为它的发起者,因此他们两个都会向C发送offer,并且C将向他们发送answer,这里是我的困惑:
当C首先从A处收到offer时,这是C setRemoteDescription(offerA),但是当从B处收到offer时,这是C setRemoteDescription(offerB),我在这里设置了一个新值并失去了以前从A得到的offer,这个过程只是暂时的吗?C不再需要来自A的offer了吗?我知道这个SDP文件只包含Web浏览器媒体信息。我对onaddstream也有同样的疑问,这个过程会自动捕获一个节点的流,然后从另一个节点捕获流吗?A首先捕获B的流,然后在最后一个节点C加入房间时从C中捕获?当捕获C的流时,A会失去B的流吗?
另一方面,addIceCandidate只是将远程候选项添加到每个节点中,因此本地节点具有远程节点的路由,它永远不会失去远程节点的路由,我认为,我是对的吗?
我已经找到了关于WebRTC视频会议的源代码,并且我已经看到onaddstream和setRemoteDescription就像是临时函数一样,一旦节点之间的连接建立,它们就不再需要了,但我不确定,也许我错了。
提前致谢。

1
жҲ‘зҢңдҪ зҠҜзҡ„й”ҷиҜҜжҳҜдҪҝз”ЁеҚ•дёӘPeerConnectionеҜ№иұЎпјҢдҪ йңҖиҰҒдёәжҜҸдёӘе‘јеҸ«йғҪеҲӣе»әдёҖдёӘеҜ№иұЎ... - mido
你说得对,谢谢。 - Jose Ricardo Citerio Alcala
1个回答

6
当C第一次收到A的邀请时,它会执行setRemoteDescription(offerA)。但是当C收到B的邀请时,它会执行setRemoteDescription(offerB),这里设置了一个新值并且失去了之前从A得到的邀请,这个过程只是暂时的吗?C还需要A的邀请吗?
你需要在客户端为每个参与者建立一个对等连接(pc),你可以执行类似以下操作:
socket.on('offer', function(from, data) {
    users[from].pc.setRemoteDescription(new RTCSessionDescription(data));
    // create answer..
});

请注意,Node服务器将与发送方用户的ID一起发送要约。此外,users将包含每个房间参与者的条目,并引用其pc。您将为每个参与者添加远程描述到他们自己的pc
互联网上有很多示例,我的在http://github.com/jconde/euphony :)

是的,就是这样,我没有想到,你完全正确,我以为我可以在客户端只用一个对等对象处理所有点对点连接,谢谢。 - Jose Ricardo Citerio Alcala
一个问题,socket.on中的函数能否接收多个参数?我一直只看到它只用一个参数,例如:socket.on('offer', function(message) {}。 - Jose Ricardo Citerio Alcala
1
是的,您可以使用socket.io在每个消息中发送多个参数。 - Javier Conde

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接