一、多人会议架构:从单聊到群聊的进化之路

做视频会议开发,最绕不开的就是多人架构选型。

我记得刚入行那会儿,公司要做一个小型视频会议系统。我心想,不就是把两个人通话扩展到多个人吗?结果一上手才发现,这里面的坑比想象中深得多。今天我就把三种主流架构——Mesh、SFU、MCU——掰开揉碎了讲给你听。

1.1 为什么需要多人架构?

两个人通话很简单。A 发流给 B,B 发流给 A,搞定。

但三个人呢?四个人呢?十个人呢?

你想想看,如果每个人都把自己的音视频流发给其他所有人,那网络带宽和 CPU 消耗会呈指数级增长。这就是多人架构要解决的核心问题——如何高效地分发媒体流

核心矛盾:参会人数越多,带宽和计算资源消耗越大。架构选型就是在「质量」和「成本」之间找平衡。

1.2 Mesh 架构:最简单的方案

Mesh 架构,说白了就是「每个人跟每个人直连」。

假设有 4 个人开会:

  • 每个人都要向其他 3 个人发送自己的音视频流
  • 每个人都要接收其他 3 个人的流
  • 总共需要建立 N×(N-1) 个连接

4 个人就是 12 个连接。10 个人就是 90 个连接。

优点:

  • 实现简单,不需要服务器转发
  • 延迟最低,端到端直连
  • 服务器压力小,只需要做信令协调

缺点:

  • 上行带宽要求高:每个人都要上传多路流
  • 客户端压力大:编码、解码、渲染多路视频
  • 不适合超过 4-6 人的场景

我的经验:我曾经在一个项目中用 Mesh 架构做了 8 人会议。结果测试时,用户的手机直接烫得能煎鸡蛋。上行带宽吃掉 20Mbps,CPU 占用 90% 以上。嗯,从那以后我就知道,Mesh 只适合小规模场景。

1.3 SFU 架构:目前的主流选择

SFU(Selective Forwarding Unit),选择性转发单元。

它的思路很简单:客户端只上传一路流到服务器,服务器负责转发给其他参会者

还是 4 个人开会:

  • 每个人只上传 1 路流到 SFU 服务器
  • SFU 服务器把每个人的流复制转发给其他人
  • 每个人从服务器接收 3 路流

优点:

  • 上行带宽大幅降低:每人只需上传 1 路
  • 服务器可以做流控:根据接收端能力选择性转发
  • 支持 Simulcast:发送端同时编码多分辨率,接收端按需订阅
  • 扩展性好,支持几十人到上百人

缺点:

  • 需要部署转发服务器
  • 服务器带宽压力大(但比 MCU 小)
  • 接收端仍需解码多路流

实际项目中的做法:我现在做的大多数项目都选 SFU。配合 Simulcast 和 SVC,可以在带宽波动时自动降级。比如用户从 WiFi 切到 4G,服务器自动只转发低分辨率流给他。

1.4 MCU 架构:最「重」的方案

MCU(Multipoint Control Unit),多点控制单元。

MCU 的思路更激进:服务器不仅转发,还负责混流

4 个人开会:

  • 每个人只上传 1 路流到 MCU 服务器
  • MCU 服务器把所有人的画面合成 1 路流
  • 每个人只接收 1 路合成后的流

优点:

  • 客户端压力最小:只需解码 1 路流
  • 带宽消耗最低:上下行都只有 1 路
  • 兼容性最好:老设备也能跑

缺点:

  • 服务器压力巨大:需要实时混流、转码
  • 延迟较高:混流需要时间
  • 灵活性差:布局固定,无法个性化
  • 成本高:需要高性能服务器

避坑指南:我曾经在一个项目中选了 MCU,因为觉得「客户端压力小」是好事。结果服务器成本直接翻了三倍,而且用户抱怨画面延迟明显。后来我换成了 SFU + 客户端混流,效果好了很多。

1.5 三种架构对比

维度 Mesh SFU MCU
上行带宽 N-1 路 1 路 1 路
下行带宽 N-1 路 N-1 路 1 路
客户端解码 N-1 路 N-1 路 1 路
服务器压力
延迟 最低
扩展性 差(≤6人) 好(≤100人) 中(≤50人)
实现复杂度
部署成本 最低

1.6 架构选型建议

说了这么多,到底怎么选?我个人的经验是这样的:

  • 2-4 人小会议:Mesh 就够了。简单、免费、延迟低。
  • 5-50 人中型会议:SFU 是最佳选择。成本可控,体验好。
  • 50 人以上大型会议:SFU + 分层编码。或者考虑混合架构。
  • 老设备兼容场景:MCU 可以考虑,但要做好成本预算。

我的建议:如果你刚开始做,直接选 SFU。它是最平衡的方案。等业务做大了,再考虑优化和混合架构。别一上来就搞 MCU,成本扛不住。

1.7 三种架构对比图

三种多人会议架构对比 Mesh 架构 A B C D 每人上传 N-1 路 每人接收 N-1 路 适合 ≤6 人 SFU 架构 SFU A B C 每人上传 1 路 服务器选择性转发 适合 ≤100 人 MCU 架构 MCU A B C 合成 1 路 每人上传 1 路 服务器混流后下发 1 路

1.8 总结

三种架构没有绝对的好坏,关键看场景。

我个人最常用的是 SFU。它就像一个聪明的快递员——知道每个收件人需要什么包裹,只送需要的,不送多余的。配合 Simulcast 和带宽预估算法,体验可以做得很好。

Mesh 适合练手和小项目。MCU 适合对客户端性能要求极高的场景。但如果你问我,我会说:从 SFU 开始,准没错


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