WebRTC 是用于连接两个 Agent 的协议,那么开发人员如何能同时连接上百人呢?你可以通过下面几种不同的方式来做到这一点,它们各有利弊。这些解决方案大致分为两类;点对点或客户端 / 服务器。WebRTC 的灵活性使我们能够同时创建两者。
一对一
一对一是你使用 WebRTC 的第一种连接方式。将两个 WebRTC Agent 直接连接,它们可以双向发送媒体和数据。 连接看起来像这样。
全网格
如果要建立电话会议或多人游戏,那么要使用全网格。在这种拓扑中,每一个用户都直接与其他各个用户建立连接。你可以这样构建应用,但是它有一些缺点。
在全网格拓扑中,每个用户都直接连接(到其他用户)。这意味着你必须为参与通话的每个成员独立编码和上传视频。 由于各个连接的网络条件会有所不同,因此你无法重用同一视频。在这些部署中,错误处理也很困难。你需要仔细考虑连接是不是已经彻底断开了,还是只是丢掉了与单个远端 peer 的连接。
由于这些问题,全网格最好用于小型群组。对于更大的群组,最好还是使用客户端 / 服务器拓扑。
混合网格
混合网格是全网格的替代方案,可以减轻全网格的某些问题。在混合网格中,并不是所有每个用户之间都建立连接。作为替代,媒体是通过网络中的 peer 转发的。这意味着分发媒体时,创建者可以不必使用那么多的带宽。
这种方案确实也有一些缺点。在这种配置下,就算是媒体最初的创建者也不知道视频是谁发送的,也不知道视频是否成功的到达了目标。在混合网格网络中,每增加一跳,延迟也会相应地增加。
选择性转发单元(Selective Forwarding Unit)
SFU(选择性转发单元)同样解决了全网格网络的问题,但它使用了一种完全不同的方案。SFU 以客户端 / 服务器拓扑实现,而不是 P2P 网络。 每个 WebRTC peer 都连接到 SFU 并上传其媒体。然后,SFU 将此媒体转发到其他每个连接的客户端。
使用 SFU,每个 WebRTC Agent 只需要执行一次视频的编码和上传。SFU 负责将视频分发给所有观看者。 与 SFU 的连接也比 P2P 方式容易得多。你可以让 SFU 运行于一个全世界都可以访问的地址上,从而使得客户端连接更加容易。 你无需担心 NAT 映射。但你仍然需要确保 SFU 是可以通过 TCP(ICE-TCP 或 TURN)使用的。
要创建一个简单的 SFU,一个周末就可以完成。但建立一个可以处理所有类型客户的高质量 SFU,是永无止境的。因为,拥塞控制调优、纠错和提高性能,是一项永无止境的任务。
多点会议单元(Multi-point Conferencing Unit)
MCU(多点会议单元)与 SFU 的客户端 / 服务器拓扑类似,但它会对输出流进行组合。MCU 将要出站的媒体重新编码为一个聚合流,而不是直接分发未经修改的版本。
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。