RTMP
约 1408 字大约 5 分钟
2026-03-29
RTMP 是直播体系里绕不开的协议。它很特殊的一点在于:浏览器侧已经不再直接依赖它播放,但推流侧至今仍然大量使用它。
所以理解 RTMP,关键不是把它当成“面向观众端的最终协议”,而是把它放回现代直播链路里看它的真实位置。
RTMP 是什么
RTMP 全称是 Real-Time Messaging Protocol,最早由 Adobe 在 Flash 时代推动。它主要承担的是:
把主播端采集到的音视频数据稳定地推到媒体服务器。
也就是说,它最擅长的是:
- 推流端 -> 服务端
而不是:
- 服务端 -> 现代浏览器观众端
RTMP 的基本特点
- 基于 TCP,传输可靠
- 延迟相对较低,通常能做到 1 到 3 秒级
- 协议成熟,生态非常广
- 历史上和 Flash 强绑定
在早期直播页面里,观众端经常是通过 Flash 播放器直接拉 RTMP 流观看。
Flash 退出历史舞台以后发生了什么
RTMP 曾经之所以风光,很大程度上是因为:
- 推流用它
- 播放也用它
- 观众端依赖 Flash
但后来 Flash 被逐步淘汰,浏览器也不再支持基于 Flash 的播放模型。于是就出现了一个很关键的变化:
RTMP 逐渐退出了浏览器播放端,但没有退出推流端。
这也是为什么今天你会看到一种看似矛盾的现象:
- 浏览器里很少直接谈“播放 RTMP”
- 但 OBS、FFmpeg、硬件编码器、云厂商接入层仍然广泛使用 RTMP 推流
为什么现在还在用 RTMP 推流
历史生态太成熟
直播行业爆发的那几年,RTMP 已经是最成熟的推流方案。大量云厂商、CDN、媒体服务器、推流工具都围绕它构建完成了整套能力。
推流端兼容性极好
OBS、FFmpeg、硬件编码器、手机 SDK 等工具链,对 RTMP 的支持都非常成熟。对于主播端来说,它是一个“稳定、大家都支持”的统一入口。
作为第一公里协议非常合适
现代直播架构里,RTMP 最常见的角色其实是:
主播把流先推给接入层,后面的播放协议由服务端再按终端做适配。
也就是说,它更像“第一公里采集协议”。
现代直播里 RTMP 的位置
可以把它理解成下面这条链路:
推流端(OBS / 手机 / FFmpeg)
-> RTMP 接入层
-> 转码 / 转协议
-> CDN / 分发层
-> 观众端(HLS / HTTP-FLV / WebRTC)这里面:
- 推流端常用 RTMP
- 观众端往往不是 RTMP,而是别的更适合现代终端的协议
HTTP-FLV
Flash 时代结束以后,行业里出现过一个很典型的过渡思路:HTTP-FLV。
它的核心不是把 FLV 文件下载完再播,而是:
- 服务端通过 HTTP 持续输出 FLV 数据流
- 浏览器端通过 JS 播放器持续接收并解码
所以它保留了流式传输的思路,但不再依赖 Flash 插件。
它一度在很多直播网站里非常常见,原因是:
- 延迟比 HLS 更低
- 架构上和 RTMP 体系衔接自然
但它依然不是浏览器原生能力,往往需要配合播放器库来完成。
HLS
HLS 的思路和 RTMP 完全不一样。它不是长连接持续推送,而是:
- 把流切成一段一段的小媒体片段
- 再通过索引文件让播放器按顺序拉取
它的优点是:
- 兼容性好
- CDN 体系天然适配
- 分发稳定
缺点是:
- 延迟通常比 RTMP / WebRTC 更高
所以 HLS 更适合“面向大规模观众分发”的场景。
LL-HLS
后来为了降低 HLS 的延迟,又有了 LL-HLS(Low-Latency HLS)。
它本质上是在 HLS 的基础上继续做优化,比如:
- 更小的媒体片段
- 更细粒度的分片
- 更快的拉取节奏
这样做的目的,是尽量把原本偏高的 HLS 延迟往下压。
不过即便如此,HLS 系列协议的设计目标和 WebRTC 还是不一样。它更偏向“高兼容、高分发能力”,而不是“极致低延迟互动”。
RTMP 的标准直播架构
一个典型的 RTMP 直播链路通常可以拆成下面几层:
| 层级 | 主要职责 |
|---|---|
| 推流端 | 采集摄像头 / 麦克风,编码后通过 RTMP 推给服务端 |
| 接入层 | 接收 RTMP 推流,管理会话和流入口 |
| 转码层 | 多码率输出、协议转换、关键帧对齐 |
| 分发层 | 通过 CDN 或边缘节点分发 |
| 播放端 | 根据终端类型选择 HLS / HTTP-FLV / WebRTC 等方式播放 |
这也是为什么在工程实践里,经常会听到:
- “RTMP 负责 ingest(收流)”
- “HLS / FLV / WebRTC 负责 playback(播放)”
RTMP 在今天的定位
到今天,RTMP 最应该被这样理解:
- 它依然是直播推流端非常成熟的协议
- 它不是现代浏览器端的首选播放协议
- 它常常作为直播系统的统一入口
- 后续会在云端再被转换成更适合不同观众端的格式
所以如果从浏览器视角看,RTMP 的关键不是“怎么直接在前端播 RTMP”,而是:
为什么直播系统直到今天还喜欢先把流以 RTMP 的形式送进媒体服务器。
答案就是四个字:成熟、稳定、统一。
