SRT RTMP 区别详解:IRL 直播该选 SRTLA、SRT 还是 RTMP?
2026年10月09日 · 阅读 3 分钟
目录
IRL 直播通常更适合用 SRT 而不是 RTMP,如果能同时通过多条连接发送,SRTLA 是最佳选择。直播平台只认 RTMP,所以 RTMP 仍然需要,但它应该用在服务器到平台之间稳定的最后一段,而不是移动网络上。
本文重点讲 SRT RTMP 区别,介绍三种协议的工作原理、在蜂窝网络下的表现,以及如何正确设置 SRT 延迟。
什么是 RTMP?
RTMP(Real-Time Messaging Protocol)由 Adobe 制定,并在 2009 年作为开放规范发布。它设计为运行在 TCP 这类可靠传输之上,保证所有消息按顺序到达(RTMP 规范)。SRT 的 IETF 草案把 RTMP 称为公共互联网上视频上传的事实标准,这也是几乎所有编码器、App 和平台都支持它的原因。
它的弱点也来自同一个设计。RTMP 依赖 TCP,只有在往返时间较低的连接上才能保持可接受的可靠性,而且 TCP 的拥塞控制会让它无法用满连接的带宽。对在基站之间来回切换的手机来说,这很不合适。
传统 RTMP 还有编解码器限制:只支持两个音频声道和少数几种编解码器,不支持 HEVC、VP9 或 AV1。Enhanced RTMP 规范补上了这些编解码器,YouTube 现在也为 RTMP(S) 列出了 H.264、H.265 和 AV1。不过,你的软件和平台都得支持才行。RTMPS 就是在加密 SSL 连接中传输的 RTMP,YouTube 正是出于这个原因推荐使用它。
什么是 SRT?
SRT(Secure Reliable Transport)是一个开源协议,在 Haivision 的公开 GitHub 仓库中开发,并写入了 IETF Internet-Draft。它基于 UDP,补上了 UDP 自身缺少的可靠性。主要机制是 ARQ(Automatic Repeat reQuest):接收端发现丢包后,会请求发送端重新发送该数据包。协议还支持 Forward Error Correction 和自带的连接绑定。
对 IRL 直播来说,有三个特性很重要:
- 延迟缓冲:接收端会把每个数据包按设定的时间保留一会儿,再往下传。这段时间让丢失的数据包有机会重传,也能还原流原本的时间节奏。到得太晚的数据包可能被丢弃,因此延迟保持恒定,不会越积越大。
- 加密:SRT 支持 128、192 或 256 位密钥的 AES 加密。
- 与编解码器无关:SRT 不关心载荷内容,任何编解码器、分辨率和帧率都能传输,包括 HEVC。
这个取舍是设计里自带的。缓冲区会有意增加延迟,所以你得选一个适合自己网络的延迟值(下文详述)。
什么是 SRTLA?
SRTLA 是带链路聚合功能的 SRT 传输代理。它源自 BELABOX 项目,通过多条网络链路传输 SRT 流量,以获得更大带宽和冗余。流量会根据网络状况动态分配,主要用途是绑定多个移动调制解调器进行直播。
SRTLA 并不取代 SRT,而是位于 SRT 发送端和接收端之间:设备把 SRT 流通过例如两张 SIM 卡,或一张 SIM 卡加 Wi-Fi 发送出去,支持 SRTLA 的接收端再把数据包重新拼好,以普通 SRT 流的形式往下传。由此带来三个实际要求:
- 需要支持 SRTLA 的发送端。例如免费的 iOS App Moblin 可以同时使用一条蜂窝、一条 Wi-Fi 和多条以太网连接。IRL Pro 和 BELABOX 设备同样提供 SRTLA 绑定。
- 需要 SRTLA 接收端。直播平台或普通的 SRT 监听端做不到这一点,所以中间必须有一台支持 SRTLA 输入的服务器。
- 需要调优。数据包经由不同链路到达时顺序会被打乱。因此 README 要求设置
lossmaxttl等接收端选项,并配合合适的延迟。
RTMP、SRT、SRTLA 一览对比
| 特性 | RTMP | SRT | SRTLA |
|---|---|---|---|
| 传输方式 | TCP | 带重传(ARQ)的 UDP | 分散在多条链路上的 SRT 流量 |
| 移动信号弱时 | 往返时间要低才能保持可靠 | 在延迟窗口内恢复丢失的数据包 | 与 SRT 相同,另一条链路还能补上较弱的链路 |
| 延迟 | 没有可调的缓冲区 | 可配置延迟窗口 | 需要足够的延迟来完成重排序和重传 |
| 绑定 | 不支持 | 本身不支持 | 支持,可跨多条连接 |
| HEVC | 仅在两端都支持 Enhanced RTMP 时可用 | 支持,与编解码器无关 | 支持,因为它承载的是 SRT |
| 加密 | RTMPS(TLS) | 内置 AES | 取决于接收端的配置 |
| App 与平台 | 几乎所有 App,以及大型平台文档中的标准接入方式 | 许多 App 和 OBS 支持,而平台文档通常写的是 RTMP(S) | 支持 SRTLA 的 App 加 SRTLA 接收端 |
平台为什么要求 RTMP,又为什么要在中间加一台服务器
大型平台的编码器文档仍然围绕 RTMP。YouTube 把 RTMP/RTMPS 列为编码器协议(HLS 是另一种选择),Twitch 的开发者文档也介绍了通过 RTMP 把流推送到 Twitch。因此在大多数情况下,不能直接把 SRT 和 SRTLA 指向平台。
服务器不仅解决了这个问题,还带来第二个好处。整条链路是这样的:
- 手机或编码器通过 SRT 或 SRTLA(或 RTMP)把流发给服务器。
- OBS Studio 等推流软件从这台服务器拉取流。
- OBS 通过稳定的连接,以 RTMP(S) 把处理好的流发送给平台。
不稳定的移动段使用容错更好的协议,平台则通过一条不会移动的连接收到它期望的协议。移动信号短暂中断时,OBS 会继续向平台推流,观众看到的直播不会中断。编码器和 OBS 都是主动连接服务器,所以你不用在路由器上开放端口。
我们的 IRL 端点服务器配合你自己电脑上的 OBS,就能做到这一点。它支持 RTMP、SRT 和 SRTLA 输入。如果你没有推流电脑,IRL 直播服务器会在云端运行 OBS Studio,同样支持这三种输入。想了解 IRL 方案的整体思路,请看我们的 IRL 直播指南。
如何设置 SRT 延迟
SRT 延迟并不是从摄像头到观众的总延迟。在 Haivision 的文档中,它只指通过网络发送所引入的延迟。编码、解码、OBS 和平台的延迟还要另外叠加。这项设置真正决定的,是接收端为补偿迟到的数据包和重传而额外等待的时间。
OBS 知识库针对最重要的选项给出了一条经验法则:
- 默认值为 120 ms。
- 该值至少应为编码器与服务器之间往返时间(毫秒)的 2.5 倍。
- 在 OBS 使用的 FFmpeg 风格 URL 中,单位是微秒。1 秒的延迟写作
latency=1000000。
示例:如果 ping 服务器得到的往返时间是 80 ms,按这条规则最小值为 200 ms,所以你应填写 srt://SERVER:PORT?latency=200000。请使用客户门户中显示的准确地址和端口。在 OBS 中,这类选项可以追加到媒体源或自定义推流目标的 SRT URL 后面。
发送到我们服务器的流,建议把延迟设为 2 秒。根据 App 不同,填写 2000(毫秒)或 2000000(微秒)。多数 App 有单独的输入框;没有的话,就追加到 SRT URL 后面,例如 srt://<server>:<port>?streamid=publish:publish/<streamkey>&latency=2000。也可以设得更低,但我们特意推荐 2 秒,以稳定性为先。
还有几点需要注意:
- 单位不同。SRT 库和 SRTLA README 使用毫秒,而 FFmpeg 风格的 URL 使用微秒。输入数值之前,先确认你的 App 要求哪种单位。
- 双方会协商。根据 SRT 草案,连接的延迟取发送端和接收端各自提议值中的较大者。如果另一端要求更高,只在一端调低是没用的。
- 移动和绑定的流需要留有余量。上面的规则只是最小值,不是推荐值。窗口越大,重传和重排序的时间越充裕,但延迟也越高。例如 SRTLA README 在示例接收端配置中,把
latency=2000(ms)和lossmaxttl一起使用。 - 一次只改一项,而且要在移动中测试,不要只在桌前测试。
服务器位置与延迟
由于 SRT 的最小延迟随往返时间而定,距离就很重要。服务器离你越近,往返时间越短,你就可以用更小的延迟窗口,或者以更低的延迟获得同样的稳定性。最后一段也是同样的道理:例如 Twitch 会根据到你设备的网络路径来推荐接入端点。
我们提供美国、欧洲、亚洲和南美洲的服务器地区。使用 IRL 端点服务器时,标准套餐可以在这些地区中选择,并在客户门户中随时切换,出行时很方便。Dedicated 套餐则由我们为你设置端点,默认选在离你账单地址最近的位置。
你该用哪种协议?
- 一条连接,较新的 App:用 SRT,并根据往返时间设置延迟。
- 两条或更多连接:如果你的 App 支持、服务器也接受,就用 SRTLA。
- 只支持 RTMP 的 App 或摄像机:用 RTMP。能用,但对弱网的容忍度较低。
- HEVC:SRT 与编解码器无关。请确认从编码器到 OBS 再到平台的整条链路都支持。请把编码器的关键帧间隔设为 2 秒;在 Apple 设备上使用 HEVC 时,如果 App 提供 B 帧选项,请关闭 B 帧。
FAQ
SRT 在 IRL 直播中比 RTMP 好吗?
对移动段来说,通常是的。SRT 基于 UDP,会在可配置的延迟窗口内重传丢失的数据包,而 RTMP 依赖 TCP,只有往返时间较低的连接才可靠。从服务器或 OBS 到平台的连接,RTMP 仍然是常见的选择。
SRT 和 SRTLA 有什么区别?
SRT 是针对单条连接的传输协议。SRTLA 则同时通过多条网络链路(例如两张 SIM 卡)传输 SRT 流量,以增加带宽和冗余。SRTLA 需要支持 SRTLA 的 App,以及能识别它的接收端。
能用 SRT 直接推流到 Twitch 或 YouTube 吗?
两个平台的编码器文档都以 RTMP(S) 为主,YouTube 还有 HLS 作为替代。如果你想在移动段使用 SRT 或 SRTLA,请在设备和平台之间放一台服务器和 OBS。
SRT 延迟应该设成多少?
发送到我们服务器的流,建议设为 2 秒,根据 App 不同填写 2000(毫秒)或 2000000(微秒)。也可以设得更低,但 2 秒是特意以稳定性为先的推荐值。一般规则是,根据 OBS 知识库,至少是到服务器往返时间的 2.5 倍,默认值为 120 ms。移动网络和绑定连接通常需要更多余量,代价是延迟更高。
IRL 端点服务器支持这三种协议吗?
支持。IRL 端点服务器和 IRL 直播服务器都接受 RTMP、SRT 和 SRTLA 作为输入。