videocalling
SFU(选择性转发单元)

SFU(选择性转发单元)

架构

高效转发参与者之间流媒体的服务器架构

什么是 SFU?

选择性转发单元(Selective Forwarding Unit,简称 SFU)是一种媒体服务器架构,充当视频和音频流的智能路由器。与参与者直接互发流的点对点连接不同,也与解码和混合所有流的 MCU 服务器不同,SFU 接收每个参与者的流,并有选择性地转发给其他参与者,而不进行修改。

可以把它想象成一个智能交通控制器:每个参与者向 SFU 发送一次视频,然后由它分发给所有需要的人。SFU 根据带宽、活跃说话者和布局要求,智能决定将哪些流发送到哪里。

截至 2025 年,SFU 已成为 WebRTC 应用的事实标准架构,几乎所有主流视频会议平台都在使用,包括 Zoom、Google Meet、Microsoft Teams、Discord 和 WhatsApp。

SFU 工作原理:分步详解

1. 建立连接

每个参与者与 SFU 服务器建立 WebRTC 连接。这包括通过信令服务器交换会话描述、协商编解码器,并使用 ICE 建立最优连接路径。

2. 媒体捕获和上传

参与者的设备从麦克风捕获音频,从摄像头捕获视频。浏览器使用约定的编解码器(如视频的 VP8、VP9 或 H.264,音频的 Opus)编码这些流,并使用 RTP(实时传输协议)或 SRTP(安全 RTP,用于加密传输)发送到 SFU。

关键是,每个参与者只上传一次流——而不是分别发送给每个观众。与 P2P 相比,这大幅减少了上传带宽需求。

3. 流接收和管理

SFU 接收并维护来自每个连接设备的独立入站流。它维护所有活跃参与者的路由表,跟踪可用的流,并根据客户端请求和网络条件管理订阅。

4. 选择性转发

这就是"选择性"的体现。SFU 不会盲目地将所有流转发给所有参与者,而是做出智能决策:

  • 只转发参与者布局中可见的流
  • 根据可用带宽选择适当的质量级别
  • 优先转发活跃说话者的流,而非静音参与者
  • 当参与者更改视图或网络条件波动时,调整流选择

5. 客户端解码

每个参与者的设备从 SFU 接收多个流,负责解码并合成最终的视频通话界面。客户端处理布局,决定哪些视频要显著显示,并渲染用户界面。

核心技术特性

无需转码

SFU 的定义特征是它不解码或重新编码视频流——只是转发编码的数据包。这使服务器端的 CPU 使用率非常低,单个 SFU 服务器可以处理数百个并发参与者。

支持联播

现代 SFU 利用联播(simulcast),每个参与者发送不同质量级别的多个视频版本(如 1080p、720p、360p)。SFU 然后根据每个接收者的带宽和设备能力,智能选择转发哪个质量。

例如,如果你参加 10 人会议,但屏幕只显示 4 人,SFU 可能会给你发送 4 个可见参与者的高质量流,以及其他人的低质量流或不发送。当你改变视图时,SFU 会立即调整。

自适应比特率

SFU 实时监控每个参与者的网络状况。当某人的带宽下降时,SFU 自动将他们切换到低质量的联播层。当情况改善时,它会升级回高质量——所有这些都不会中断通话。

SFU 的优势

出色的可扩展性

SFU 可以从小型会议扩展到大型会议。配置良好的 SFU 可以在单个通话中处理数百个参与者。由于它不处理视频,增加参与者会增加服务器带宽使用,但不会成比例增加 CPU 负载。

降低上传带宽

参与者只向 SFU 上传一次流,而不是分别发送给每个观众。在 10 人会议中,你上传一个流而不是九个——与 P2P 网状架构相比,所需上传带宽减少 9 倍。

低延迟

由于 SFU 不解码/编码,它引入的处理延迟极小——与直接 P2P 相比,通常只增加 50-100 毫秒的延迟。这使对话保持自然和实时的感觉。

成本效益高

与需要昂贵 CPU 资源进行转码的 MCU 服务器相比,SFU 服务器运营成本相对较低。主要成本是带宽,这比计算能力便宜得多。

质量灵活

每个参与者可以根据其设备和网络接收不同质量的流。使用 4G 的手机用户获得低质量以节省带宽,而使用光纤和 4K 显示器的用户获得最高可用质量。

局限性

客户端解码负载

由于 SFU 不混合流,每个参与者的设备必须同时解码多个视频流。在大型会议中,这可能会给旧设备或手机带来压力,特别是同时查看许多参与者时。

带宽要求

虽然上传带宽大幅减少,但下载带宽仍然可能很大。如果你在网格视图中查看 9 个人,你正在下载 9 个独立的视频流。在有限的连接上,这可能导致质量问题。

无统一布局

与服务器创建单个合成视频的 MCU 不同,SFU 要求每个客户端合成自己的布局。这意味着每个参与者可能看到略有不同的排列,录制需要类似 MCU 的服务器端合成。

何时使用 SFU

SFU 适用于:

  • 群组视频通话:从 5 人到 100+ 人的任何规模
  • 专业会议:商务会议、网络研讨会、远程协作
  • 社交视频聊天:朋友圈、家庭通话、游戏社区
  • 成本敏感型应用:当服务器成本重要但质量不能妥协时
  • 包含移动端的会议:当一些参与者从手机或平板加入时

SFU vs P2P vs MCU

了解何时使用每种架构:

  • P2P:最适合 1 对 1 或非常小的组(2-4 人),成本最低,隐私最好
  • SFU:最适合大多数用例(5-100+ 人),成本/性能平衡,行业标准
  • MCU:最适合非常大的广播(100+ 观众)、遗留系统,或为观众保证带宽节省

流行的 SFU 实现

几种开源和商业 SFU 服务器被广泛使用:

  • mediasoup:强大的 Node.js SFU,高度灵活且性能优异
  • Janus:功能丰富的 C 语言 SFU,极其高效
  • LiveKit:现代 Go 语言 SFU,开发者体验出色
  • Cloudflare Calls:托管 SFU 服务,全球边缘部署

为什么 SFU 在 2025 年占主导地位

SFU 已成为压倒性的首选架构,因为它在成本、质量和可扩展性之间达到了最佳平衡点。它避免了 P2P 的指数复杂性,同时比 MCU 经济得多。

所有主流平台——Zoom 的网页客户端、Google Meet、Microsoft Teams、Discord、Telegram 视频通话——底层都使用 SFU 架构。联播、选择性转发和自适应比特率的组合为用户提供高质量体验,而不会在服务器基础设施上花费过多。

对于在 2025 年构建视频通话功能的开发者来说,除非有非常特定的要求需要 P2P(最大隐私、仅 1 对 1)或 MCU(极端带宽限制、遗留兼容性),否则 SFU 几乎总是正确的答案。

参考资料