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



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

这张图是不太理想的链路状态 。 如图在收到第4号包的时候 , 接收端便意识到3号包没有收到 , 并返回了一个NAK 。 比较幸运的是3号包还在发送端窗口的边沿 , 还没有被丢弃 , 这时候重传或许还来得及 。 但是这个时候 。 链路已经处在出错边缘的状态 , 这不是一个好的链路状态 。
同时可以看到发送端缓冲区里充满了数据 , 说明这些数据都没有收到肯定应答 , 而接收端缓冲区里又几乎没有什么数据 。

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

我再来解释一下为什么说接收端缓冲区里面的数据要越多越好 。 例如 , 有一位叫解码器的朋友去吃自助餐 , 他的胃口时大时小 , 是动态码率VBR 。 同时网络带宽有波动 , 上菜时快时慢 。 那么接收端缓冲区里的数据(餐盘里的食物)当然是越多越好 , 如果数据很少的话 , 很可能没有办法应对相应的波动 。
3.2.3 发送端链路状态图

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

至此我们尝试总结出安全冗余量(Secure-Margin)的概念 。 首先我们看一下发端缓冲区冗余量(SendBuffer-Margin) , 图中橙红色的线是延时量Latency , 同时也是缓冲区的最大值 。 如果发送缓冲区用量超过这个值就表示链路可能出错 。
这是我们5G直播中的链路状态截图 , 在前一段时间链路状态还是不错的 , 后半段发生了一些波动 , 但是距离链路出错还有一些距离 , 这一段距离就是发送端缓冲区冗余量 。 图下方是发送端缓冲区冗余量的公式 , 实际工作中我们更多是依靠链路状态图来做监测 。
3.2.4 接收端链路状态图

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

下面咱们来看接收缓冲区冗余量(ReceiveBuffer-Margin) , 接收端缓冲区比较好的状态应该是缓冲区用量沿着Latency这条黑色的线波动 , 说明咱们家里的存粮很多 。 图中可以看到某些时间点缓冲区数据被消耗很多 , 但还是有余量的 , 这些余量就是接收端缓冲区冗余量 。
图下方是接收端缓冲区冗余量的公式 , 接收端缓冲区的冗余量和发送端缓冲区的冗余量是相互影响的 , 两者我们都需要参考 , 并且选择一个比较差的作为链路的安全冗余量 , 这样就可以判断出我们链路是否安全以及安全程度 , 也就是距离链路出错还有多少距离 。

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

在了解如何判断SRT链路是否安全后 , 咱们还要学会怎么把它调整到安全的状态 。 架设SRT链路之前 , 首先要通过相应工具获知网络带宽、丢包率和RTT 。
3.3 Lantency

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

在知道RTT之后就可以根据链路参数计算出Latency 。 Latency是SRT协议的核心参数 , 具体计算参见图片 , 图中的“RTT乘数”实际上代表链路可以完成多少次重传 。
通过图中的公式就可以得到延时量的建议值 , 但我们建议还是要进行长时间的测试 , 观看链路的安全冗余量以及状态图来找出一个最终合适的延时量 。 当然 , 也需要根据直播的场景对延时的敏感度 , 也就是直播场景的需求做具体的判断 。
3.3.1 SRT链路丢弃的数据包和RTT乘数的关系

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

上图能帮助我们更好的了解SRT链路丢弃的数据包和RTT乘数的关系 。 两条链路初始丢包率分别是4%和8% 。 可以看到在RTT乘数为1的时候没有恢复的数据非常多 , 实际上链路的丢包率越高就需要越大的RTT乘数 。


推荐阅读