什么是SRT 协议?
SRT(Secure Reliable Transport)是一种开源的视频传输协议,由 Haivision 于 2017 年开源,并由 SRT Alliance 推动发展。SRT 主要用于在复杂网络环境下进行低延迟、高可靠的视频数据传输,广泛应用于远程制作、互联网直播、视频回传等场景。
与传统的 RTMP、RTSP 或 HTTP Live Streaming(HLS)相比,SRT 在弱网环境下具有更好的抗丢包能力和更低的传输延迟,因此近年来逐渐成为互联网视频传输的重要协议之一。
SRT 基于 UDP 协议实现,但在其之上构建了一套可靠传输机制,使其兼具 UDP 的低延迟特性和 TCP 的可靠性。
SRT协议设计目标
SRT 的设计目标主要包括以下几个方面:
- 低延迟传输
视频直播和远程制作对实时性要求极高,SRT 通过减少协议交互、优化重传策略以及控制缓存大小,使端到端延迟可控制在 100ms 至数百毫秒之间。
- 高可靠性
SRT 能够在网络丢包率较高(例如 10% 甚至更高)的环境下保持稳定传输。通过丢包检测、重传机制和拥塞控制算法,保证视频数据完整传输。
- 网络适应能力
SRT 可以自动适应网络带宽变化,并动态调整发送速率,从而在复杂网络环境中保持稳定传输。
- 安全性
SRT 支持基于 AES 的加密机制,保证数据在公网传输过程中的安全性。
SRT协议架构
SRT 协议在架构上可以分为以下几个层次:
bash
应用层
│
SRT协议层
│
UDP传输层
│
IP网络
SRT 在 UDP 之上实现了可靠传输机制,包括:
- 数据包编号
- 丢包检测
- 重传机制
- 流量控制
- 拥塞控制
因此可以理解为 "增强版的 UDP 可靠传输协议"。
SRT协议工作原理
1. 连接建立
SRT 支持三种连接模式:
- Caller 模式
主动发起连接的一方。 - Listener 模式
监听端口等待连接。 - Rendezvous 模式
双方同时主动连接,常用于 NAT 穿透。
连接建立过程类似 TCP 的握手,但采用 UDP 实现,流程包括:
- Caller 发送连接请求
- Listener 返回响应
- 双方交换参数(如延迟、窗口大小、加密方式等)
- 建立传输会话
完成握手后,双方进入数据传输阶段。
2. 数据包结构
SRT 的数据包主要包括两种类型:
数据包(Data Packet)
用于承载视频数据(如 TS 或 ES 数据)。
主要字段包括:
- Sequence Number(序列号)
- Message Number(消息号)
- Timestamp(时间戳)
- Payload(数据内容)
序列号用于丢包检测和重排序。
控制包(Control Packet)
控制包用于管理传输过程,例如:
- ACK
- NAK
- Keepalive
- Shutdown
其中:
ACK(Acknowledgement)
用于确认已成功接收的数据包。
NAK(Negative Acknowledgement)
用于通知发送方丢失的数据包序号。
3. 丢包检测与重传
SRT 使用 ARQ(Automatic Repeat reQuest)机制进行丢包恢复。
工作流程如下:
- 接收端检测序列号是否连续
- 若发现缺失序列号,则发送 NAK
- 发送端收到 NAK 后重传对应数据包
这种机制能够在较高丢包率情况下保证数据完整。
4. 延迟缓冲(Latency Buffer)
SRT 的一个重要机制是 延迟缓冲区。
接收端会缓存一定时间的数据(例如 120ms),用于等待重传数据。
流程:
bash
数据接收
↓
放入缓冲区
↓
等待可能的重传
↓
按时间顺序输出
这样可以避免因为丢包导致的视频卡顿。
SRT的关键实现机制
1. 拥塞控制
SRT 实现了基于 带宽估计的拥塞控制算法。
其主要思想包括:
- 监测 RTT(往返时间)
- 统计丢包率
- 动态调整发送速率
当网络拥塞时:
- 降低发送速率
- 减少数据包发送频率
当网络恢复时:
- 逐步增加发送速率
2. 流量控制
流量控制用于防止接收端缓冲区溢出。
SRT 使用 滑动窗口机制:
发送端只能发送窗口范围内的数据。
当接收端发送 ACK 时:
窗口向前滑动
允许发送新的数据
3. 时间戳同步
SRT 数据包包含时间戳,用于保证数据播放顺序。
接收端会根据时间戳进行:
- 数据重排序
- 延迟控制
- 同步播放
4. NAT 穿透
SRT 支持 NAT 穿透,通过 Rendezvous 模式实现。
流程:
- 双方同时向对方发送 UDP 数据包
- NAT 建立映射
- 成功建立 SRT 连接
该机制在公网部署视频设备时非常重要。
SRT的安全机制
SRT 支持端到端加密。
主要特点包括:
- 使用 AES-128 或 AES-256 加密
- 支持密钥交换
- 防止中间人攻击
加密流程:
bash
发送端加密数据
↓
UDP传输
↓
接收端解密
这样可以保证视频流在公网传输中的安全性。
SRT的性能优化
SRT 在设计中进行了多项优化,以适应视频传输需求。
1. 自适应重传
SRT 根据网络状况动态调整重传策略:
- RTT 较高时增加重传间隔
- 丢包率较高时加快重传
这样可以减少无效重传。
2. Packet Pacing
SRT 使用 发送节奏控制(Packet Pacing):
均匀发送数据包
避免瞬间突发流量
这有助于减少网络拥塞。
3. TSBPD 机制
TSBPD(Time Stamp Based Packet Delivery)是 SRT 的重要特性。
其原理是:
根据时间戳控制数据输出时间
这样可以实现:
- 平滑播放
- 延迟控制
- 抗网络抖动
4. 高效缓冲管理
SRT 使用环形缓冲区管理数据:
优点:
- 减少内存复制
- 提高数据处理效率
- 支持高带宽视频流
SRT与其他协议对比
| 协议 | 传输方式 | 延迟 | 丢包恢复 | 适用场景 |
|---|---|---|---|---|
| RTMP | TCP | 较高 | 依赖 TCP | 传统直播 |
| HLS | HTTP | 高 | 无 | 点播 |
| WebRTC | UDP | 极低 | FEC+ARQ | 实时通信 |
| SRT | UDP | 低 | ARQ | 直播回传 |
SRT 在 实时性与可靠性之间取得了良好平衡。
总结
SRT 是一种面向实时视频传输的高性能协议。它基于 UDP 实现,但通过 ARQ 重传、拥塞控制、流量控制和延迟缓冲机制,使其具备可靠传输能力。
SRT 的核心特点包括:
- 低延迟传输
- 高可靠性
- 自适应网络能力
- 安全加密
- NAT 穿透支持
通过 Packet Pacing、TSBPD、拥塞控制等优化技术,SRT 能够在复杂网络环境下稳定传输高清视频流。