对等点必须能够转发数据,以便在点对点覆盖(例如 Chord)中进行广播。当每个节点(对等点)接收到数据时,它会将数据转发到其路由表中的所有其他节点,然后这些节点将再次转发相同的数据,直到环中的所有节点都收到数据。例如,结构化 p2p WebRTC 广播需要一种转发 WebRTC 视频流的方法。
据我了解,javascript WebRTC API 旨在允许开发人员设置连接,但不能直接处理媒体流。将高级视频对象“插入”到连接对象中以使用视频流,而无需对视频数据进行较低级别的访问。
问题
当然可以将传入流从一个 RTCPeerConnection 转发到另一个。这是一个示例:https://github.com/git-matrix/webrtc/tree/master/samples/web/content/peerconnection/multiple-relay 但是,在这种情况下,您无法对帧进行低级访问,并且内容将被解码和重新编码,而不是按原样传递。
首先,我想我已经成功地将 A 的视频转发给了 C。 由于我仅使用一台 PC(笔记本电脑)和两台不同的相机进行测试,因此我不能 100% 确定,但我认为我已经做到了,看来 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 代码进行正确的测试。