WebRTC 媒体服务器:管理长寿命对等连接

WebRTC Media Server: Managing long-lived peer connections

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

上下文

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

问题

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

考虑的方法

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

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

谢谢。

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

但是,选项 1 可能性能更高,因为对每个媒体流使用不同的传输流(不同的 UDP 端口)意味着流量整形器和 AQM 将区分不同的流,并可能为您的申请。

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