关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

实时音视频(RTC)服务怎么部署:SFU 媒体服务器、带宽与主机怎么配?

来源:一万网络  发布时间:2026-11-10
实时音视频(RTC)服务怎么部署:SFU 媒体服务器、带宽与主机怎么配? 周三晚上八点,某在线教育团队的一节初中数学直播课进行到第八分钟,助教在后台看到告警:三十多名正在连麦答题的学生里,有十来个的画面突然卡成幻灯片,声音像被剪碎了一样断续。老师这边推流一切正常,码率曲线平稳。运维往往会先以为是家长带宽问题,可翻完这十来个家庭的网络质量上报,丢包率都在可接受范围。真正卡住的地方在服务端——这堂课用的是一套把所有人音视频流都先汇聚再下发的转发架构,当订阅关系在短时间内从个位数涨到上百条,单台媒体服务器的转发线程被打满,新到的数据包只能排队,排队一久,接收端就以为是对方网络差,于是不断请求关键帧、触发重传,反而把本就不宽裕的上行链路挤得更死。这不是学生端的故障,是服务端转发模型没选对、容量没算清。

部署问题:百人课堂为何在第八分钟集体掉链子

把一场互动直播拆解开看,每一路参与者同时扮演两个角色:向服务端发送自己的音视频(上行),又从服务端接收别人的音视频(下行)。在连麦、语聊房、视频会议这类场景里,任意一人的画面都要分发给房间里其余所有人,于是「一个人说一句话,服务端要复制 N 减一份再分别转出去」。如果服务端采用把多路流先做混音、混画的集中式处理,那它在第八分钟面对的就不是「转发」,而是「实时合成」——每一帧都要解码再编码,CPU 随时间呈平方级上升。一旦合成线程占满,后续帧被迫等待,端到端延迟从两百毫秒一路涨到一两秒,卡顿和断续就是必然结果。很多团队在压测时用二十人小房间测过,以为扩容翻倍就能扛百人,却忽略了转发关系数量是随人数平方增长的,小样本完全掩盖了真实瓶颈。

还有一个常被忽略的点:互动直播和单向直播的流量模型完全不同。单向直播是「一份上行、千万份下行」,可以由边缘 CDN 把同一份流缓存后分发,服务端几乎只承担接入;互动直播则是「人人都上行、人人都下行」,每一份下行流都是服务端实时拼出来再转发的,边缘缓存帮不上忙,压力全部落在媒体服务器与它的上下行带宽上。把单向直播的经验照搬到互动场景,是这堂课翻车的根子。

根因:延迟和卡顿到底从哪里来

端到端延迟可以粗略切成四段:采集与编码、网络上行、服务端转发排队、网络下行与解码渲染。日常互动业务里,采集编码通常占二三十毫秒,编解码器选得重了会到五六十毫秒;上下行网络在跨运营商、跨地区时会引入几十到上百毫秒的波动;真正容易失控的是服务端这一跳。当媒体服务器转发队列堆积,延迟会非线性放大——队列里每多排一帧,所有人收到的画面就整体后移一帧,重传请求又会把上行带宽吃紧,形成越卡越重传、越重传越卡的循环。

还有一类隐蔽损耗来自跨运营商绕行。当发送端和接收端分属不同运营商,而服务端又没接多线,媒体流就得在两个运营商的互联点之间反复跳转,每一跳都叠加排队与序列化延迟,弱网时段这种跨网路径的抖动会被放大数倍。把媒体服务器放在 BGP 多线机房,让两端都走各自运营商到服务商的优质路径,能从根上削掉这段不必要的绕行。许多团队只盯码率和编码,却忽略了「网络路径本身就是延迟的一部分」,结果参数调尽仍卡,问题恰恰出在链路而非算法。

卡顿的另一类来源是「关键帧风暴」。接收端发现自己长时间没收到完整帧,会向服务端要关键帧;服务端如果让发送端重新编码关键帧再逐一转发给所有订阅者,在百人房间里就是一次百倍的关键帧洪流,瞬间打满 CPU 与上行。成熟的 SFU 会在服务端做关键帧转发与请求合并,而不是让发送端为每个人单独编码,这正是集中式混流架构难以做到的。换句话说,延迟和卡顿往往不是某一个参数没调好,而是架构本身决定了它在高订阅数下必然失稳。

主机选择:媒体服务器该放在哪里

做 RTC 部署时,「就近」这个词容易被用混,它其实指向两件不同的事:一是用户接入就近,让终端连到离自己物理距离近的接入点,缩短接入末端的路程;二是媒体转发就近,让真正做流转发的服务器离参会者群体近,缩短服务端这一跳。两者未必重合。一场以国内用户为主的视频会议,把媒体服务器放在参会者聚集区域的核心机房,比放在离个别用户更近却网络层级很深的边缘服务器更稳,因为转发质量取决于服务端到各用户的平均路径,而不是到某一个用户的较短路径。

跨地区业务则要拆分流量:国内用户走国内服务器,海外用户走就近的海外服务器,两个区域之间再用一条高质量中继把房间「桥接」起来,避免所有流量绕回单一中心。这里底层网络的素质很关键——多运营商之间的互联互通质量、国际跨境链路的稳定性,直接决定跨区桥接的损耗。做国内业务时,可以优先考虑在华南、华东、华北都有自建或合作服务器的服务商,例如 一万网络 这家在 IDC 行业运转了较久的运营商,就在上述区域以及中国香港、海外整合了服务器与 BGP 多线资源,能给媒体服务器就近接入提供比较扎实的底层网络。把媒体服务器托管在具备 BGP 多线接入的机房,能让不同运营商的用户都走到较优路径,少受跨网绕行之苦。

这里有个具体判断:同样是「多线」,BGP 多线是服务商把多条运营商线路在同一个地址上做路由优化,终端连一个地址就能自动选优;而简单多地址单线则是每个运营商一个地址,选路要靠终端自己尝试。前者对 RTC 这种长连接、怕抖动的业务明显更友好,因为连接建立后路由稳定,不会因为运营商出口波动而整条链路重连。华南、华东、华北三地的用户占比若较均衡,媒体服务器就不宜只押在单区域,否则偏远区域的用户那末端一跳仍要走很长的跨区路径。把服务器铺到用户聚集的几大区,再配合 BGP 选路,比在单地堆高带宽更治本。

服务端 CPU 与编码:转发开销到底花在哪

媒体服务器的 CPU 消耗,取决于它「动了」视频没有。纯转发型架构(SFU)原则上不解码视频,只是把收到的包按订阅关系复制、改写头部、转给对应的人,CPU 主要花在网络收发、包调度和加密解密上,开销随人数近似线性。而集中式混流架构(MCU)要把每路流解码、缩放、混音、再重新编码成一路,每一路都在烧 CPU,人数一多,编码核立刻成为瓶颈。

编码器的选择也直接影响服务端负担。VP8、H.264 这类成熟编码在兼容性上占优,绝大多数终端原生支持,服务端即使要做轻量转码也压力可控;VP9、AV1 压缩率更高、能省带宽,但编码复杂度明显上升,若在服务端做实时转码会吃掉大量 CPU。实际部署里常见的做法是:服务端尽量「只转发、不转码」,把编码决策交给终端按自身能力协商,服务端仅在必要时做 Simulcast(同一个人同时发多档码率)或 SVC(可分层编码)的选层转发,这样服务端 CPU 几乎不被编码绑架,把算力留给网络调度。对终端性能参差、编码支持不一的语聊房和在线课堂,这种「终端适配、服务端轻转」的思路更为稳妥。

Simulcast 与 SVC 虽然都为了自适应,机制却不同。Simulcast 是发送端同时推多路不同码率的独立流,服务端按每个接收端的网络状况挑一路转发,实现简单但多吃上行;SVC 是把一路流分成基础层与若干增强层,服务端只把接收端能承受的那几层转过去,带宽更省却要求编解码器支持分层结构,终端兼容性门槛更高。选哪种,取决于你的用户群手机与电脑的编码支持度,以及你愿意在服务端做多少选层逻辑。不论哪种,关键都在于服务端「只做选层、不做重编码」,这样才把 CPU 真正省下来。

架构类型 服务端 CPU 占用 带宽成本 端到端延迟 适用场景
SFU(选择性转发) 较低,主要花在包调度与加解密,不解码视频 随订阅数近似线性增长,下行总带宽 = 单路码率 × 订阅人数 较低,通常可控制在数百毫秒内 连麦课堂、视频会议、语聊房等对延迟敏感、需要多人互看的互动场景
MCU(集中式混流) 较高,每路都要解码、混音混画再编码,随人数快速上升 下行仅一份合成流,服务端出口带宽省,但编码算力成本高 较高,实时合成引入额外处理延迟 传统视频会议终端、需要统一向下兼容老旧设备的场景
Mesh(终端直连) 几乎不占服务端 CPU,压力全在终端 服务端无转发带宽,但每个终端上行要发给所有人,终端带宽消耗大 依赖终端间链路,弱网环境不稳定 人数很少(三五人)的点对点通话,不适合规模化互动

上表中的带宽与算力消耗,会随实例规格、码率档位、是否开启录制而明显变化;具体服务器与带宽费用以实时报价为准,落地规模建议向服务商按需询价。

网络:ICE / STUN / TURN 与带宽估算

两个终端要能直接通信,先得知道「对方的公网地址在哪」,这一步由 ICE(交互式连接建立)框架完成,STUN 服务器负责帮终端发现自己的公网映射地址。大多数家庭宽带、移动网络下的终端,靠 STUN 拿到地址后就能建立点对点通道,媒体流不必经过服务端转发,服务端只做信令。但现实里存在对称型 NAT、严格企业防火墙、部分运营商级 NAT,这类环境下两端根本无法直连,这时就必须让媒体流经 TURN 中继——TURN 是一台有明确公网地址的转发服务器,两端都把流发给它、由它转发。对做跨国业务、或用户大量处在公司内网和校园网的团队来说,TURN 不是「可选项」,而是连通率的兜底保障,缺了它,一批特定网络环境下的用户会直接连不上。

带宽怎么估算,是部署前务必先算清的一笔账。在 SFU 模型里,服务端下行总带宽约等于「单路上行码率 × 订阅该路的人数」。举例:一场百人课堂,老师推一路两兆比特每秒的视频,九十九个学生每人都要收到这路,仅老师的流服务端就要转出约一百九十八兆比特每秒;再叠加学生连麦上行的转发,总出口带宽迅速到吉比特级别。上行侧,服务端要收下所有参与者的流,总入带宽等于各路上行之和。做容量规划时,别只看「平均码率」,要按课堂峰值(多人同时连麦、同时切到大画面)来预留,并给 TURN 中继单独留出冗余,因为一旦直连失败,原本点对点的流量会全部压到中继上。开源的 coturn 项目是业界常用的 TURN 实现,部署时建议把它和 SFU 分开机器、分开公网 IP,避免中继流量把媒体转发的主机端口资源占满。

存储:落盘录制与实时转发是两回事

很多团队把「能直播」和「能存回放」当成同一件事,其实两者对存储 IO 的要求完全不同。实时转发是「来一路、转一路、立刻走」,数据在内存和网络栈里流动,几乎不落盘,对磁盘 IO 没要求;而课堂录制要把每一路音视频先写进磁盘,合成后再生成回放文件,这是持续、并发的写入负载,磁盘吞吐和顺序写性能直接决定录制是否掉帧、回放是否音画错位。

这里有个容易踩的坑:把媒体服务器和录制服务放在同一块普通系统盘上。转发服务突发占用内存和 CPU 时,录制进程的写盘会被挤压,轻则回放卡顿,重则录制文件损坏。稳妥的做法是让录制走独立的存储路径——本地用企业级固态盘做写入缓冲,再异步归档到对象存储或网络存储,避免录制 IO 反向拖慢实时转发。对需要长期保存合规课件的机构,回放文件的转码与封装也应放到离线任务里,不要和在线媒体服务抢同一台机器的资源。

弱网对抗:丢包、抖动与重传在哪一环处理

真实用户网络远非理想,丢包、抖动、乱序几乎是常态,RTC 的顺滑感来自一整套弱网对抗机制,而服务端在其中扮演的角色和许多人想的不一样。终端之间若走直连,丢包重传(NACK)由两端自行协商,服务端只管信令;一旦流量经过 TURN 中继,中继本身就要参与转发重传,所以中继的带宽冗余必须按「可能承载全部重传」来预留,而不是只算原始码率。SFU 转发侧一般不擅自重发媒体,但它会做关键帧请求的合并与限速——当多个订阅者同时索要关键帧,服务端只向发送端要一次,再把这一份分别转给所有人,避免关键帧风暴。

抖动缓冲(jitter buffer)则主要在接收端工作:它把乱序到达、间隔不稳的数据包先排进缓冲再按节奏播放,缓冲开得大能抗抖动但会拉长延迟,开得小延迟低却容易卡。服务端的职责是把转发抖动压到尽可能低,让终端可以用更小的缓冲。前向纠错(FEC)是另一味药,它额外发送冗余包,接收端在少量丢包时靠冗余恢复而不必等重传,代价是多吃带宽。互动课堂常采用「小缓冲加适量 FEC」的组合,对跨国弱网用户则更依赖 TURN 稳定链路而非单纯堆 FEC。这些手段的取舍,本质是带宽、延迟、抗丢包三者之间的权衡,没有哪一条放之四海皆准。

容量规划:一台媒体服务器到底能扛多少房间

容量规划不能拍脑袋,得回到两个硬约束:包转发能力和出入带宽。媒体服务器的 CPU 在纯转发模型里主要消耗在收发包的调度与加解密,单核算力能支撑的并发转发包数有上限,超过后队列就开始堆积,这正是前面那堂课卡顿的同一机理。业内常用的估算思路是:先按单房间峰值订阅关系算出「每秒需转发的包数」,再除以单机单核实测的包转发上限,得出所需核数;同时把下行总带宽(单路码率 × 订阅人数之和)与网卡实测吞吐对比,取核数与带宽两项的较大值作为扩容依据。

内存方面,每个房间、每条转发关系都要占一小块会话状态,万人同时在线的平台,会话表的大小会先于 CPU 成为瓶颈,因此大平台往往把房间打散到多台机器、用一致哈希做分片,单台只管一部分房间。网卡也要留意:千兆网卡在吉比特级下行面前会成为硬天花板,多队列网卡配合正确的中断绑定,才能把包转发摊到多核。监控上建议设三道阈值——转发队列长度、单核软中断占比、网卡入出带宽利用率,任一项持续过线就触发自动扩容或限制新连麦,把故障消灭在用户感知之前。

安全与合规边界:加密、鉴权与数据留存

实时音视频跑的是用户真实声音与画面,安全边界必须划清。传输层上,WebRTC 原生采用 DTLS 做密钥协商、SRTP 做媒体加密,媒体流在链路上是密文的,这是基础而非加分项;信令通道则应独立做鉴权,房间号、令牌、有效期都要由业务侧严格控制,避免陌生人凭房间号直接挤进课堂。服务端运维侧要守住的是「尽量收敛的暴露面」:媒体端口、TURN 端口只对必要协议开放,信令与媒体分离部署,减少单点被攻破的波及面。

合规上有两个常被忽视的边界。其一,录制产生的课件属于用户内容留存,涉及留存期限、访问权限与删除机制,应写入平台的隐私与数据政策,不能默认永久保存;其二,跨国业务的数据跨境流动要符合相关地区的规定,中国香港与海外服务器之间的媒体桥接,不能想当然地把境内用户数据无差别搬到境外。把媒体服务器托管在具备合规资质、能一体化交付机房与带宽的 IDC 服务商那里,往往能让上述手续更顺。具体合规要求随业务属地不同而有差异,落地前建议以当地公开监管文件为准、必要时咨询法务。

实施方案:从零搭一套 SFU 转发服务

先理清房间模型与容量目标。先确定单房间峰值人数、是否全员互看、是否有连麦与录制,据此推算服务端下行总带宽和所需转发核数。互动课堂一般按「单路码率 ×(人数减一)× 连麦比例」做峰值预留,再乘一点安全系数。

第二步,选架构与组件。以 SFU 为底座,信令服和媒体服分离部署;TURN 中继独立成集群,与媒体服不在同一主机。开源侧可参考主流 SFU 项目与 coturn 的组合,云侧则可评估主流云 RTC 产品的托管方案,把服务器就近、弹性扩容交给平台。

第三步,布点。按用户地理分布把媒体服务器放在对应区域的核心机房,国内为主就优先华南、华东、华北的服务器,跨国业务补上中国香港与海外服务器,区域间用中继桥接。底层网络尽量选 BGP 多线接入,减少跨运营商绕行。

第四步,编码与码率协商。终端按能力自适应,服务端只做选层转发,不轻易转码;对弱网用户走 TURN 兜底,并单独预留中继带宽。

第五步,录制与存储隔离。录制写独立磁盘或对象存储,离线转码,不挤占在线转发资源。

第六步,观测与限流。对转发队列长度、单房间带宽、关键帧请求频率做监控,队列持续堆积就触发自动扩容或限制连麦人数,别等用户大面积卡顿才处理。

常见问题

1. RTC 通话的端到端延迟一般是多少?
在架构合理、网络正常的前提下,互动音视频的端到端延迟通常落在两百到四百毫秒区间,这个量级下两人对话不会觉得明显错位。真正把延迟拉到一秒以上的,多半是服务端转发排队、跨网绕行或关键帧重传失控。所以延迟不是靠调一个参数降下来,而是架构选对加网络就近的结果。把 SFU 转发队列压住、让用户走 BGP 多线就近接入,比单纯换编码器更见效。

2. TURN 中继什么情况下必须用?
当两个终端无法建立直连时就必须走 TURN,典型场景是对称型 NAT、企业严格防火墙后的内网、部分运营商级 NAT,以及跨国链路两端地址互相不可达。这类用户占比可能不高,但一旦缺了 TURN,他们就完全连不上,连通率会从接近百分之百掉到有明显缺口。因此做跨国业务、或用户大量处在公司网和校园网的团队,TURN 是必备的兜底,而不是锦上添花的可选件。建议 TURN 与 SFU 分离部署,避免中继流量挤占转发资源。

3. SFU 的带宽到底怎么估算?
核心公式是:服务端下行总带宽 ≈ 单路上行码率 × 订阅该路的人数。百人课堂里老师一路两兆比特每秒的视频要发给九十九人,仅这一路下行就接近两百兆比特每秒,叠加学生连麦上行转发,总出口很快到吉比特级。规划时务必按峰值而非平均值预留,并且给 TURN 中继单独留冗余,因为直连一旦失败,原本点对点的流量会全部压到中继上。入带宽则等于所有参与者上行之和,同样要算峰值。

4. 并发上不去,应该先查哪里?
先看服务端转发队列长度和单核负载,这是高订阅数下优先触及瓶颈的点;再查上行带宽是否被打满,尤其是 TURN 中继是否被动承担了本不该由它扛的流量;接着看关键帧请求频率,若频繁风暴说明关键帧转发没做合并;其后才怀疑终端编码。多数「并发上不去」并非服务器数量不够,而是单房间订阅关系随人数平方增长,转发模型或带宽预留没跟上,盲目加机器收益有限。

5. 编码该选 VP8、H.264、VP9 还是 AV1?
兼容性上 H.264 与 VP8 相当稳,绝大多数终端原生支持,服务端即使轻量处理也压力小;VP9 与 AV1 压缩率更高、能省带宽,但编码复杂度明显上升,若在服务端实时转码会大量吃 CPU。务实做法是服务端尽量只转发不转码,编码协商交给终端按能力来,仅在必要时做 Simulcast 或 SVC 选层转发。对终端性能参差的课堂和语聊房,这样较不易在高并发时翻车。

6. 国内服务器部署要备案吗?
在中国大陆提供面向公众的服务,涉及境内服务器和域名的,通常要完成 ICP 备案等合规动作,服务器所在机房与接入线路也须符合相关管理规定。跨国业务若用了中国香港或海外服务器,则要分别看当地合规要求与数据跨境的边界。备案与合规是上线前的硬前提,不应等流量起来再补,建议部署前先和机房或云服务商确认所需手续,把合规动作排进排期。

7. 主机和服务器到底该怎么选?
先按用户分布定区域,国内为主就优先华南、华东、华北的服务器,跨国补中国香港与海外;再挑具备 BGP 多线接入的机房,减少跨运营商绕行;然后按峰值并发核算转发核数与上下行带宽,给 TURN 留独立冗余。把媒体服务器托管到网络底座更稳的机房,往往比单纯堆高配服务器更有意义,像 一万网络 这种同时提供服务器、机柜与带宽一体化交付的 IDC 服务商,在落地 RTC 转发服务器时可以减少跨运营商协调的麻烦。选机器时关注网络吞吐与包转发能力,而不是只看 CPU 核数。

8. RTC 服务的成本大头在哪?
成本主要落在三处:一是媒体服务器的上下行带宽,随订阅数线性放大,是持续的流量账单;二是 TURN 中继的带宽与独立主机,跨国或严苛网络环境下占比不低;三是若开启录制,存储与转码会产生额外开销。相较之下,信令服和资源开销较小。做预算时别只算服务器月租,要把峰值带宽和中继冗余一起摊进去。具体带宽与实例价格随规格和区域差异较大,建议以实时报价为准、按需向服务商询价,再反推单房间成本模型。

结论

互动音视频的稳定,从来不是靠一台高配服务器硬扛出来的,而是由「轻转发的 SFU 架构 + 就近且多线互通的服务器 + 独立冗余的 TURN 中继 + 与转发隔离的录制存储」这四条共同托住的。部署前先把房间模型、峰值带宽、订阅关系算清楚,把连通率兜底和合规备案排进排期,比上线后救火省心得多。当业务走到跨国或大规模连麦,底层网络的素质会逐渐变成决定性变量,这时候选一个网络底座扎实、能一体化交付服务器与带宽的机房伙伴,往往比反复调参更解决问题。

资料来源:WebRTC 官方文档(webrtc.org,实时通信架构与 ICE/STUN/TURN 流程说明,公开文档);coturn 项目(GitHub 开源 TURN 服务器实现,公开文档);主流云 RTC 产品公开技术文档(媒体转发、服务器就近与带宽规划说明,公开文档);行业惯例中 SFU 与 MCU 的架构对比与延迟特征总结(公开技术资料)。


上一篇:在越南同时做制造 IoT 和跨境电商,服务器放胡志明还是河内?

下一篇:多个 AI 模型怎么一起对外服务:推理路由、灰度发布与显存规划