直播疑难杂症排查(4)— 延时高-阿里云开发者社区

开发者社区> 人工智能> 正文

直播疑难杂症排查(4)— 延时高

简介:

1. 延时的测量


一般测量延时最简单的方法,就是推流端和播放端对着同一个时钟,然后用播放端显示的时间减去推流端显示的时间,就得到了粗略的直播延时。


2. 延时高问题分析


首先,我们看看可能产生延时的模块有哪些:


- 图像处理延时,比如画面剪裁、美颜、特效处理

- 视频编码/解码延时

- 网络传输的延时

- 业务代码中的缓冲区


一般图像处理、数据拷贝、编解码带来的延时,都是 ms 级别的,真正会产生比较大延时的地方,一个是互联网上的网络传输延时,另一个就是业务代码中的缓冲区了。


2.1 网络传输延时


数据在网络上传输,从一个节点经过多级服务器转发到达另一个节点,是不可避免有物理延时的,下面这个表格给出了理论上数据在光纤中的网络传输的时间(实际场景中的延时往往比这个要大很多,因为涉及到带宽、网络抖动等干扰):


wKioL1kTI03wzmHjABHJjafeWag255.png


由该表可以看出:播放端离推流端或者边缘服务器节点的物理距离越近,延时会越小。


2.2 业务代码中的缓冲区


业务代码中的缓冲区,主要是推流端的缓冲区和播放端的缓冲区,一个 30 fps 的视频流,缓冲区每滞留 30 帧,延时就会增大 1s,那么,它们是怎么产生缓冲数据的呢 ?


- 推流端的数据是怎么 “积累” 起来的 ?


采集 -> 编码 -> 数据发送 -> [服务器]


当网络产生抖动的时候,“数据发送” 会因此减慢,产生一定的阻塞,从而导致这些数据会被 “积累” 在了推流端的发送缓冲区中。


- 播放端的数据怎么 “积累” 起来的 ?


[服务器]-> 数据接收 -> 解码 -> 渲染


当网络产生抖动的时候,服务器的数据无法 “及时” 地传输到播放端,而由于 TCP 协议的可靠性,所有的数据都会被服务端积累起来,在网络恢复良好的时候,会快速传输到播放端,这些数据会被动地  “积累” 在接收缓冲区中。


- 怎么消除业务缓冲区的累积延时呢 ?


推流端的发送缓冲区,可以在网络恢复良好的时候,快送发送出去,从而消除掉这个累积延时。


播放端的接收缓冲区,可以通过丢帧或者加速播放的方式快速消费掉缓冲区中的数据,从而消除累计延时。


2.3 协议延时


通常标准的直播协议有 RTMP,HLV,HLS 三种,一般 RTMP/HLV 协议的延时在 1~3s,HLS 协议的直播延时则会更大,注重延时的直播应用,大都会选择 RTMP/HLV 协议,这些协议均是基于 tcp 的协议,tcp 协议的多个特性导致其延时明显要高于基于 udp 的私有协议,主要有如下方面:


- 建立连接的三次握手

- ACK 机制

- 丢包重传


因此,如果想从本质上解决直播延时问题,还是要换成基于 udp 的私有协议来传输数据。




本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1924289,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
人工智能
使用钉钉扫一扫加入圈子
+ 订阅

了解行业+人工智能最先进的技术和实践,参与行业+人工智能实践项目

其他文章