如何像 discord 一样构建 webRTC m:m audio/video live-streams/calls?客户端到客户端通过网关进行 IP 保护

How to build webRTC m:m audio/video live-streams/calls like discord does? client to client via gateway for IP protection

mux.com(还有 agora.io 等等)是一项很棒的服务,但由于它是服务器解决方案,因此非常昂贵。我不能用那个。

Discord 是一个很棒的客户端解决方案,它只使用网关作为隐藏 IP 地址等的通道。他们在这里描述了他们的整个架构:https://discord.com/blog/how-discord-handles-two-and-half-million-concurrent-voice-users-using-webrtc Discord 并不是唯一采用这种方法的,Instagram 也有 AFAIK 相同的方法,因为它很便宜并且做它做的事情

我也想将此解决方案用于我的社交媒体应用程序(如 instagram),但没有这些定制构建的东西来提高性能。我是一个单人团队,我无法处理这种复杂性;我仍然不想使用 mux,因为它对我来说太贵了

我对 stock/standard 的表现没意见。有谁知道或可以指点我一个教程,从哪里开始为 m:m audio/video 直播流呼叫构建这样的 webRTC elixier 网关解决方案?

也许已经发布了代码,我可以直接复制粘贴

非常感谢!!

编辑 我在他们的官方论坛上得到了答案 https://elixirforum.com/t/how-to-build-webrtc-m-m-audio-video-live-streams-calls-like-discord-does-client-to-client-via-gateway-for-ip-protection/44956

Discord 后端使用 SFU 为视频室中的同伴转发流,描述来自 discord post:

Discord Voice server contains two components: a signaling component and a media relay component called the selective forwarding unit or SFU. The signaling component fully controls the SFU and is responsible for generating stream identifiers and encryption keys, forwarding speaking indication, etc.

请注意,answer中的项目是使用 Elixir(基于 Erlang)编程语言编写的,这种语言在直播和 WebRTC 中都不太常用。比如FFmpeg、x264、libopus、WebRTC、SRS,这些audio/video组件都是用C++写的,你最好考虑一下。

对于像 discord 这样的视频聊天产品:

  • 毫无疑问,客户端应用程序可以构建在 WebRTC 上,包括 H5 和移动端。
  • SFU服务器,推荐C++服务器,例如SRS or mediasoup。因为整个 audio/video 经济是基于 C++ 的,所以 SFU 有很多东西要处理。
  • 关于信令服务器,也叫videoroom,可以用nodejs或者Go来写,因为这取决于你的业务,所以强烈推荐你最熟练的语言,这个服务器有很多工作要做。

而且并不是一个视频房间的所有同伴都需要发布视频流,而是他们只播放或消费流,所以它实际上是低延迟直播。有关直播和视频聊天的更多信息,请阅读