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

WebRTC媒体服务器:管理长寿命对等连接,webrtc,p2p,rtcpeerconnection,Webrtc,P2p,Rtcpeerconnection,我从WebRTC开始,这主要是一个设计问题。寻找两种相互竞争的方法的优缺点 上下文 我正在创建一个媒体服务器,将视频流到多个客户端。每个客户端都可以请求在浏览器页面中查看一个或多个视频流,然后关闭这些视频流并请求其他视频流,依此类推。单个客户机一次可能有几个小时或几天的持续连接,可以随意打开或关闭不同的流 问题 如何管理与客户端的对等连接 经过深思熟虑的方法 每个(客户端、视频流)对都有自己的对等连接。因此,如果客户端正在查看5个视频流,则该网页将有5个对等连接。每个对等连接都有一个磁道。这涉及

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

上下文

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

问题

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

经过深思熟虑的方法

  • 每个(客户端、视频流)对都有自己的对等连接。因此,如果客户端正在查看5个视频流,则该网页将有5个对等连接。每个对等连接都有一个磁道。这涉及每次客户端执行查看/关闭视频流的操作时创建/销毁对等连接
  • 每个(客户端)都有一个对等连接。根据客户端操作,我们可以添加跟踪,也可以从对等连接中删除跟踪。只要客户端在我们的网页上,单一连接就一直存在
  • 从表面上看,选项2似乎没有那么“浪费”,因为只有一个连接,但从WebRTC信号来看,添加/删除磁道的行为会触发新一轮的报价/应答,因此我不确定它是否真的更有效。此外,它似乎更难管理和实现,因为它更具状态性,例如,确保不再使用时正确清理轨道


    谢谢。

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

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


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

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

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

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