使用WebRTC进行P2P音频广播

3
我有一个音频源和一组听众在收听音频流。如果我使用P2P WebRTC进行流传输,那么天真的方法是从扬声器创建N-1个连接,这对于N < 3是可以的。但否则P2P是传输昂贵的。我已经概述了两种方法,并试图找出哪种最适合。

  1. 有一个集中式服务器中继和记录音频。(-延迟+成本)
  2. 与其从源打开N-1个连接,不如将一些终端节点作为非终端节点,并打开K < N-1个连接以中继和记录传输。(+延迟-成本)

我对WebRTC非常陌生。我计划我的http端使用C ++。如果我采用第二种方法,则对于音频流,我不会在服务器端增加任何额外成本。但这并不直接。如果已经存在并且运行良好,我肯定不想重新发明轮子。但我不知道现有的情况以及这种方法的风险。

如果采用第一种方法,我应该使用哪个中继服务器?它应该与业务逻辑紧密集成。这部分我很难弄清楚。使用websocket,我发现这部分很容易,因为所有人都在同一个会话中,并且所有上下文信息都可以访问。但是在这里,我需要将用户帐户映射到流,并对其应用业务逻辑。例如,对于某些用户,我会降低音量。

我还需要在同一流中广播数据。

我不能让任何人(不使用我的应用程序的人)使用我的TURN服务器。我需要某种令牌/授权系统。我该怎么做?

3个回答

3
你说得对,不要重复造轮子。从零开始构建一个WebRTC媒体服务器很困难。幸运的是,有很多选项可以简化这个任务。请看: 同时,您需要决定是将所有流发送给任何参与者还是在服务器中混合它们并仅向每个参与者发送一个。它们被称为 SFU MCU方法。
关于如何通过同一流发送数据的问题,webRTC提供了一个名为 DataChannel的机制,专门用于此目的。由于它,您可以创建具有不同轨道的流:音频、视频、屏幕共享或数据。

1

不必从源节点打开N-1个连接,一些终端节点将充当非终端节点,并打开K < N-1个连接以中继和记录传输。(+延迟-成本)

Muaz-Khans的rtcmulticonnection的广播演示演示了这一点,因此您无需重新发明轮子。正如您所说,它比中央服务器成本更低,但会增加延迟,这取决于用例是否比中央服务器更好。


这是一个不错的演示。我刚看了一下。但它仍处于初级阶段。似乎还没有标准协议。如果有人在链中退出,会发生什么?如果有更优的非终端节点,如何进行切换?或者采用轮询机制。有很多事情可以做,以使这样的分布式系统更加高效。 - Neel Basu
从任何WebRTC演示(开源或非开源)到生产系统还有很长的路要走。祝你好运。 - Philipp Hancke

0
我不能让任何不使用我的应用程序的人使用我的TURN服务器。我需要一种令牌/认证系统来实现这一点。我该怎么做?
标准的方法是使用有时间限制的凭据。coturn服务器支持此功能,并在其wiki中提供了非常好的解释
虽然不是完美的,但到目前为止还没有发生过滥用的重大案例。

我应该使用自己的TURN服务器还是使用像Xirus这样的服务? - Neel Basu

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