音视频学习(九十):再谈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 小时前
原创音乐人创作编曲伴奏新方式,清唱歌词的音频配合AI编曲软件超好用
人工智能·音视频
想你的液宝2 小时前
下单系统寄/到件省市区关联选择功能实现方案
后端
iPadiPhone2 小时前
性能优化的“双刃剑”:MySQL 查询缓存深度架构解析与面试复盘
java·后端·mysql·缓存·面试·性能优化
WmKong2 小时前
告别 GORM 的“魔法字符串”和“事务满天飞”:我开源了一个强类型查询构建库
后端
Meta392 小时前
SpringBoot通过kt-connect+kubectl进行本地调试k8s服务
spring boot·后端·kubernetes
杰杰7982 小时前
深入理解 Django REST Framework 的 Serializer(上)
后端·python·django
西***63472 小时前
藏在应急指挥车中的 “核心密码”
矩阵·音视频
tant1an2 小时前
Spring Boot 进阶之路:热部署机制 + 配置高级特性详解
java·spring boot·后端
xiaoye37082 小时前
如何在Spring中使用注解解决线程并发问题?
java·后端·spring