音视频学习(二十七):SRT协议

ops/2024/12/26 2:16:14/

SRT(Secure Reliable Transport)是一种开源的网络传输协议,专为实时音视频数据传输设计,具有低延迟、高可靠性和安全性等特点。

核心功能

SRT协议旨在解决实时音视频传输中的网络抖动、丢包、延迟和安全问题,提供以下核心功能:

低延迟

  • 基于UDP传输,避免了TCP的握手和慢启动等机制导致的高延迟问题。
  • 使用了基于UDP的可靠性机制(ARQ,Automatic Repeat Request)来实现可靠的包传输,同时保持低延迟。

高可靠性

  • 包重传:SRT协议会检测丢包并触发重传机制,确保所有数据包最终传输到目标。
  • 网络抖动缓冲区(Jitter Buffer):用于吸收网络延迟的抖动,保证播放流的平滑性。
  • FEC(Forward Error Correction,前向纠错):在部分丢包情况下,接收端可通过冗余数据恢复原始数据。

安全性

  • 支持AES(Advanced Encryption Standard)加密,确保数据在传输过程中的安全性。

技术特点

基于UDP的传输协议

  • SRT利用UDP提供快速的数据传输能力,同时结合其自定义的控制机制(如握手、丢包重传)实现高可靠性。

时钟同步

  • SRT会对音视频数据的时间戳进行校准,确保传输的音视频流能够在接收端按原始顺序和时间播放。

动态链路调整

  • 根据网络状况(如丢包率、延迟、带宽)动态调整传输速率,适应复杂网络环境。

拥塞控制

  • 类似于TCP的拥塞控制机制,但更优化于实时流传输。

工作流程

建立连接

  • 双方通过握手(Handshake)建立连接,类似于TCP三次握手。
  • 支持多种握手模式,包括主叫(Caller)、被叫(Listener)和对等模式(Rendezvous)。

数据传输

  • 数据以UDP包的形式传输,传输过程中添加SRT头部信息(如序列号、时间戳等)。
  • 使用ARQ机制检测丢包并进行重传。

链路维护

  • 通过定期发送心跳包维持连接。
  • 动态调整传输参数以适应网络状况。

连接终止

  • 双方完成数据传输后关闭连接。

数据包结构

基本结构

| SRT Header | Payload |

SRT Header(头部)

SRT的头部用于携带控制信息、时间戳、序列号等,是实现可靠性和低延迟传输的关键部分。

数据包头部结构

数据包的头部长度为16字节,具体字段如下:

字节偏移字段名长度(字节)描述
0-3Sequence Number4数据包的序列号,用于重排序和丢包检测。
4-7Packet Timestamp4数据包的发送时间戳(相对于连接建立时的时间偏移量)。
8-11Destination Socket ID4目标Socket的唯一标识,用于区分不同的连接。
12-15Type/Control Info4标志位字段,包含数据包类型、丢包请求等信息(详见控制包结构部分)。

控制包头部结构

控制包的头部用于携带控制指令,格式为20字节,字段如下:

字节偏移字段名长度(字节)描述
0-3Control Type4控制类型标志,例如握手、丢包通知(NAK)、ACK确认等。
4-7Subtype4控制子类型,用于进一步区分具体的控制指令。
8-11Timestamp4发送该控制包时的时间戳。
12-15Destination Socket ID4目标Socket的标识符。
16-19Additional Info4额外的控制信息,例如NAK中指示丢失包的范围。

Payload(负载)

负载部分承载实际传输的数据,例如音视频流。其内容没有固定格式,由发送方根据应用需求组织。

  • 数据包负载通常是应用层的音视频数据块。
  • 控制包负载可能包含额外的控制信息,例如丢包范围、握手参数等。

数据包分类

数据包

  • 用于传输实际音视频数据。
  • 包含数据序列号和时间戳,以确保接收端能够重排序和按时间播放数据。
  • 数据包头部固定为16字节,后跟实际数据。

控制包

  • 用于维护连接状态和网络可靠性。
  • 控制包种类包括:
    • 握手(Handshake):用于建立连接和协商参数。
    • ACK(Acknowledgement):确认接收到的数据包序列。
    • NAK(Negative Acknowledgement):通知发送方哪些数据包丢失需要重传。
    • Keep-alive:心跳包,用于维持连接。
    • Shutdown:用于关闭连接。

数据包头部内容

假设有一个SRT数据包,头部的16字节内容如下(以十六进制表示):

复制代码
0x00 0x00 0x00 0x05 0x00 0x00 0x1F 0x40 0x12 0x34 0x56 0x78 0x01 0x00 0x00 0x00

解析如下:

  • Sequence Number: 0x00000005(序列号为5)。
  • Packet Timestamp: 0x00001F40(时间戳为8000,即8秒)。
  • Destination Socket ID: 0x12345678(Socket ID为0x12345678)。
  • Type/Control Info: 0x01000000(数据包类型标志)。

控制包的常见类型

以下是部分控制包的类型和用途:

类型代码控制包类型描述
0x0000Handshake用于连接建立时的握手操作。
0x0001Keep-alive保持连接的心跳包。
0x0002Acknowledgement确认接收的数据包序列号。
0x0003Negative ACK通知发送方丢失的包序列号范围。
0x0004Shutdown表示连接终止的通知包。

数据包和控制包的对比

特性数据包控制包
功能传输音视频等实际数据维护连接、可靠性和状态
头部长度16字节20字节
负载内容实际数据控制信息

应用场景

  • 实时直播:支持高质量低延迟的音视频内容传输,是流媒体直播的理想选择。
  • 远程制作:将拍摄现场的音视频内容实时传输到后期制作工作室。
  • 内容分发:用于CDN边缘节点之间的内容传输,优化传输效率。

与其他协议对比

特性SRTRTMPWebRTC
传输协议UDPTCPUDP
延迟低延迟(<1秒)较高(>3秒)超低延迟(毫秒级)
可靠性较低
安全性支持AES加密无原生加密支持SRTP加密
复杂性中等简单较高

优势与不足

优势

  • 低延迟:适合对实时性要求高的场景。
  • 高可靠性:即使在网络抖动和丢包严重的情况下,仍能保持较好的传输质量。
  • 安全性:内置加密功能,适合敏感数据传输。

不足

  • 相比TCP,SRT对网络环境的要求较高,复杂的协议实现增加了开发难度。
  • 在极端丢包率下可能会导致更高的延迟。

http://www.ppmy.cn/ops/144996.html

相关文章

gitlab window如何设置ssh

在GitLab中设置SSH需要以下步骤&#xff1a; 在GitLab账户中&#xff0c;导航到“用户设置”下的“SSH密钥”部分。 生成SSH密钥对&#xff08;如果你还没有的话&#xff09;。在Windows上&#xff0c;你可以使用ssh-keygen命令来生成密钥。 在命令提示符或PowerShell中运行以…

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能&#xff0c;确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW&#xff0c;可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法&#xff0c;并结合硬件选型提供实…

Pycharm配置PyQt 5

Pycharm配置PyQt 5 一、配置 打开Pycharm,点击File(文件)->Settings(设置): 弹出Settings(设置)配置框,在框中选择 Tools(工具)->External Tools(外部工具) 点击”+“号 在Name(名称)中输入一个名字 Program(程序)中选择安装的designer.exe 我的路径是D:\…

8.Java内置排序算法

10. Java内置排序算法 排序算法的分类 如何写一个通用的排序算法排序元素比较分治算法思想 排序算法选择的建议 O(n)排序算法的选择 1.插入排序性能最好、其次是选择排序&#xff0c;冒泡排序性能最差 2.选择排序不是稳定的排序算法 3.插入排序是最好的选择 4.对于大规模…

流量主微信小程序工具类去水印

工具类微信小程序流量主带后台管理&#xff0c;可开通广告&#xff0c;带自有后台管理&#xff0c;不借助第三方接口 介绍 支持抖音&#xff0c;小红书&#xff0c;哔哩哔哩视频水印去除&#xff0c;功能实现不借助第三方平台。可实现微信小程序流量主广告变现功能&#xff0c…

美国加州房价数据分析02

5. 特征工程 5.1重构数据集 承接上文提到的相似度排名&#xff0c;去掉部分无关的特征。 train_set.corr()["median_house_value"].sort_values(ascendingFalse)为了提高模型训练后的鲁棒性&#xff0c;即防止过拟合&#xff0c;不建议删除关联度最低几项特征&#…

Docker日志与监控

一、引言 随着容器技术在生产环境中被广泛应用&#xff0c;Docker容器的日志管理与监控变得尤为重要。在现代应用程序中&#xff0c;容器化的应用通常是由多个容器组成的服务&#xff0c;而容器中的日志与监控则是确保服务健康运行、诊断问题和优化性能的关键。通过日志和监控…

自动化立体仓库堆垛机SRM控制系统货叉控制功能块开发设计

1、堆垛机SRM控制系统硬件组态如下图 货叉控制G120变频器,通信报文111 G120变频器配置调试 2、堆垛机SRM控制系统HMI屏幕页面如下图 运行、起升、货叉相关参数设定 3、堆垛机SRM控制系统中相关变量定义如下图 其中包含货叉控制相关变量:货叉左极限、货叉左居中 货叉右极限…