将WebRTC视频转发以进行点对点广播

3

在P2P覆盖网络(如Chord)中,节点(对等方)必须能够转发数据才能进行广播。当每个节点(对等方)接收到数据后,它会将数据转发给其路由表中的所有其他节点,然后这些节点再次转发相同的数据,直到环中的所有节点都接收到数据。例如,结构化P2P WebRTC广播需要一种转发WebRTC视频流的方法。

在我看来,javascript WebRTC API旨在允许开发人员建立连接,但不直接处理媒体流。高级别的视频对象被“插入”到连接对象中,以消耗视频流,而无需访问视频数据的低级别。

问题

  1. 是否有办法在WebRTC客户端内部访问原始视频流?
  2. WebRTC中是否有任何形式的原始消费者对象或转发/中继对象?
4个回答

5

1
链接已失效,我不确定在Chrome中是否仍然可以实现。以下内容表明它不可能:https://github.com/muaz-khan/WebRTC-Scalable-Broadcast,而以下内容则表明它是可能的:https://github.com/webrtc/samples/tree/gh-pages/src/content/peerconnection/multiple-relay,也许第二个链接只是代码更好。 - HMR

2
首先,我认为我已经成功将 A 的视频传递给了 C。由于我只使用了一台电脑(笔记本电脑)和两个不同的摄像头进行测试,因此我不能百分之百确定,但我认为我已经做到了,看起来 RTCPeerconnection 能够接收远程流。
顺便说一句,我正在使用 easyrtc 库,因为我找不到任何可用的简单代码来进行测试。
所以基本的想法应该是,
A 获取事件视频。 B 连接到 A,
B 保存从 A 接收到的远程流引用;
C 连接到 B,
B 不是传递本地媒体流,而是将远程媒体流交给 C;
C 将保存那个远程媒体流;
当 D 连接到 C 时,C 将从 B(实际上最初从 A 接收到)接收到的远程媒体流交给 D,
同样,流会继续传递...即 A 的媒体流通过 B、C、D、E 等节点传递。
请注意,连接流应该如下所示: A<-->B<-->C<-->D<-->E...每个节点只有两个连接..与前一个节点和后一个节点。
然而,长话短说-是的,您可以访问媒体流并将其交给另一个远程连接。
我只需要一位专家能够为我提供一个可行的原始 JS 基于 webrtc 的代码,其中 A 与 B 相连,反之亦然...然后我会尝试编写 C 连接到 B 和 D 连接到 C 的代码进行适当的测试。

谢谢,这看起来很合理。让我研究一下,如果正确的话,我会在我的问题上发布代码并给你答案。 - JSON

1
  1. 不,客户端没有这个功能。您必须将其发送到服务器,然后在那里可以做几乎任何您想做的事情。
  2. 您必须为每个要转发的对等方打开单独的对等连接。

来源:http://www.youtube.com/watch?v=E8C8ouiXHHk


这似乎没有回答我的问题。至于你回答的第一部分,点对点视频不会将视频发送到服务器。即使视频来自不同的客户端,这也是客户端/服务器而不是点对点。此外,在点对点广播中,即使原始视频源是服务器(例如新闻广播),它也会特别从客户端“反弹”到客户端。 - JSON
关于第二部分,你使用了“forward”这个词,这正是我要找的,即视频从一个对等节点通过网络进入JavaScript,然后发送到不同对等节点的列表。如果视频源自直接连接的对等方,则不会被转发,而是直接发送。你是说你可以直接将其转发到不同的对等连接吗?如果可以,怎么做? - JSON
1
关于您的第一个问题:目前在客户端(即仅限于WebRTC JavaScript API)无法获取原始视频流。如果您想要访问原始流,则必须将流发送到服务器(例如运行本地平台的C++服务器,使用WebRTC C++库),并在那里进行处理。在视频结束时,观众中有人提出了同样的问题,因此我认为这个视频可能对您有用。 - Svetlin Mladenov

1
是的,这不仅可能,而且实际上非常容易。一旦 A 和 B 之间的第一次会话建立起来,你可以取其中的任何一个 轨道 并将其传递给 B 和 C 之间的新连接的 addTrack 函数

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