
前言
我们都知道音视频服务的架构方式一般就是3种,即Mesh(网状)、MCU(多点控制单元)和SFU(选择性转发单元)这三种,本文主要详解一下 Mediasoup的SFU媒体服务转发中心的思想,帮助大家更好的理解和使用。
简单说下Mesh、MCU 和 SFU 的定义与区别
| 架构类型 | 全称 | 核心思想 | 数据流方向 | 主要特点 |
|---|---|---|---|---|
| Mesh | Peer-to-Peer Mesh Network | 每个客户端与其他客户端直接建立连接,互相发送/接收流 | 全连接(N×N) | 简单无服务器,但扩展性极差 |
| MCU | Multipoint Control Unit | 服务器负责接收、混流、转码、再下发 | 上行到 MCU,再下发混合流 | 中心处理强,延迟高,资源占用大 |
| SFU | Selective Forwarding Unit | 服务器只转发数据,不转码、不混流 | 上行到 SFU,SFU 选择性转发 | 低延迟、高效率,当前主流架构(如 mediasoup) |
再提供个截图的详细对比
Mesh 是客户端之间点对点连接,服务器不参与;MCU 会在服务器端解码、混流再编码所有音视频流;SFU只将接收到的音视频流转发给其他客户端,不进行编解码。

拆解
Mediasoup 设计与传统 SFU 概念的"进化差异"------它确实是 SFU,但在跨 Worker 甚至跨 Server 的场景下,它的转发逻辑已经变成"分布式 SFU",不再是单个中心节点在做全部转发。下面分几层给你拆开:
1️⃣ 单 Router / 单 Worker 时:经典 SFU 模型
📊 经典 SFU 架构图

go
A →\
B → >── Router(中央转发)
C →/
↓
统一调度转发到各 Consumer
所有 Producer/Consumer 都在一个 Router 里;
Router 是"单点中心",所有 RTP 包都在它里头转发;
完全符合传统 SFU 定义(Selective Forwarding Unit)。
2️⃣ 跨 Worker 时:SFU 被"切片"成多个 Router
假设会议太大,或者负载太重,需要把同一会议拆到多个 Worker。
📊 多 Router "切片" 架构图

go
Worker1: Router1 --- 用户 A,B
Worker2: Router2 --- 用户 C,D
Worker3: Router3 --- 用户 E,F
这时每个 Router 仍然是 SFU (局部转发中心),但它们要彼此同步媒体流。
Mediasoup 通过 PipeTransport 在各 Router 之间搭桥,让它们形成"SFU 网格"。
3️⃣ 三 个 Router 互联的实际拓扑
如果三方都互相转发音视频流,最直接的方式是全互联:
go
Router1 ↔ Router2
Router1 ↔ Router3
Router2 ↔ Router3
每条连线由一对 PipeTransport 组成:
Router1 → Router2:1 对 PipeTransport
Router2 → Router1:1 对 PipeTransport 这样三 Router 间就有 3 个连接方向 × 2 (双向)= 6 条"线"。
每条线都承担着在不同 Router 之间传递音视频流的职责。
3个Router 全互联下的通道数量
| Router 组合 | PipeTransport 数量(双向) | 说明 |
|---|---|---|
| Router1 ↔ Router2 | 2 条(1→2 和 2→1 各一对) | 双向传流 |
| Router1 ↔ Router3 | 2 条 | 双向传流 |
| Router2 ↔ Router3 | 2 条 | 双向传流 |
| 总计 | 6 条 PipeTransport 通道 | 每条都是一对传输通路 |
📊 三 Router 全互联拓扑图

🔄 PipeTransport 数据流示意图

4️⃣ 为什么要"多 Router 互联",而不是一个中央 Router
传统 SFU 是"单核"模式;Mediasoup 支持多 Worker,是为了:
1、充分利用多核 CPU;
2、支持超大会议;
3、支持跨主机分布式部署;
4、避免单 Router 成为瓶颈或单点故障。
如果仍用"中央 Router"去汇聚所有流,那它又会成为新的瓶颈,所以 Mediasoup 选择了去中心化的 SFU 协作模型 ------每个 Router 既是 SFU 又通过 PipeTransport 构成整体的"SFU 集群"。
5️⃣ 逻辑上的"中心调度",不是"中心转发"
📊 控制面 vs 数据面架构图

在应用层(Node.js 控制端)通常会有一个 Main Router Controller;
它不处理 RTP 数据,只负责:
创建/登记各个 Router;
判断跨 Router 通信;
调用
pipeToRouter()建立桥接;管理 Producer 与 Consumer 的映射关系。
所以:
数据面(RTP):分布式多 Router 互联;
控制面(信令):中心化协调。
6️⃣总结:SFU 在跨 Work 下的真实形态
| 层次 | 职责 | 是否集中 |
|---|---|---|
| Router 内部 | 媒体包选择与转发 | 本地 SFU(集中) |
| Router 之间 | PipeTransport 桥接 | 分布式互联 |
| Node.js 层 | 信令调度与拓扑管理 | 逻辑中心化 |
📘 结论:
Mediasoup 在单 Router 内是"中心 SFU",
在多 Router 跨 Worker/Server 场景下演化为
"分布式 SFU 网格",彼此之间用 PipeTransport 全互联(确实会有 6 条线这种情况)。