WebRTC视频会议(多对多)

WebRTC videoconferencing (many-to-many)

本文关键字:视频会议 WebRTC      更新时间:2023-09-26

我即将使用webRTC+socket.io+node.js构建一个视频会议系统,所以我已经读了这本书作为起点Simon Pietro Romano的《与webRTC的实时通信》,我已经读完了,我将在100Mbps的本地网络上运行这个系统,所以我们将使用网状网络拓扑结构,因为带宽在这里不是问题,我不想专注于此,我只是有一个关于与许多用户合作的简单问题,特别是关于使用这些功能:

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接收答案,A setRemoteDescription(answerB)和B setRemoteDescription(offerA),但当C加入会议室时,A和B将是其发起人,所以他们都将向C发送报价,C将向他们发送答案,这是我的困惑:

当C第一次收到来自A的报价时,这是C setRemoteDescription(offerA),但当收到来自B的报价时这是C setRemoteDescription(offerB),我在这里设置了一个新值,并丢失了来自A的前一个报价,这个过程只是暂时的吗?,C不会再需要A的报价了吗?,我知道这个sdp文件只包含网络浏览器媒体信息。我对onaddstream也有同样的疑问,这个过程是否会自动捕获来自一个对等体的流,然后再捕获来自另一个对等方的流?,第一个接B的流,第二个接C的流,当最后一个加入房间时?,A抓C的时候会失去B的流吗?。

另一方面,addIceCcandidate只是向每个对等体添加远程候选,所以本地对等体有远程对等体路由,它永远不会丢失远程对等体的路由,我想,我说得对吗?

我找到了关于webRTC视频会议的源代码,我看到onaddstream和setRemoteDescription就像是临时功能,一旦设置了对等端之间的连接,这些就不再必要了,我不知道,也许我错了。

提前谢谢。

当C第一次收到A的报价时,这就是CsetRemoteDescription(offerA),但当收到来自B的offer时,这是C 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:)