22、多人通话架构:Mesh架构、SFU架构、MCU架构对比

多人通话,说白了就是让三个以上的人同时聊起来。你想想看,两个人通话很简单,点对点直连就行。但人一多,事情就复杂了。

我记得刚入行那会儿,接了个视频会议项目。老板说「就做个多人聊天」,我心想这不简单吗?结果一调研才发现,多人通话的架构选择,直接决定了你的服务器成本、带宽消耗,还有用户体验。选错了,项目就砸了。

今天咱们就把三种主流架构——Mesh、SFU、MCU——掰开揉碎讲清楚。

一、Mesh架构:人人都是服务器

Mesh架构,也叫全连接架构。每个客户端都跟其他所有客户端建立P2P连接。

举个例子:4个人开会,每个人都要跟其他3个人建立连接。每个人要发送3路视频,接收3路视频。

核心特点:

  • 不需要中心服务器转发媒体流
  • 每个客户端既是发送者,也是接收者
  • 连接数 = n*(n-1)/2,n是人数

我在项目中遇到过一个小团队用Mesh做内部沟通,4个人以内体验还不错。但一旦超过6个人,笔记本风扇就开始狂转,CPU直接飙到90%。

避坑指南:我曾经在一个项目中尝试用Mesh支持8人通话,结果每个客户端要同时编解码7路视频。移动端直接卡死,桌面端也撑不住。Mesh只适合4人以下的小规模场景。

优点:

  • 部署简单,不需要媒体服务器
  • 延迟低,P2P直连
  • 服务器成本为零

缺点:

  • 上行带宽要求高:每个人要上传n-1路视频
  • 客户端性能压力大:解码n-1路视频
  • 扩展性差:人数一多就崩

二、SFU架构:聪明的转发者

SFU,全称Selective Forwarding Unit,选择性转发单元。它不混流,只转发。

说白了,SFU服务器就是个聪明的快递员。它收到每个人的视频流,然后根据需求转发给其他人。比如A只看B和C,那SFU就只把B和C的流发给A,D的流就不发了。

个人经验:我建议大多数商业项目直接选SFU。为什么?因为它是目前WebRTC多人通话的「最优解」。我在做在线教育项目时,用SFU支持了50人同时上课,服务器压力可控,客户端体验也很好。

SFU的工作流程:

  1. 每个客户端发送1路视频流到SFU服务器
  2. SFU根据订阅关系,决定把哪些流转发给谁
  3. 客户端只解码自己订阅的流

你想想看,跟Mesh比,SFU最大的优势是什么?每个客户端只需要上传1路视频,下行带宽也按需订阅。这就大大减轻了客户端的压力。

优点:

  • 客户端上行带宽低:只上传1路
  • 扩展性好:支持几十人到上百人
  • 灵活性强:可以按需订阅,实现布局切换
  • 支持Simulcast和SVC:适应不同网络条件

缺点:

  • 需要部署媒体服务器
  • 服务器带宽成本较高
  • 延迟比P2P略高

三、MCU架构:混流大师

MCU,全称Multipoint Control Unit,多点控制单元。它把所有视频流混合成一路,再发给每个客户端。

嗯,这里要注意。MCU跟SFU最大的区别是:MCU做混流,SFU只转发。

MCU服务器收到所有人的视频流后,把它们合成一个画面——比如4个人就分成4宫格——然后编码成一路视频流,发给每个客户端。

核心特点:

  • 服务器做混流和重新编码
  • 客户端只接收1路视频流
  • 对客户端性能要求最低

我记得早期视频会议系统基本都是MCU架构。那时候终端设备性能弱,只能靠服务器干活。但MCU的代价也很明显——服务器CPU和内存消耗巨大。

优点:

  • 客户端压力最小:只解码1路视频
  • 带宽消耗最低:只接收1路流
  • 兼容性好:老设备也能跑

缺点:

  • 服务器性能要求极高:要混流、要重新编码
  • 延迟较高:多了一步处理
  • 灵活性差:布局固定,无法单独控制
  • 成本高:需要高性能服务器

四、三种架构对比

咱们直接上表格,一目了然。

对比维度 Mesh SFU MCU
服务器需求 需要 需要
客户端上行带宽 高(n-1路) 低(1路) 低(1路)
客户端下行带宽 高(n-1路) 按需订阅 低(1路)
客户端CPU消耗
服务器CPU消耗 低(只转发) 高(混流编码)
延迟
扩展性 差(≤4人) 好(≤100人) 中(≤20人)
灵活性
部署成本

五、架构选择建议

我个人习惯根据场景来选,没有银弹。

选型指南:

  • 小团队内部沟通(2-4人):Mesh就够了,零成本部署
  • 在线教育、视频会议(5-50人):SFU是首选,平衡了性能和成本
  • 大型直播、万人会议:SFU + CDN组合,或者用SFU做级联
  • 老设备兼容、特殊场景:MCU,但要做好服务器预算

为什么会这样?因为现在的趋势是客户端性能越来越强,网络带宽也越来越好。SFU把处理压力分散到客户端,服务器只做转发,性价比最高。

我在做在线教育项目时,一开始用了MCU,结果服务器成本高得吓人。后来切换到SFU,服务器成本降了70%,用户体验反而更好了。因为学生可以自由选择看哪个老师的画面,而不是被固定布局限制。

六、核心知识图谱

下面这张图,把三种架构的核心逻辑和适用场景都画出来了。

多人通话架构对比 Mesh 架构 A B C D 每人连接 n-1 个节点 适合 ≤4 人 客户端压力大 SFU 架构 A B C D SFU 服务器只转发,不混流 适合 5-100 人 推荐方案 MCU 架构 A B C D MCU 服务器混流+重新编码 适合 ≤20 人 服务器成本高

从图上可以清楚看到:Mesh是人人相连,SFU是星型转发,MCU是中心混流。三种架构各有优劣,关键看你的业务场景。

我的建议:如果你刚开始做WebRTC多人通话,先从SFU入手。开源方案有mediasoup、Janus、LiveKit,社区活跃,文档齐全。我在项目中用mediasoup做过50人同时在线,稳定运行了大半年,没出过问题。

好了,三种架构就讲到这里。记住一句话:没有最好的架构,只有最适合的架构。Mesh省钱但费客户端,MCU省客户端但费服务器,SFU在中间找到了平衡点。

公众号:蓝海资料掘金营,微信deep3321