一、多人会议架构:从单聊到群聊的进化之路
做视频会议开发,最绕不开的就是多人架构选型。
我记得刚入行那会儿,公司要做一个小型视频会议系统。我心想,不就是把两个人通话扩展到多个人吗?结果一上手才发现,这里面的坑比想象中深得多。今天我就把三种主流架构——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 三种架构对比图
1.8 总结
三种架构没有绝对的好坏,关键看场景。
我个人最常用的是 SFU。它就像一个聪明的快递员——知道每个收件人需要什么包裹,只送需要的,不送多余的。配合 Simulcast 和带宽预估算法,体验可以做得很好。
Mesh 适合练手和小项目。MCU 适合对客户端性能要求极高的场景。但如果你问我,我会说:从 SFU 开始,准没错。