如何计算 webrtc 的 TURN 服务器带宽?

How to calculate TURN server bandwidth for webrtc?

我使用 webrtc 开发了简单的多对多视频会议网站,为此我需要配置 TURN 服务器。我对选择带宽大小感到困惑。

单个用户最多发送500kbps的数据。参会人数上限为 300 人。每次会议的最长时间约为 200 分钟,一次最多可容纳 200 人。

我在 Google 中提到了将近 80% - 85% 我们不需要 TURN 服务器。

为此我需要多少带宽?简单的 coturn 服务器会这样做吗?如果不是,我应该在哪里购买 Turn 服务器,或者是否可以使用此配置制作自己的 TURN 服务器。

首先,WebRTC 需要每个参与者之间的点对点连接。如果您的用例在每个 session/room 中有 300 名参与者,则每个参与者都必须 upload/download 来自其他 299 名参与者的 500kbps 数据,这是相当大的网络流量。 AFAIK,即使 google 也将视频通话限制为 google meet/hangout 25 名参与者,他们在幕后使用 WebRTC。

当有 100+ 参与者时,我怀疑你是否想使用 WebRTC 构建视频会议系统,但我仍然会帮助你获得你现在想要的数字,并解释为什么它可能不现实答案结束。

根据您的数字,我们假设 20% 的用户(A 组)由于其网络设置(例如在 NAT 后面)需要 TURN 服务器,而其他 80% 的用户(B 组)将能够相互建立直接的点对点连接。

  1. A 组中的用户需要 TURN 才能连接到 A 组中的另一个用户
  2. A 组中的用户需要 TURN 才能连接到 B 组中的另一个用户
  3. B 组中的用户需要 TURN 才能连接到 A 组中的另一个用户
  4. B 组的用户不需要 TURN 连接到 A 组的用户,在这种情况下直接 peer-to-peer 连接即可。

根据你的数字,如果 80% 的用户属于 B 组,这意味着 #4 发生的几率约为 64%。 (80% * 80%)。因此,64% 的网络流量将是 peer-to-peer 不需要 TURN 的连接,而其余 36% 的流量将需要 TURN 服务器来中继视频数据。

一个用户需要连接到 299 个其他用户,其中 36% 的连接将通过 TURN 路由。这转化为通过 TURN 路由的大约 107 个连接。为了简单起见,假设每个用户的 299 个连接中有 100 个需要 TURN 中继。

您说每个用户最多发送 500kbps 的数据。由于每个用户需要通过 TURN 将视频发送给 100 个其他用户,这相当于大约 50000kbps 或 50Mbps。所以平均而言,每个用户通过 TURN 消耗 50Mbps 的网络吞吐量。 (还有 100Mbps 用于直接 p2p 连接)

由于每个 session 中有 300 users/participants,您将 50Mbps 乘以 300,得到 15000Mbps 或 15Gbps 或 15Gb/s,这是所有参与者每秒使用的总 TURN 流量。

您说的最大会议长度为 200 分钟,因此 200 分钟内交换的总流量 session 将为 15Gb/s * 60s/m * 200 = 180000 Gb = 22500 GB

仅供参考,云提供商对网络流量收取大约 0.07 美元/GB 的费用,因此您完整的 200 分钟 session 需要高达 22500 GB 的网络流量,费用为 1575 美元。

WebRTC 非常适合 room/session 中参与者数量较少的用例,因为每个参与者都必须连接到所有其他参与者。它所需的连接数以 O(n^2) 的速率增加,其中 n 是参与者的数量。

您可能想考虑使用 SFU/MFU 或调整您的数字以使其更真实。 (例如,您真的需要 300 名参与者同时分享他们的视频吗?)更何况能够支持 150Mbps 上行和 150Mbps 下行网络的用户并不多。