大规模低延迟直播架构:解耦发布与观看,实现WebRTC水平扩展
1. 项目概述:在NAB 2026前夕,我们如何为大规模直播构建未来
又到了每年四月,拉斯维加斯再次成为全球音视频技术从业者的朝圣地。NAB Show 2026,这个行业的风向标,不仅是一场展会,更像是一次年度的“技术体检”,逼着我们去审视过去一年的工程实践,并思考未来两三年的技术路径。我们团队今年也会在那里,带着过去一年在真实客户场景和压力测试中积累的实战经验,与同行们交流。如果你正在处理任何与大规模直播、低延迟视频、IP摄像头基础设施或实时应用相关的挑战,欢迎来我们的展位聊聊,纯粹的技术交流,不掺杂任何销售话术。
但在见面之前,我想先分享一些我们最近在“后台”埋头苦干的东西——那些在技术白皮书里看不到,但在实际部署中却能决定项目成败的细节。我们讨论的核心,始终围绕着一个看似简单、却困扰行业多年的核心矛盾: 如何在保证超低延迟的同时,实现真正意义上的水平扩展? 这不仅仅是技术选型问题,更是架构哲学和工程实践的深度结合。无论是互动直播、实时竞猜、工业监控还是AI视频分析管道,这个矛盾都是横亘在理想与现实之间的鸿沟。接下来,我将拆解我们为跨越这道鸿沟所构建的架构模式、遇到的典型陷阱以及那些“事后看来显而易见”的最佳实践。
2. 核心架构拆解:解耦、分层与可预测的扩展性
2.1 延迟与规模的经典悖论:为什么传统方案总是“二选一”?
在深入我们的方案之前,必须先理解这个行业痛点。市面上大多数流媒体解决方案,本质上都在迫使你做一个痛苦的权衡。
- WebRTC路线 :它能提供亚秒级(通常低于500毫秒)的端到端延迟,体验近乎实时。这对于互动直播、在线拍卖、实时游戏解说等场景是刚需。然而,它的“阿喀琉斯之踵”在于扩展性。传统的WebRTC SFU(选择性转发单元)架构,在超过几百个并发观众时,服务器资源(尤其是CPU和网络I/O)的消耗会呈非线性增长,导致成本飙升且稳定性难以保障。
- HLS/DASH路线 :基于HTTP的渐进式下载或分片传输,其扩展性几乎可以借助成熟的CDN网络做到无限大,应对百万级并发是常态。但代价是高昂的延迟,通常介于8到30秒之间。这对于需要实时反馈的场景来说,是完全不可用的。
这个“二选一”的局面,根源在于将 流媒体的发布(Ingest) 和 分发(Delivery) 逻辑耦合在同一个服务进程中。当大量观众连接进来时,他们不仅消耗下行带宽,其信令交互、媒体流转发等操作也与发布者的上行流处理争夺同一份计算资源,导致系统整体性能过早达到瓶颈。
2.2 我们的架构模式:发布与观看的物理分离
我们采用的是一种基于职责分离的分布式架构模式,其核心思想是: 让专业的组件做专业的事,并通过共享状态实现协同 。这个模式在实践中被验证是有效的,其数据流如下图所示:
发布端 (OBS / 硬件编码器 / WebRTC)
↓
源站集群 (Origin Cluster:负责流摄入与元数据管理)
↓
边缘集群 (Edge Cluster:负责向观众进行WebRTC分发)
↓
观众端 (亚500毫秒延迟,数千并发)
2.2.1 源站集群:流的“入口”与“大脑” 源站节点的唯一职责是接收来自发布者(如OBS、硬件编码器或其他WebRTC客户端)的流。它负责完成流的初始解码、转码(如果需要)、录制,以及最关键的一步——将流的 元数据 (如Stream ID、编码参数、活跃状态)写入一个共享的、高可用的数据库(我们常用MongoDB分片集群)。源站本身不直接服务任何观众。这意味着,你可以根据并发发布者的数量来独立地扩展源站集群。如果有一场大型活动需要接入上百个机位,只需增加源站节点即可。
2.2.2 边缘集群:流的“出口”与“肌肉” 边缘节点是直接与观众WebRTC客户端对话的组件。当一个观众试图观看某个流时,边缘节点会去共享数据库中查询该流的元数据,并根据负载均衡策略,从某个源站节点“拉取”媒体流,然后以WebRTC协议分发给观众。所有与观众相关的信令处理、SRTP加解密、拥塞控制等重计算量工作,都由边缘节点承担。它的扩展逻辑非常清晰:观众多了,就加边缘节点。
2.2.3 共享状态层:系统的“神经系统” MongoDB集群在这里扮演了至关重要的角色。它存储了全局的流路由表。这种设计带来了几个关键优势:
- 无状态边缘 :边缘节点本身几乎是无状态的(除了一些本地缓存),任何一个边缘节点都能服务任何观众观看任何流。这为Kubernetes等云原生环境下的弹性伸缩和故障恢复提供了极大便利。
- 故障隔离 :一个源站节点故障,只影响其负责的发布流,边缘节点可以自动尝试从备用源拉流或通知观众流已结束。一个边缘节点故障,负载均衡器会将新观众导向其他健康边缘。
- 资源不竞争 :源站节点(处理上行编码流)和边缘节点(处理下行分发和WebRTC)的资源消耗模式不同,分离后可以分别针对性地优化硬件选型(例如,源站更偏重编码性能,边缘更偏重网络吞吐和多路复用)。
2.3 可预测的性能与成本模型
架构清晰带来的最大好处之一是性能的可预测性。例如,在一个AWS
c5.9xlarge
实例(36 vCPU)上部署一个边缘节点,经过我们的内部压测和客户生产环境验证,它大约可以稳定承载
800到830个
并发WebRTC观众(视频编码为720p,30fps,码率约1.2Mbps)。当CPU使用率持续超过80%或网络吞吐接近瓶颈时,就可以触发自动扩容策略,增加一个新的边缘节点。
这种可预测性使得容量规划从“艺术”变成了“科学”。你可以根据预期的峰值观众数,轻松计算出需要多少边缘节点实例,进而精确预估云资源成本。同样,根据并发主播数规划源站集群规模。这种解耦让“按需扩展”真正落地。
实操心得 :在性能测试时,不要只关注CPU和内存。对于边缘节点, 网络带宽和PPS(每秒数据包数) 是更关键的瓶颈指标。WebRTC会产生大量的小数据包(UDP),对网络I/O和虚拟机的网络后端驱动性能是巨大考验。在选择云服务器实例时,务必关注其网络性能基准(如带宽上限、PPS支持能力),而不仅仅是vCPU数量。
3. 被低估的基石:RTSP摄取与企业级视频管道
3.1 RTSP:沉默的行业骨干
当大家的目光都被WebRTC的“低延迟”光环吸引时,一个更庞大、更基础的世界在默默运行——那就是基于 RTSP 的企业视频基础设施。几乎每一个你见过的IP摄像头、每一套视频管理系统、每一个安防监控中心、工厂里的视觉检测工位、医院的手术示教系统,其底层视频流传输的默认协议,十有八九是RTSP。
与用于“发布-观看”的WebRTC不同,RTSP更多扮演着“设备到服务器”的 摄取 角色。它的协议设计古老而稳定,被几乎所有硬件厂商支持。因此,构建一个健壮、高效的RTSP摄取管道,是解锁海量企业视频数据的第一步,也是将传统安防、工业视觉与现代化流媒体、AI分析平台连接起来的关键桥梁。
3.2 高并发RTSP摄取与智能分发模式
我们处理的一个典型场景是:一个大型物流园区部署了200个4K H.264的IP摄像头。客户的需求不仅仅是“看得见”,而是要将这些视频流实时分发给多个不同的下游系统进行处理。
200 x IP摄像头 (RTSP, 4K, H.264)
↓
Ant Media Server (集群) (负责统一摄取、协议转换、流转码与路由)
↓
├──> AI分析集群1 (输入:4K @ 15fps,用于高精度物体识别)
├──> AI分析集群2 (输入:1080p @ 15fps,用于行为分析)
└──> AI分析集群3 (输入:4K @ 1fps,用于周期性画面抓拍与存档)
在这个架构中,流媒体服务器扮演了“智能路由器”和“计算卸载器”的角色:
- 统一接入与协议转换 :所有摄像头以RTSP协议接入,服务器提供统一的接入点和认证管理,避免了每个AI系统都需要直接与摄像头对接的复杂性。
- 按需转码与降帧 :这是节省成本的核心。AI集群1需要4K分辨率以保证识别精度,但15fps已足够;AI集群2对分辨率要求稍低,可降为1080p;而AI集群3可能只需要每秒一帧的画面用于生成时间戳快照或低频率的异常检测。
- “1fps策略”的巨大价值 :这一点极易被低估。对于许多计算机视觉任务,如周期性巡检、滞留物检测或单纯的画面存档,并不需要完整的视频流。将输出帧率降至1fps,意味着下游GPU需要处理的图像数据量减少了 90%以上 (相对于30fps)。这直接转化为所需的GPU服务器数量大幅减少,可能从十台集群缩减到两三台,对硬件采购和电费成本的影响是颠覆性的。
注意事项 :处理高并发RTSP流时,最大的挑战不是带宽,而是 TCP连接和会话管理 。每个RTSP连接都包含TCP控制连接和可选的RTP over TCP数据通道。大量并发连接会导致服务器文件描述符耗尽、TCP端口占用等问题。务必调整Linux内核参数,如
net.core.somaxconn,net.ipv4.tcp_max_syn_backlog,并确保流媒体服务软件本身有良好的连接池和超时管理机制。此外,许多摄像头的RTSP实现并不标准,需要服务器端有足够的兼容性处理(如对特定SDP格式的适配)。
4. 生产环境部署的“魔鬼细节”
4.1 SRT协议:广播级贡献链路的新标准与K8s部署陷阱
在专业广播和现场制作领域,将现场信号可靠地回传到制作中心(即“贡献链路”)是生命线。近年来, SRT 因其在不可靠公网上提供安全、可靠、低延迟传输的能力,已成为该领域的事实标准。它通过前向纠错和丢包重传机制,完美对抗了互联网的抖动和丢包。
我们原生支持SRT摄取,但在一次Kubernetes生产部署中,我们被一个“简单”的问题卡住了几个小时。客户在Azure AKS上部署了我们的服务,RTMP流一切正常,但SRT流怎么也推不进来。
问题根源 :我们提供的标准Helm chart,默认只通过LoadBalancer Service暴露了RTMP的TCP 1935端口。而SRT协议默认使用 UDP 4200 端口。在Kubernetes的Service配置中,TCP和UDP端口需要显式声明。如果Load Balancer(无论是云服务商提供的还是MetalLB等)没有配置监听UDP 4200,那么来自外部的SRT数据包根本无法到达Pod。
解决方案 :检查并修改你的Service YAML配置,确保同时暴露了UDP 4200端口。
apiVersion: v1
kind: Service
metadata:
name: ant-media-server-lb
spec:
type: LoadBalancer
ports:
- port: 1935
targetPort: 1935
protocol: TCP
name: rtmp
- port: 4200 # 确保这一行存在
targetPort: 4200
protocol: UDP # 协议必须是UDP
name: srt
selector:
app: ant-media-server
这个“小疏忽”曾让好几个团队踩坑。在云上部署时,还需注意云负载均衡器本身对UDP协议的支持情况和配置方式(例如,在AWS NLB或Azure Load Balancer上启用UDP转发)。
4.2 Kubernetes网络模型:VNet IP与Overlay IP的分配逻辑
在私有企业网络(尤其是Azure AKS结合Azure CNI的场景)中部署时,一个高频问题是:“我的Pod和Service会消耗多少宝贵的VNet子网IP地址?” 这关系到企业网络的地址规划和安全策略。
以Azure CNI Overlay网络插件为例,其IP分配逻辑如下:
| 组件 | IP 类型 | 说明 |
|---|---|---|
| Origin/Edge Pods | CNI Overlay IP | 应用Pod使用Overlay网络内部的IP,不占用VNet地址空间。 |
| MongoDB Pod | CNI Overlay IP | 同应用Pod,使用Overlay IP。 |
| Ingress Controller Pod | VNet IP | 需要对外暴露HTTP/HTTPS服务,通常以LoadBalancer或HostNetwork模式运行,消耗VNet IP。 |
| Azure Load Balancer | VNet IP | 为Service类型为LoadBalancer的规则提供公网或内网IP,消耗VNet IP。 |
| AKS节点(虚拟机) | VNet IP | 每个Kubernetes节点虚拟机本身需要一个VNet IP。 |
关键结论
:只要你的流媒体应用Pod配置中
hostNetwork: false
(默认如此),它们就不会消耗宝贵的VNet IP。只有那些需要直接从集群外部访问的入口点(如Load Balancer、Ingress Controller)才会占用子网地址。这为企业管理有限的IP资源提供了清晰的规划依据。
另一个重要优化点 :如果你的应用场景 完全不使用WebRTC (例如,仅使用RTMP/SRT发布,HLS播放),那么请务必在部署时 完全禁用Coturn服务 。Coturn是用于WebRTC的NAT穿透的STUN/TURN服务器。在非WebRTC场景下,它不仅毫无用处,还会增加部署的复杂性(需要额外配置和维护),并可能因为其UDP端口开放而引入不必要的安全考量。在Helm values文件或部署配置中将其设置为禁用,可以让你的架构更简洁、更安全。
5. 面向未来的思考:与AI视频分析管道的深度集成
流媒体服务器正在从一个单纯的“视频传输管道”演变为“智能视频数据总线”。除了前述的为不同AI分析集群提供转码和降帧后的视频流外,更深度的集成正在发生。
元数据注入与同步 :流媒体服务器可以在转码或分发过程中,将时间戳、地理位置、摄像头ID、甚至初步的边缘分析结果(如通过轻量级模型检测到的移动区域)作为元数据,插入到视频流中(例如,通过SEI帧内信息或伴随的WebSocket通道)。这样,下游的AI服务器接收到的不仅是纯净的视频帧,还有丰富的上下文信息,能显著提升分析准确性和效率。
动态码率与AI反馈闭环 :更前瞻的模式是形成闭环。AI分析集群识别到当前画面为静态场景(如仓库过道无人时),可以反馈指令给流媒体服务器,临时降低对应视频流的码率或帧率。当检测到关键活动时,再立即通知服务器恢复高码流。这种动态自适应能节省大量存储和带宽成本。
边缘协同计算 :对于超低延迟的AI响应需求(如工业质检的实时拦截),完整的“摄像头->流媒体服务器->云端AI->返回结果”链路可能太长。未来的架构可能会在流媒体边缘节点上部署轻量级AI推理引擎(如使用TensorFlow Lite或ONNX Runtime),处理最紧急的检测任务,同时将高精度分析或长期归档任务仍交给云端AI集群。流媒体服务器需要管理这种边缘-云协同的推理任务分发和结果汇总。
这些探索都指向同一个方向:流媒体基础设施将成为实时视觉数据洪流的“中枢神经系统”,不仅要负责传输,更要负责调度、预处理和赋能。这要求我们在设计架构时,必须预留出足够的扩展点和灵活的插件机制。
6. 总结与行动指南
回顾我们为大规模、低延迟直播所构建的这套体系,其成功并非依赖于某个“银弹”技术,而是源于一系列务实的架构决策和对生产环境细节的深刻理解。
首先,坚持关注核心矛盾 。始终问自己:你的场景最不能妥协的是什么?是延迟,是规模,是成本,还是兼容性?我们的架构通过解耦发布与观看,首先解决了“低延迟”与“大规模”的二元对立,为各种场景提供了统一的基础。
其次,拥抱协议多样性,但保持架构统一 。WebRTC、RTMP、SRT、RTSP、HLS……每种协议都有其最适合的战场。一个健壮的流媒体平台应该能无缝接入和转换这些协议,但后端的分发和扩展架构应该是统一和抽象的。不要让前端的协议差异影响到后端集群的扩展逻辑。
再次,云原生部署不是简单的“扔进K8s” 。你需要仔细考虑网络模型(IP分配、负载均衡器类型)、存储卷的持久化策略、配置管理,以及如何将应用的无状态部分与有状态部分(如数据库)正确分离。SRT的UDP端口暴露问题,就是一个典型的“云原生细节”陷阱。
最后,永远为“可观测性”和“可预测性”而设计 。在架构设计阶段,就埋入足够的监控指标(如每个边缘节点的并发数、CPU/网络负载、流健康状态)。通过压测建立像“c5.9xlarge支撑800个720p WebRTC观众”这样的性能基线,让扩容从一种应激反应变为一种基于数据的自动化决策。
流媒体工程的魅力,就在于它永远在平衡艺术与科学、理想与现实。没有一种架构能适应所有场景,但通过理解这些底层原则和常见陷阱,你可以构建出更稳健、更高效、更能适应未来挑战的系统。我们期待在NAB 2026与更多同行面对面,分享这些在实战中获得的、带着“火药味”的经验,共同推动实时交互体验的边界。
火山引擎视频云技术社区,是面向 AI 音视频开发者的技术交流平台。这里汇聚源自抖音、豆包等亿级 DAU 产品的 RTC、直播、点播、AI 媒体处理、音视频互动技术,提供接入指南、最佳实践、性能调优、场景案例、Demo 代码、开源项目、白皮书和 API 文档。社区汇聚官方工程师与一线开发者,为 AI 视频通话、数字人、AI 视频处理等应用的开发与落地提供技术支持。
更多推荐
所有评论(0)