Skip to content

一条直播流从摄像头到千万观众的完整链路

更新: 5/30/2026 字数: 0 字 时长: 0 分钟

适合读者:前端想补全链路认知、后端想了解直播全貌、新人入门。一条直播流从采集摄像头到千万观众的完整链路。

直播流链路

如果是 WebRTC 全链路低延迟方案,总延迟可以压到 800ms–1.5s,代价是 CDN 成本模型完全换一套(见第七节)。

一、采集:数据从哪里来

采集是把光信号和声信号变成数字流的过程。主要有三种路径:

1.1 PC 端:OBS 系

  • 典型工具:OBS Studio、vMix、XSplit。
  • 核心能力:多路输入合成(摄像头 + 屏幕 + 游戏窗口 + 图片/视频素材)、场景切换、音频混音。
  • 输出形式:直接编码后推流(RTMP/SRT/WHIP),或输出 NDI/虚拟摄像头给其它软件。
  • 工程关注点:GPU 占用(NVENC/AMF/QSV 硬编)、音画同步、帧率锁定。

1.2 手机端:SDK 集成

  • 主流 SDK:字节 VELive、声网、腾讯云 TRTC、即构 ZEGO 等。
  • 采集链路:Camera API(Android Camera2 / iOS AVCaptureSession)+ AudioUnit → 美颜滤镜 → 编码器。
  • 关键差异:手机 SDK 一般把采集/美颜/编码/推流打包成一个闭环,开发者只接业务 API。
  • 踩坑点:各厂商摄像头硬件差异大,HDR/超广角/变焦的适配工作量大。

1.3 Web 端:getUserMedia / getDisplayMedia

  • 能力边界:浏览器只能拿到原始 MediaStream,编码与推流要自己接 WebRTC。
  • 典型场景:轻量主播、云导播、远程连麦,不追求极致画质
  • 限制:无法直接输出 RTMP(浏览器不支持 TCP 原始流),必须走 WebRTC → 服务端转 RTMP。

量化参考:1080p30 采集的原始 YUV420 数据率约 744 Mbps(1920×1080×1.5 字节×30 帧×8 bit)。不编码根本没法传,这就引出了下一环。

二、编码:压缩率的艺术

编码器的任务:把 744 Mbps 的原始流压到几 Mbps,同时让人眼看起来尽量没差别

2.1 三大主流编码对比

编码1080p30 典型码率压缩比硬件支持专利/授权
H.264 / AVC3–5 Mbps基准全平台全硬解成熟但有专利池(MPEG-LA)
H.265 / HEVC1.5–3 Mbps比 H.264 省 40–50%移动端普及、浏览器逐步跟上专利复杂、Web 端采用慢
AV11–2 Mbps比 H.265 再省 20–30%新机型硬解、编码器仍慢免版税,开放联盟主推
VP91.5–3 Mbps≈ H.265浏览器生态好、移动端弱免版税,YouTube 主用

2.2 几个关键参数

  • GOP(Group of Pictures):两个 I 帧的间隔。直播推荐 1–2 秒,太长首屏慢、断流恢复慢;太短压缩效率低。
  • B 帧:双向预测帧,压缩率高但增加延迟(编码器要等后续帧)。低延迟直播一般关 B 帧
  • CBR vs VBR:CBR 恒定码率,CDN 友好;VBR 质量稳定但带宽抖动。直播主用 CBR
  • Profile / Level:H.264 的 baseline/main/high,越高压缩率越好但老设备可能不解。移动端兼容首选 high profile level 4.0

2.3 硬编 vs 软编

软编(x264/x265/SVT-AV1)硬编(NVENC/QSV/Android MediaCodec)
画质同码率画质更好略差(尤其是老一代硬编器)
CPU/GPU 占用CPU 高几乎不占 CPU
灵活性参数多、可精调固定档位
场景服务端转码、OBS 高画质手机/摄像头/低功耗

工程共识采集端硬编(省电)+ 服务端转码软编(保质) 是大多数直播公司的配置。

2.4 延迟账单

  • 采集 buffer:1–2 帧(≈ 33–66ms);
  • 编码 pipeline:2–5 帧(66–166ms,关 B 帧能降到 1 帧);
  • GOP 对齐(等下一个关键帧能被推出):0–1s

编码这一段典型 50–200ms

三、推流:从主播到第一跳

编码器吐出 H.264/H.265/AV1 字节流,要通过推流协议把它打到机房。

3.1 四大推流协议对比

协议传输层延迟抗弱网成熟度未来
RTMPTCP1–3s差(TCP 重传拖累)最成熟,Adobe 遗产在被替代
SRTUDP + ARQ0.5–2s强(FEC + 自适应)广电/赛事主流稳定增长
RTP / WebRTCUDP + SRTP200–800ms最强互动场景主流标准化中
WHIPHTTP + WebRTC200–800ms2022+ 落地RTMP 的接班人

3.2 为什么 RTMP 撑了这么多年

  • 生态无敌:OBS、FFmpeg、FMS/Wowza/SRS/nginx-rtmp 全支持,几乎所有 CDN 都原生接 RTMP 推流;
  • 简单可调:基于 TCP,NAT 友好,防火墙穿透成本低;
  • 代价:TCP 在丢包场景退化严重,弱网下码率全靠推流端主动降。

3.3 SRT:赛事级替代

  • 由 Haivision 开源,IETF 在标准化;
  • 自带加密(AES)、ARQ(智能重传)、带宽估计
  • 广电/体育赛事远程制作(REMI)已经大面积切 SRT;
  • OBS 原生支持,FFmpeg 也支持,生态在补齐。

3.4 WHIP:RTMP 的真正继任者

  • 前文介绍过(见 WebRTC 文档第五节):一次 HTTP POST 交换 SDP,之后走 WebRTC;
  • 优势:延迟 1s 以内、UDP 原生、自带拥塞控制、复用 WebRTC 全套生态;
  • 进度:OBS 30+、FFmpeg 7+、xgplayer、主流 CDN 都已支持或在支持路上;
  • 预测:未来 3–5 年新建直播系统基本不会再选 RTMP。

3.5 延迟账单

  • 三次握手 + TCP 慢启动(仅 RTMP):100–500ms
  • 推流端 buffer(应对网络抖动):500ms–2s
  • 传输到边缘机房:10–50ms(国内同区域)。

推流段典型 1–3s,SRT/WHIP 可压到 300ms 以内

四、边缘接入:流的第一个港口

推流包到达云厂商/自建机房后,第一个处理节点叫 源站(Origin)边缘接入节点(Edge Ingest)。这一层要做的事:

  • 协议解析:识别 RTMP/SRT/WHIP,提取音视频 ES;
  • 鉴权:检查推流 key、防盗链、黑名单;
  • 录制 DVR:写一份到对象存储,供回看和合规审计;
  • 审核:音视频抽帧送 AI 审核模型(涉黄涉暴涉政);
  • 分发触发:通知转码集群和 CDN 回源。

4.1 主流开源组件

组件定位擅长语言
SRS(Simple Realtime Server)全能直播服务器RTMP/HLS/WebRTC/SRT 全协议,国内主流自建方案C++
ZLMediaKit低延迟流媒体服务器轻量、多协议、嵌入式友好C++
nginx-rtmp-modulenginx 扩展经典老将,维护较少C
MediaMTX(原 rtsp-simple-server)多协议网关RTSP/RTMP/HLS/WebRTC/SRT/WHIP 全通吃Go
LiveKitWebRTC SFU 平台WebRTC-first、K8s 原生、WHIP/WHEP 内置Go
Janus / mediasoupWebRTC SFU会议/连麦场景,灵活性高C / Node.js

选型心法

  • 传统直播(秀场/电商/游戏)→ SRS 或 ZLMediaKit:RTMP 接入 + HLS/FLV 分发,生态最全;
  • 互动直播 / 会议 → LiveKit / mediasoup:WebRTC 原生;
  • 多协议网关 / 小团队 → MediaMTX:Go 单二进制,部署极简;
  • 云厂商托管 → 阿里云 VEStream、腾讯云 LVB、AWS IVS、火山引擎视频直播:省运维但贵。

4.2 成本量化

自建 SRS 集群(单机 16 核 32G,100Gbps 上行网卡):

  • 接入能力:单机 ~1000 路 1080p 推流;
  • 成本:机器 ~2 万元/月,上行带宽成本另算(国内约 0.3–1 元/Mbps/月,按 95 计费)。

五、转码集群:一源多出

一路 1080p 原始推流,往往要转出多个版本:

                     1080p / 5Mbps   ──► 高清画质
原始推流 (1080p) ──►  720p  / 2.5Mbps ──► 标清(主力码率)
                     480p  / 1Mbps   ──► 流畅
                     360p  / 500Kbps ──► 弱网兜底
                     音频单独抽一路   ──► 纯音频/省流

5.1 转码要做什么

  • 分辨率/码率阶梯(ABR 自适应码率源素材);
  • 封装转换:RTMP/FLV → HLS(TS/fMP4)→ DASH → LL-HLS 等;
  • 编码转换:H.264 → H.265/AV1(按需);
  • 水印/贴图/字幕叠加
  • DRM 加密(版权内容)。

5.2 成本是大头

转码是整个链路里最烧 CPU/GPU 的环节

  • 软编 1080p 实时 H.264:单核 x86 吃满约 1 路;一台 32 核机器最多跑 20-30 路(留点冗余);
  • GPU 转码(NVIDIA T4/A10):单卡能跑 20–40 路 1080p H.264;
  • H.265 / AV1 编码成本分别是 H.264 的 2–5 倍5–20 倍

成本拍脑袋算账(自建):

  • 1 路 1080p + 3 档转码(720/480/360):约需 4 路软编 = 0.2 核·小时
  • 100 万路并发直播:20 万核 转码算力 → 一个大机房;
  • 云厂商转码一般 0.02–0.05 元/分钟/档,百万路级别一个月能花掉千万级。

优化方向

  • 按需转码:没人看的档位不转;
  • 同源复用:同一条流被多个观众请求时只转一次;
  • 智能 ABR:根据观看设备分布决定转哪些档位;
  • 硬件加速:GPU / 专用编码卡(如 NETINT Quadra)。

5.3 延迟账单

转码器本身延迟 200ms–1s,主要看 GOP 对齐和 pipeline 深度。切片封装额外增加 1 个切片时长(标准 HLS 6s、LL-HLS 200ms)。

六、CDN 分发:规模化的根本

1 个源站对不了 100 万观众。CDN 的本质:把流缓存到离用户最近的节点

6.1 CDN 的层级

源站(1 份) 


父层节点(几十个,回源源站)


边缘节点(几千个,离用户最近)


用户
  • 边缘节点命中:90% 以上请求,延迟 10–50ms;
  • 回父层:几 %,延迟 50–200ms;
  • 回源站:千分之几,延迟 100ms–1s。

6.2 HLS / FLV 分发

  • HLS 对 CDN 最友好:m3u8 + ts/fmp4 本质就是 HTTP 静态文件,缓存命中率极高;
  • FLV 是长连接:不能像 HLS 那样直接缓存,但 SRS 等可以用 GOP 缓存(缓存最近一个 GOP 用于新接入用户秒开);
  • LL-HLS:切片小(200ms),回源频次高,CDN 必须支持 HTTP/2 Push + Blocking Playlist Reload,老 CDN 跑不动。

6.3 WebRTC 的 "CDN"

WebRTC 没有传统 CDN,只能用 SFU 级联

主播 ──► SFU-A(源)

   ┌────────┼────────┐
   ▼        ▼        ▼
 SFU-B    SFU-C    SFU-D   (边缘 SFU)
   │        │        │
 观众      观众      观众

每个 SFU 都要解密 → 决策转发 → 再加密,单机成本远高于 HTTP CDN,因此 WebRTC 百万级直播价格是 HLS 的 5–10 倍。这是"低延迟 vs 成本"的终极权衡。

6.4 带宽成本量化

  • 1 路 1080p HLS 观众:约 3 Mbps 下行
  • 100 万并发观众:3 Tbps
  • 国内 CDN 约 0.15–0.3 元/GB20–50 元/Mbps/月(95 计费);
  • 100 万人看 1 小时:100 万 × 3 Mbps × 3600s / 8 = 1350 TB ≈ 20–40 万元

这就是为什么直播公司的财报里"带宽成本"永远是前三大支出之一。

6.5 延迟账单

  • CDN 缓存逻辑:HLS 一个切片时长(标准 6s,LL-HLS 1s 内);
  • 网络传输到用户:20–100ms
  • 客户端 Jitter Buffer:500ms–2s
  • 整个下行段 2–6s(HLS),< 1s(WebRTC)。

七、用户端:最后一公里

观众拉流的形态取决于终端:

终端主流协议播放器
WebHLS / LL-HLS / FLV / WebRTCxgplayer、hls.js、flv.js、自研
iOSHLS 原生、WebRTCAVPlayer、IJKPlayer、自研 SDK
AndroidFLV / HLS / WebRTCExoPlayer、IJKPlayer、自研 SDK
智能电视 / 机顶盒HLS / DASH原生、ExoPlayer
OTT / 海外DASH + HLS(DRM)Shaka、ExoPlayer

7.1 客户端做了什么

  • 拉流:HTTP/UDP 请求;
  • Demux:FLV/TS/fMP4 解封装;
  • Decode:调用硬解或软解;
  • AV Sync:音画同步,以音频时钟为基准;
  • 渲染:视频上 GPU,音频交声卡;
  • ABR:根据网络切换码率档位;
  • QoS 上报:首屏耗时、卡顿率、码率切换事件。

7.2 体验关键指标

  • 首屏耗时:<1s 顶级,1–2s 良好,>3s 差;
  • 卡顿率:<0.5% 优秀,>2% 差;
  • 百秒卡顿次数延迟分辨率切换频率

八、端到端延迟账单(一张表)

环节标准 HLS 直播HTTP-FLV 直播LL-HLS 直播WebRTC 直播
采集 + 编码100ms100ms100ms100ms
推流(RTMP/SRT/WHIP)1–2s1–2s1–2s300ms
边缘接入50ms50ms50ms50ms
转码 + 切片2–6s(6s 切片)500ms(不切片)500ms(CMAF)无切片
CDN 分发50ms50ms50ms
客户端 buffer2–4s1–2s1–2s100–300ms
端到端总延迟10–30s2–5s2–4s< 1s

九、成本量化(以 100 万并发、1080p、1 小时直播为例)

成本项HLS 方案FLV+HLS 方案WebRTC 方案
源站/SFU 机器~1 万元~1.5 万元~10–20 万元(SFU 集群)
转码~2 万元~2 万元~2 万元
CDN 带宽20–40 万元25–45 万元(FLV 长连接命中率略低)150–300 万元(SFU 级联)
存储(录制 DVR)~1 万元~1 万元~1 万元
合计约 25–45 万元约 30–50 万元约 160–320 万元

结论

  • 延迟每降 1 个数量级,成本上升 5–10 倍
  • 真实业务都是混合架构:连麦互动走 WebRTC(少量人),观众走 HLS/FLV(海量人),综合成本最优。

十、关键组件一览

10.1 开源服务端

  • SRS:国产全能王,RTMP/HLS/WebRTC/SRT 通吃,文档中文友好,适合从零自建;
  • ZLMediaKit:低延迟、低资源占用,适合嵌入式和 CDN 边缘;
  • MediaMTX:Go 单二进制,多协议网关,小团队救星;
  • LiveKit:WebRTC SFU,K8s 原生,WHIP/WHEP 标准化;
  • mediasoup:Node.js 驱动的 SFU 库,非整机方案,灵活集成;
  • nginx-rtmp:老牌,维护一般,不建议新项目用;
  • Janus:老牌 WebRTC 网关,C 实现,插件化。

10.2 客户端播放器

  • Web:xgplayer(字节)、hls.js、flv.js、mpegts.js、shaka-player;
  • Android/iOS:ExoPlayer、AVPlayer、ijkplayer(B 站开源,已停维护)、各云厂商 SDK;
  • 跨端:VLC、mpv(偏桌面)。

10.3 云厂商托管

  • 字节:视频直播、VELive、实时音视频 RTC;
  • 阿里云:视频直播 Live、实时音视频 ARTC;
  • 腾讯云:云直播 CSS、实时音视频 TRTC;
  • AWS:IVS(Interactive Video Service)、Kinesis Video Streams;
  • Cloudflare:Stream Live(WHIP/WHEP 原生)。

选型建议

  • 从 0 到 1 → 云厂商托管,最快;
  • 规模起来了(月带宽成本 > 100 万)→ 自建 + 多云 CDN 混跑;
  • 对延迟极端敏感(< 500ms)→ 必自建 WebRTC SFU 或深度合作。

十一、一条流的完整旅程(复盘)

时间 t=0s          主播摄像头采到一帧画面
时间 t=0.05s       编码器把它压成 H.264 NALU
时间 t=0.1s        RTMP 包抵达字节机房边缘节点
时间 t=0.15s       鉴权通过,流入转码集群
时间 t=1s          转码出 720p/480p/360p 多档
时间 t=1.5s        切出第一个 LL-HLS 片段(200ms),推入 CDN
时间 t=2s          深圳边缘节点缓存命中
时间 t=2.1s        观众手机收到 http 响应,开始 demux
时间 t=2.5s        第一帧渲染到屏幕
                  ——总计端到端延迟 ~2.5s(LL-HLS)

同一时刻:
  杭州观众走 HLS 标准切片,看到的是 t=0s 的画面,延迟 ~10s
  东南亚观众跨境 CDN,延迟 ~15s
  坐在主播对面的连麦嘉宾走 WebRTC,延迟 200ms

同一条直播流,不同观众看到的"现在"完全不同——这就是直播链路的残酷真实。

十二、给新人的 5 条经验

  1. 端到端思考:只懂前端或只懂后端都会被卡住,踩坑位置经常跨 3 个环节。
  2. 延迟是设计出来的,不是优化出来的:选错协议再怎么调参也压不下去。
  3. 成本是业务决策,不是技术问题:延迟从 10s 到 1s 成本翻 5 倍,老板要的到底是什么?
  4. 监控比优化重要:首屏、卡顿、RTT、丢包、码率切换,没数据就是黑盒。
  5. 拥抱标准:WHIP/WHEP、CMAF、LL-HLS 都在统一分裂的生态,早布局早受益。

结语

一条直播流从摄像头到千万观众,要跨越 7 个系统、5 个协议、3 层网络、2 种编码。每一环都有独立的优化空间,也有互相牵制的权衡。

把这张大图印在脑子里,下次遇到"直播卡了""延迟高了""成本超了"这类问题时,你能立刻知道:应该去哪一环打开抓包、看哪个组件的监控、找谁协作

这就是全链路认知的价值——不一定让你成为某一环的专家,但能让你在复杂系统里不迷路。