音视频学习(九十):再谈srt协议

什么是SRT 协议?

SRT(Secure Reliable Transport)是一种开源的视频传输协议,由 Haivision 于 2017 年开源,并由 SRT Alliance 推动发展。SRT 主要用于在复杂网络环境下进行低延迟、高可靠的视频数据传输,广泛应用于远程制作、互联网直播、视频回传等场景。

与传统的 RTMP、RTSP 或 HTTP Live Streaming(HLS)相比,SRT 在弱网环境下具有更好的抗丢包能力和更低的传输延迟,因此近年来逐渐成为互联网视频传输的重要协议之一。

SRT 基于 UDP 协议实现,但在其之上构建了一套可靠传输机制,使其兼具 UDP 的低延迟特性和 TCP 的可靠性。

SRT协议设计目标

SRT 的设计目标主要包括以下几个方面:

  1. 低延迟传输

视频直播和远程制作对实时性要求极高,SRT 通过减少协议交互、优化重传策略以及控制缓存大小,使端到端延迟可控制在 100ms 至数百毫秒之间。

  1. 高可靠性

SRT 能够在网络丢包率较高(例如 10% 甚至更高)的环境下保持稳定传输。通过丢包检测、重传机制和拥塞控制算法,保证视频数据完整传输。

  1. 网络适应能力

SRT 可以自动适应网络带宽变化,并动态调整发送速率,从而在复杂网络环境中保持稳定传输。

  1. 安全性

SRT 支持基于 AES 的加密机制,保证数据在公网传输过程中的安全性。

SRT协议架构

SRT 协议在架构上可以分为以下几个层次:

bash 复制代码
应用层
   │
SRT协议层
   │
UDP传输层
   │
IP网络

SRT 在 UDP 之上实现了可靠传输机制,包括:

  • 数据包编号
  • 丢包检测
  • 重传机制
  • 流量控制
  • 拥塞控制

因此可以理解为 "增强版的 UDP 可靠传输协议"

SRT协议工作原理

1. 连接建立

SRT 支持三种连接模式:

  1. Caller 模式
    主动发起连接的一方。
  2. Listener 模式
    监听端口等待连接。
  3. Rendezvous 模式
    双方同时主动连接,常用于 NAT 穿透。

连接建立过程类似 TCP 的握手,但采用 UDP 实现,流程包括:

  1. Caller 发送连接请求
  2. Listener 返回响应
  3. 双方交换参数(如延迟、窗口大小、加密方式等)
  4. 建立传输会话

完成握手后,双方进入数据传输阶段。

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)机制进行丢包恢复。

工作流程如下:

  1. 接收端检测序列号是否连续
  2. 若发现缺失序列号,则发送 NAK
  3. 发送端收到 NAK 后重传对应数据包

这种机制能够在较高丢包率情况下保证数据完整。

4. 延迟缓冲(Latency Buffer)

SRT 的一个重要机制是 延迟缓冲区

接收端会缓存一定时间的数据(例如 120ms),用于等待重传数据。

流程:

bash 复制代码
数据接收
   ↓
放入缓冲区
   ↓
等待可能的重传
   ↓
按时间顺序输出

这样可以避免因为丢包导致的视频卡顿。

SRT的关键实现机制

1. 拥塞控制

SRT 实现了基于 带宽估计的拥塞控制算法。

其主要思想包括:

  • 监测 RTT(往返时间)
  • 统计丢包率
  • 动态调整发送速率

当网络拥塞时:

  • 降低发送速率
  • 减少数据包发送频率

当网络恢复时:

  • 逐步增加发送速率

2. 流量控制

流量控制用于防止接收端缓冲区溢出。

SRT 使用 滑动窗口机制

发送端只能发送窗口范围内的数据。

当接收端发送 ACK 时:

复制代码
窗口向前滑动
允许发送新的数据

3. 时间戳同步

SRT 数据包包含时间戳,用于保证数据播放顺序。

接收端会根据时间戳进行:

  • 数据重排序
  • 延迟控制
  • 同步播放

4. NAT 穿透

SRT 支持 NAT 穿透,通过 Rendezvous 模式实现。

流程:

  1. 双方同时向对方发送 UDP 数据包
  2. NAT 建立映射
  3. 成功建立 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 能够在复杂网络环境下稳定传输高清视频流。

相关推荐
星辰徐哥2 小时前
Spring Boot 微服务架构设计与实现
spring boot·后端·微服务
星辰徐哥2 小时前
Spring Boot 数据导入导出与报表生成
spring boot·后端·ui
明夜之约2 小时前
Spring Boot 自动装配源码
java·spring boot·后端
Leaton Lee2 小时前
Spring Boot分层架构详解:从Controller到Service再到Mapper的完整流程
java·spring boot·后端·架构
Micro麦可乐2 小时前
Spring Boot 实战:从零设计一个短链系统(含完整代码与数据库设计)
数据库·spring boot·后端·哈希算法·雪花算法·短链系统
Jinkxs2 小时前
Resilience4j- 与 Spring Boot 快速集成:自动配置与基础注解使用
java·spring boot·后端
毕设源码_郑学姐2 小时前
计算机毕业设计springboot网络相册设计与实现 基于Spring Boot框架的在线相册管理系统开发与应用 Spring Boot驱动的网络影集设计与实践
spring boot·后端·课程设计
辣机小司2 小时前
【踩坑记录:Spring Boot 配置文件读取值不一致?警惕 YAML 的“八进制陷阱”与 SnakeYAML 版本之谜】
java·spring boot·后端·yaml·踩坑记录
码农阿豪2 小时前
从零到一:Spring Boot快速接入金仓数据库实战
数据库·spring boot·后端
追逐时光者3 小时前
一个基于 .NET 与 Avalonia 构建、面向 TrinityCore 的开源 WoW 数据库编辑器
后端·.net