来源
:Engineering Semester

内容整理
:李昊勇

这篇文章是 WebRTC 教程系列的最后一篇,主要介绍了 WebRTC 可扩展性的一些网络拓扑结构。
目录
  • WebRTC 拓扑 - 多用户视频会议介绍
  • WebRTC MESH
  • WebRTC MCU
  • WebRTC SFU
  • WebRTC 拓扑结构对比
    • 何时使用 MESH
    • 何时使用 MCU
    • 何时使用 SFU
    • Hybrid 最好的结果

WebRTC 拓扑 - 多用户视频会议介绍

讲者将介绍多用户视频会议的拓扑结构。用户连接拓扑结构对于会议如何成型非常重要。用户连接拓扑结构指的是用户之间以怎样的网络结构连接在一起。在多方会议时,必须选择一个合适的拓扑结构来适应应用场景,用户如何连接在一起对于这个会议能够扩大到什么规模非常重要,因此必须权衡拓扑结构的优缺点来扩展其功能。
WebRTC中有三种最常用的拓扑结构:P2P/MESH, MCU 和 SFU。
  • P2P/MESH 是多方会议应用里最简单的一个结构,每个成员都把其媒体内容直接发送给所有其他成员。
  • MCU 拓扑里,每个成员把它的媒体内容发给中心服务器,并由中心服务器整合转发给各个成员。
  • SFU 拓扑里,每个成员把其媒体内容发送给中心服务器,并从中心服务器直接收到每个其他成员的媒体内容。

WebRTC MESH

MESH,又称为 P2P,是多方会议的最简单的连接结构,每个用户都会把其内容发送给剩余所有其他用户。
假设有 N 个用户,就会产生 N*(N-1) 个连接,且绝大部分的编码和解码过程都是在浏览器中完成的。
对于 RTCPeerConnection 对象来说,在每个客户端,都有两个完全不同的 RTCPeerConnection,且不可以在其中复用 candidate。这个 Connection 对象中存储了所有的相关信息(音视频流信息,STUN/TURN,ICE 信息等)。
MESH 的优势如下:
  • 最简单的实现多方会议的结构方式。
  • 对于小规模的多方会议十分合适,延迟很低。
MESH 的劣势如下:
  • 仅对于规模较小的多方会议适用。
  • MESH 网络会消耗非常多的 CPU 和网络动态。
  • 越多用户在 MESH 中,每个用户的带宽压力就越大。

WebRTC MCU

MCU, Multipoint Control Units, 需要一个中心服务器来整合用户数据,由于所有的工作都是在服务器完成的,因此其对客户端机器要求不高。
每个用户端都先和服务器建立连接,再将其数据发送给服务器。服务器获取到所有参与者的媒体流之后,就会将其整合为单个媒体流并发回给各个端。MCU 确保每端只获取到一套音视频流。MCU 解码每个收到的流并对其适应分辨率。
MCU 的优势如下:
  • 可以保证更高和更稳定的音视频质量。
  • 可用于较大规模的会议。
  • 带宽基本稳定在 2Mbps。
  • MCU 对于用户端需求较小。
MCU 的劣势如下:
  • 他需要服务器重新把每个流编解码,就需要中心服务器强大的性能,也带来了多一步的延迟。

WebRTC SFU

SFU, Selective Forwarding Units, 是目前最常用的现代拓扑,每个用户发送其媒体流刀中心服务器,并受到从同一个中心服务器转发的其他用户端的媒体流,因此对用户端存在一定的设备需求。
SFU 可以从其他端收到多个多媒体流,SFU 也可以决定转发哪些多媒体流,且仅负责转发工作,不负责编解码,这点与 MCU 不同。
SFU 的优势如下:
  • 架构具有很很强的可扩展性。
  • 由于每个用户可能都会发送媒体流,它可以支持不同的屏幕输出。
  • 可以支持不同的上下带宽,对下行带宽要求比上行带宽高。
  • SFU 仅是一个转发器,服务端负载很小。

WebRTC 拓扑结构对比

何时使用 MESH

MESH 最适合在简单的视频聊天时使用,如 2-4 人场景。MESH 不需要服务器,但是 MESH 要求客户端也有足够应对 2-4 人的视频编解码。

何时使用 MCU

MCU 一定程度上解决了 WebRTC 的可扩展性问题,它将客户端的编解码工作转移到了服务器上。MCU 最大的难点在于需要将非常多的多媒体流渲染到一个 WebRTC 客户端上,且需要对每个客户端都完成同样的工作,尽管对客户端要求很低,但是这为服务器带来了非常大的压力。

何时使用 SFU

相比于 MESH 和 MCU,SFU 可以适应更多用户的视频会议场景,设备终端需要一定的性能,且允许用户有不同的视频布局。

Hybrid 最好的结果

上述三种拓扑在各自的场景中都有着很好的效果,但如果要一个可以应对最多场景的“最好”方案,就需要使用 Hybrid 拓扑。
继续阅读
阅读原文