WebRTC很厉害的一点是:它无需媒体路径中的任何服务器即可建立P2P连接。但是此连接不能大规模扩展多方音频/视频通话,因为大多数情况下,完整的N:N P2P连接所需的带宽和cpu太多了。
事实上,如果您支持多方通话的话,即使只有两位与会者也可以考虑使用P2P连接。在第三位与会者加入或需要启用某些录制或广播功能时切换回SFU即可。因为广播功能仅在SFU中可用。
实际上,最近几年在许多产品(Jitsi, Hangouts, Facebook)中已成功实现了仅两名参与者进行连接并切换到SFU时使用P2P的功能。此功能的实现并非易事,且它提供了很大优势:
- 最小化网络hops,从而减少端到端延迟和拥堵的机会。这项功能对于在公司网络内部没有数据中心或会议的国家十分有用。
- 能够使用WebRTC的所有功能。例如,即使您的SFU仅支持基于REMB的拥堵管控,至少在P2P模式下您可以使用新型的基于传输反馈的拥塞管控。
- 降低基础架构成本(特别是带宽成本)。
有多种方法可以实现此功能。但总的来讲,您要做出的最关键的决定是:在建立P2P连接的同时,您是否仍连接SFU?
始终建立SFU连接可以使交换速度更快。另外,对于端点和基础结构而言,始终保持不断开连接时其效率更高。
我快速回顾了最受欢迎的WebRTC服务/平台,以了解它们的工作方式。结果如下图所示。
如图,基于以上流行平台的选择,两种方法都有其优点。
另:我测试了其他服务、平台和开源方式,但发现他们没有使用此功能。如果是我输入有误请告知我,我会更新表格。
除了决定是否保持SFU连接之外,您还需要确定何时以及如何进行切换。尤其是在本地手机应用中可以进行很多优化,以最大程度地减少过渡,无缝连接。如果有机会,我们可以就此话题进行详细讨论。
原文地址:http://www.rtcbits.com/2019/04/implementing-p2p-sfu-switching-in-webrtc.html