为点对点广播转发 WebRTC 视频

Posted

技术标签:

【中文标题】为点对点广播转发 WebRTC 视频【英文标题】:Forwarding WebRTC Video for Peer to Peer Broadcasting 【发布时间】:2013-11-17 01:13:03 【问题描述】:

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

据我了解,javascript WebRTC API 旨在允许开发人员设置连接但不能直接处理媒体流。将高级视频对象“插入”到连接对象中以使用视频流,而无需对视频数据进行较低级别的访问。

问题

    有没有办法在 WebRTC 客户端中访问原始视频流? WebRTC 中是否存在任何形式的原始消费者对象或转发/中继对象?

【问题讨论】:

【参考方案1】:
    不,客户端没有。您必须将其发送到服务器,然后您就可以随心所欲地做任何事情。 您必须为要转发到的每个对等方打开单独的对等连接。

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

【讨论】:

这似乎没有回答我的问题。至于答案的第 1 部分,点对点视频不会将视频发送到服务器。这是客户端/服务器而不是点对点,即使视频来自不同的客户端。此外,在点对点广播中,即使原始视频源是诸如新闻广播之类的服务器,它也会在客户端之间“反弹”。 对于第 2 部分,您使用了“转发”这个词,这正是我正在寻找的,即视频通过网络从一个对等点进入 javascript,然后发送到不同的列表同行。如果视频来自直接连接的对等点,则不转发而是直接发送。你是说你可以从字面上转发到不同的对等连接?如果是这样呢? 关于您的第一个问题:当您在客户端(即仅限于 WebRTC javascript API)时,目前无法获取原始视频流。如果要访问原始流,则必须将流发送到服务器(在平台上本地运行的东西,例如使用 web-RTC C++ 库的 C++ 服务器)并在那里进行处理。在视频结束时,观众中的一个人提出了同样的问题,所以我认为这个视频可能对你有用。【参考方案2】:

首先,我想我已经成功地将 A 的视频转发给了 C。 由于我只使用一台 PC(笔记本电脑)和两台不同的摄像头进行测试,我不能 100% 确定,但我认为我已经做到了,看来 RTCPeerconnection 能够获取远程流。

顺便说一句,我正在使用 easyrtc 库,因为我找不到任何可行的简单代码进行测试。

所以基本思路应该是,

A 抓取活动视频。 B 连接到 A,

B保存从A接收到的远程流引用;

C 连接到 B,

B 不传递本地媒体流,而是将远程媒体流交给 C;

C 将保存该远程媒体流;

当 D 连接到 C 时,C 会将从 B 接收到的远程媒体流(实际上最初是从 A 接收到的)交给 D

同样,流程继续……即 A 的媒体流像 Wave 一样通过 B、C、D、E....

请注意,连接流程应如下所示: ABCDE...每个节点只有两个连接..前一个节点和下一个节点。

不过,长话短说 - 是的,您可以访问媒体流并将其交给另一个远程连接

我只需要一位专家,他可以给我一个工作的基于 JS 的 webrtc 代码,其中 A 与 B 连接,反之亦然。我会尝试编写 C 与 B 连接,D 与 C 代码连接以进行适当的测试。

【讨论】:

谢谢,这似乎合乎逻辑。让我看看这个,如果它是正确的,我会在我上面的问题中发布代码并给你答案。【参考方案3】:

当然可以将传入流从一个 RTCPeerConnection 转发到另一个。这是一个例子:https://github.com/git-matrix/webrtc/tree/master/samples/web/content/peerconnection/multiple-relay 但是,在这种情况下,您无法获得对帧的低级访问权限,并且内容将被解码和重新编码,而不是按原样传递。

【讨论】:

链接已失效,我不确定 Chrome 是否(仍然)可以这样做。以下建议不是:github.com/muaz-khan/WebRTC-Scalable-Broadcast 以下建议是:github.com/webrtc/samples/tree/gh-pages/src/content/… 也许第二个代码更好。

以上是关于为点对点广播转发 WebRTC 视频的主要内容,如果未能解决你的问题,请参考以下文章

腾讯IVWEB团队:WebRTC 点对点直播

使用 WebRTC/Alternative 的点对点 1080p 直播?

Spring Boot WebSocket + WebRTC 实现点对点视频通话功能Demo

同一个物理网络上的 webRTC 点对点

WebRTC 中继服务器/广播多个客户端

webrtc博客收藏