RTC

RTC 专题中心

自研 RTC 架构设计指南

← 返回专题列表
自研技术栈与工程攻关

自研 RTC 架构设计指南:从协议栈到媒体服务器

WebRTC 协议栈 · ICE/STUN/TURN · SFU/MCU 架构 · 编解码选型 · 客户端技术路线 | 2026-07-30 | 14+ 信源
先回答「该不该自研」:自研 RTC 的合理动机只有三个——① 月用量大到商业方案账单无法接受(>100 万分钟/月量级);② 需要商业方案给不了的媒体管线定制(特殊编解码、服务端 AI 处理、私有协议);③ 合规要求全链路私有化。若三条都不占,请回到 厂商方案横评 选一家。自研的真实成本不在开发,而在长期的弱网调优与质量运营。

核心结论(TL;DR)

结论 1
协议栈不必从零写:信令自定义(WebSocket+JSON 即可),媒体面直接站在 libwebrtc(客户端)+ 成熟 SFU(服务端)的肩膀上。真正需要自研投入的是调度、级联、质量运营这三层「胶水」,它们才是大厂 RTC 的护城河。
结论 2
TURN 不是可选项而是刚需:公网环境约 10–20% 连接需要 TURN 中继,企业网/CGNAT 环境下可高达 85%。coturn 集群要与 SFU 同区域部署、443/TLS 端口必开(穿防火墙),并按峰值并发的中继带宽(每路 ~1.5Mbps 视频)做容量规划。
结论 3
2026 年的架构答案基本收敛:SFU 为主体 + 按需 MCU 合流(录制/PSTN)+ 区域级联。MCU 纯方案只在超低端设备兜底场景残留;Cloudflare 展示了更激进的 Anycast 级联树形态——「每个 PoP 都是 SFU,媒体按树状转发」。
结论 4
编解码选型口诀:音频无脑 Opus;视频 H.264+VP8 保兼容、VP9 做主力、AV1 渐进灰度。AV1 比 VP9 再省 30–50% 带宽,但软编 CPU 开销大,2026 年仍建议只对新旗舰机型/屏幕共享开启,靠能力协商自动回退。

一、WebRTC 协议栈分层解剖

自研前先把协议栈的「层」划清楚,明确每层是复用、替换还是自研:

层协议/组件作用自研建议
信令层自定义(WebSocket/gRPC)+ SDP房间管理、能力协商(Offer/Answer)、ICE 候选交换自研(本来就无标准,业务耦合最深)
连接层ICE / STUN(RFC 8489)/ TURN(RFC 8656)NAT 穿透、连通性检查、中继兜底复用 coturn / Pion ICE
安全层DTLS(密钥协商)+ SRTP(媒体加密)端到端媒体加密,WebRTC 强制复用(切勿自研密码学)
传输层RTP/RTCP over UDP + SCTP(DataChannel)媒体承载、质量反馈(RR/SR/NACK/PLI/transport-cc)复用为主,扩展 RTCP 反馈可定制
媒体引擎编解码 + NetEQ 抖动缓冲 + 3A(AEC/ANS/AGC)采集、处理、编解码、渲染libwebrtc 打底,3A/降噪可替换自研模块
服务端媒体层SFU / MCU / 录制 / 转推媒体路由、合流、旁路直播开源 SFU 打底 + 自研调度级联
libwebrtc 与 FFmpeg 的分工:libwebrtc 是实时链路的完整引擎(含拥塞控制/抖动缓冲/3A),FFmpeg 是离线/旁路的瑞士军刀(录制转码、合流、转推 RTMP/HLS)。典型自研栈两者都用:实时面 libwebrtc,服务端录制合流管线 FFmpeg。

二、ICE / STUN / TURN:连通性的地基

1. 三件套机制速览

2. TURN 生产部署要点(coturn)

三、SFU vs MCU vs P2P:架构决策

维度P2P(Mesh)SFU(选择性转发)MCU(混流)
服务器成本≈0(仅信令+TURN)带宽为主,CPU 低转码 CPU 极高
客户端上行N-1 份拷贝,4 人即吃紧1 份(+simulcast 分层)1 份
客户端下行/解码N-1 路解码N-1 路解码(可订阅裁剪)1 路(服务器已合流)
延迟最低(直连)低(转发不转码)+1 次编解码(几十至上百 ms)
灵活性(布局/订阅)高高(客户端自由布局)低(布局服务端固定)
适用规模2–4 人4–数千人(配级联)低端设备兜底/录制/PSTN 出口

决策结论:1v1 优先 P2P(省成本、最低延迟),失败自动升级 SFU;多人一律 SFU;MCU 只作为三种出口存在——录制合流、旁路 RTMP 直播、PSTN/SIP 混音。

区域级联 SFU:跨区域房间的标准解法

四、编解码选型矩阵

1. 音频:没有悬念

2. 视频:四代同堂

编解码器压缩效率硬件支持专利费RTC 使用建议
H.264基准硬编解几乎全覆盖(含老旧安卓/iOS)MPEG-LA 专利池兼容性底线,低端机主力;Safari 最稳路径
VP8≈H.264软编为主,CPU 友好免费WebRTC 元老,simulcast 生态最成熟
VP9比 H.264/VP8 省 ~30–40%硬解渐多、硬编少免费桌面端主力,SVC(k-SVC)支持好
AV1比 VP9 再省 30–50%新旗舰才有硬编(部分 GPU/SoC)免费(AOM)屏幕共享/新机型灰度;libaom/SVT-AV1 实时模式软编 CPU 开销仍高

同画质相对码率(H.264 = 100)与软编 CPU 相对开销

码率数据综合 Red5/bloggeek 等公开对比(30–50% 递进为业界共识区间取中值);CPU 开销为实时编码模式下的量级示意(依机型/实现差异大),用于说明「省带宽是拿 CPU 换的」这一权衡。
协商策略落地:SDP 按 AV1 > VP9 > H.264/VP8 优先级排列 + 按设备能力白名单控制 AV1 开关;simulcast 各层可用不同编解码(如高层 VP9、低层 H.264 硬编)时注意 SFU 兼容性。别忘了给屏幕共享单独配置(内容型画面 AV1/VP9 的 screen content coding 收益最大)。

五、客户端三条技术路线

路线做法优点代价难度
A. 原生 libwebrtc 魔改拉 Chromium WebRTC 源码,定制编译进各端 SDK全能力可控(3A/编解码/CC 都能改);大厂标准路线构建体系庞大(百 GB 级源码链)、每年跟版本合并冲突是长期税高
B. Pion / webrtc-rs 生态自组Go/Rust 协议栈库自己拼装(多用于服务端与网关,客户端配浏览器原生 WebRTC)代码量级友好、云原生部署顺滑、改协议行为容易媒体引擎(3A/NetEQ)不完整,端侧仍需 libwebrtc 或浏览器兜底中
C. 开源全家桶二次开发LiveKit/Jitsi 的 SDK+服务端整套拿来改最快出活,SDK/SFU/监控雏形全有深度定制受框架约束;性能天花板取决于上游低

建议:绝大多数团队从 路线 C 起步(验证业务)、量级上来后向 B(服务端自研化)演进,只有做「RTC 就是主业」的公司才值得走 A。三条路线不互斥:C 起步时就把信令与调度层独立出来,后续换引擎不推倒重来。

六、信令 / 媒体 / 数据三平面整体架构

一个常被忽略的设计:调度层要能做「中途迁移」——通话中 SFU 故障或质量劣化时,通过信令触发 ICE restart 把用户无感切到备用节点。这个能力必须在信令协议 v1 里就预留(消息幂等、媒体状态可重建),事后补的代价极大。

七、自研路线图与难度评估

P0

单区域可用(1–2 月,2–3 人)难度低

开源 SFU(LiveKit/mediasoup)+ coturn + 自研信令网关,单区域上线 1v1 与小房间;打通 getStats 上报,建立第一版质量看板。

P1

多区域 + 调度(2–3 月,3–5 人)难度中

第二区域部署 + 调度服务(就近接入/负载分配)+ 区域级联打通跨区房间;TURN 分区部署与 443/TLS 兜底;录制与旁路直播出口。

P2

弱网攻坚 + 定制引擎(3–6 月,5–8 人)难度高

simulcast/SVC 策略调优、FEC/NACK 参数分场景配置(见性能优化专题)、按需魔改 libwebrtc(3A 替换/私有 CC);中途迁移与容灾演练。

P3

质量运营体系(持续)难度高

拨测网络 + 真实用户监控双轨、分国分运营商质量运营、A/B 化的参数下发平台——这一阶段没有终点,是自研与商业方案的真正分水岭。

来源列表(14+)

← 返回专题列表 ↑ 回到顶部