|SRT协议在电视直播中的应用( 二 )



|SRT协议在电视直播中的应用
本文插图

SRT是一个开源协议 , 它在github有一个非常活跃的社区 。 从2017年到2020年的Issues和Pull Requests的数据可以看出这个社区有多活跃 。

|SRT协议在电视直播中的应用
本文插图

我们大概从2018年开始接触SRT , 也经过了很长时间的学习 , 有一些觉得不错的学习资料想和大家分享一下 。
图左是SRT的技术综述(89页) , 它更像一个规范 , 这是学习SRT的朋友都绕不过去的一本书 。 第二本图书是SRT联盟推出的部署指南 , 这本书更针对实际使用者 , 告诉我们怎么应用SRT , 怎么部署 , 怎么穿越防火墙 , 怎么调整 , 出错了怎么办等等 , 这也是一本大概四五十页 , 内容非常详细的指南 。 当然咱们可以通过github去学习 。 SRT在今年三月份提交了一个RFC的草案 , 第二个网址是草案的全部内容 , 内容是对最新版SRT非常详尽的概述 , 此外Haivison和SRT联盟官网也有非常多的资料和白皮书可供下载 。 当然 , 学习SRT最主要的是实践 , 无论是从应用还是开发的角度 , 实践都是最好的学习方式 。

|SRT协议在电视直播中的应用
本文插图

我们尝试总结一下SRT到底是一个什么样的协议 。
当然SRT在不断的发展 , 它的野心也是很大的 , SRT现在开发了许多新功能 , 包括传输大文件、小的对话数据等等 。 但是SRT的“传统优势领域“还是实时的视音频传输 , SRT本质上是一个点对点的传输协议(单播而不是组播) 。 SRT的亮点在于能够克服有损网络中的抖动和丢包 。 SRT目前还是专注于节目的制作和分发 , 而不是交付 。 最后两个也是SRT独有的特点 , SRT拥有一个强制的延时量 , 并且这个延时量是固定不变的 , 但是这个延时在网络搭建之前可以由用户进行调整 , 另外SRT可以对内容进行加密 。

|SRT协议在电视直播中的应用
本文插图

SRT是如何实现这些功能的呢:

  • 首先 , SRT协议以UDP协议为基础 , 传统观念认为UDP协议不可靠 , 但实际它的效率很高 , 具备稳定、可重复并具有连续吞吐量的数据包投递机制 。
  • 第二 , SRT采用握手机制建立连接 。 这个握手机制非常高效 , 只需使用两个往返就可以完成握手、信息交互、参数交互 。
  • 第三 , SRT使用了改进后的ARQ自动重发请求技术 , 也逐步开始支持FEC前向纠错 。
  • 第四 , 封装协议中带有精准的时间戳 。
  • 最后SRT通过设定延时量 , 统一规定了发送端和接收端缓冲区的大小 。 实际上延时量也决定了缓冲区可以使用的大小 。

2.2 UDP协议

|SRT协议在电视直播中的应用
本文插图

在有损网络中不用SRT协议 , 使用裸露的UDP协议行不行呢?这是一个编码后的TS流信号(VBR) , 固定帧间隔40毫秒 , 经过了有损网络传输之后 , 码流特性改变 , 帧间隔也变得不固定 。 实际上 , 这样的信号是几乎无法解码出来的 。
2.3 SRT协议

|SRT协议在电视直播中的应用
本文插图

上图是SRT协议的效果图 , 可以看到SRT在解码端重新恢复了原有的码率特性和帧间隔 。 如图所示 , SRT有一个发送端缓冲区、接收端缓冲区 , 在发送信号的同时会有一些控制信息或者说反馈信息来实现ARQ纠错 , 并且SRT包头中有精确的时间戳 。
另外在发送端接收端之间有一个强制的固定延时量 。 这个延时实际上是在接收端缓冲区产生的 , 所有数据放到接收端缓冲区 , 必须要等待一个延时量才会被送给解码器 , 这是SRT的一个重要的特点 。


推荐阅读