1

我从 WebRTC 开始,这主要是一个设计问题。寻找两种竞争方法的优缺点。

语境

我正在创建一个将视频流式传输到多个客户端的媒体服务器。每个客户端都可以请求一个或多个视频流以在浏览器页面中查看,然后关闭这些视频流并请求其他视频流,依此类推。单个客户端可能一次有几个小时或几天的持久连接,可以随意打开和关闭不同的流。

问题

如何管理与客户端的对等连接?

考虑的方法

  1. 每个(客户端,视频流)对都有自己的对等连接。因此,如果客户端正在查看 5 个视频流,则该网页将有 5 个对等连接。每个对等连接都有一个轨道。这涉及每次客户端采取行动查看/关闭视频流时创建/销毁对等连接。
  2. 每个(客户端)都有一个对等连接。基于客户端的操作,我们要么添加轨道,要么从对等连接中删除轨道。只要客户端在我们的网页上,单一连接就会一直存在。

从表面上看,选项 2 似乎不那么“浪费”,因为只有一个连接,但是阅读 WebRTC 信号,添加/删除曲目的行为会触发新一轮的提议/答案,所以我不确定它实际上更多高效的。此外,它似乎更难管理和实施,因为它更有状态,例如,确保在不再使用时正确清理轨道。

谢谢。

4

1 回答 1

1

选项 2 肯定更有效,因为它避免了为每个流进行 ICE 协商。它还可以避免浪费 UDP 端口,如果您的服务器非常繁忙,这可能很重要。(它还限制了 NAT 盒子中的状态数量,现在这可能不再是问题了。)

然而,选项 1 可能性能更高,因为为每个媒体流(不同的 UDP 端口)使用不同的传输流意味着流量整形器和 AQM 将区分不同的流,并可能为您的应用程序提供更多吞吐量。

也许更重要的是,选项 1 实现起来要简单得多。关于重新协商对等连接时可以做什么有复杂的规则,它们很容易被破坏,导致难以调试的失败。

于 2020-10-04T20:00:11.277 回答