WebRTC 视频会议(多对多)

Posted

技术标签:

【中文标题】WebRTC 视频会议(多对多)【英文标题】:WebRTC videoconferencing (many-to-many) 【发布时间】:2016-02-09 16:12:28 【问题描述】:

我即将使用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 发送一个 offer 并收到 B 的回答,A setRemoteDescription(answerB) 和 B setRemoteDescription(offerA),但是当 C 加入房间时, A 和 B 将是它的发起者,所以他们都会向 C 发送要约,C 会向他们发送答案,这是我的困惑:

当C第一次收到A的offer时,这是C的setRemoteDescription(offerA),但是当收到B的offer时,这是C的setRemoteDescription(offerB),我在这里设置了一个新的值,失去了A之前的offer,是这个过程只是暂时的吗?C 不再需要 A 报价了吗?我知道这个 sdp 文件只包含 webbrowser 媒体信息。我对 onaddstream 有同样的疑问,此过程是否会自动从一个对等点捕获流,然后从另一个对等点捕获流?,当最后一个加入房间时,A 首先捕获 B 的流,然后从 C 捕获第二个流?,当捕获 C 时,A 会丢失 B 的流?.

另一方面,addIceCandidate 只是将远程候选者添加到每个对等点,因此本地对等点具有远程对等点路由,它永远不会丢失远程对等点路由,我想,对吗?

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

提前致谢。

【问题讨论】:

我猜你犯的错误是使用单个 PeerConnection 对象,每次调用都需要一个... 你是对的人,谢谢。 【参考方案1】:

当C第一次收到A的offer时,这就是C setRemoteDescription(offerA),但是当收到 B 的 offer 时,这是 C setRemoteDescription(offerB),我在这里设置一个新值 失去A之前的offer,这个程序只是暂时的吗? 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 :)

【讨论】:

是的,就是这样,我没有想到,你是完全正确的,我认为我可以只用客户端上的一个对等对象来处理所有对等连接-一边,谢谢。 一个问题,这个函数(在socket.on中)可以接收多个参数吗?,我一直看到只用一个参数,例如:socket.on('offer' , 函数(消息) 是的,你可以使用 socket.io 在每条消息上发送多个参数

以上是关于WebRTC 视频会议(多对多)的主要内容,如果未能解决你的问题,请参考以下文章

在 TensorFlow 中使用多对多 LSTM 进行视频分类

阿里云 —— Windows下搭建“阿里云音视频通信RTC“

关于 gstreamer 和 webrtc 的结合,有点小突破

多对多 LSTM PyTorch

数据库表中多对多关系怎么设计?

多对多关系中的 Oracle 用户