Mediasoup的SFU媒体服务转发中心详解(与传统SFU的区别)

前言

我们都知道音视频服务的架构方式一般就是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 条线这种情况)。

相关推荐
EasyNVR15 小时前
EasyNVR,让视频接入更简单,让集成开发更自由
音视频
电商API_1800790524716 小时前
淘宝商品视频提取API全解析:从授权到落地实战
爬虫·python·信息可视化·数据分析·音视频
aqi0019 小时前
FFmpeg开发笔记(九十五)国产的开源视频美颜工具VideoEditorForAndroid
android·ffmpeg·音视频·直播·流媒体
却道天凉_好个秋20 小时前
音视频学习(七十八):行程编码
音视频·视频压缩
EasyDSS21 小时前
解析RTMP视频推流平台EasyDSS如何实现无人机推流直播
音视频·无人机
专业开发者1 天前
‌蓝牙低功耗音频(Bluetooth LE Audio)的幕后解析
音视频
EasyCVR1 天前
视频汇聚平台EasyCVR筑牢智慧物流全场景可视化安全防线
大数据·安全·音视频
子夜江寒1 天前
OpenCV 入门:图像与视频的基础操作
python·opencv·音视频
shuishen491 天前
视频尾帧提取功能实现详解 - 纯前端Canvas API实现
前端·音视频·尾帧·末帧
Lueeee.1 天前
如果在调试音频的时候(音频标准编码是aac),发现声音有异常,比如有电流滋滋或者其他不正常的声音该怎么去排查
音视频·aac