在直播APP开发完成后,技术人员不仅要测试源码的完整性,设备的兼容性,还要顾及到网络对于直播的影响,因为网络不稳定是造成直播画面和声音延迟的最主要因素。事实上,在直播APP开发中,还有一些非网络因素也能造成延迟,今天,小编就和大家一起来全面总结下,所有造成网络延迟的情况。
一、网络延时
这里指的是从主播端采集,到观众端播放之间的时间差。就算不考虑主播端采集
对视频进行编码的时间,以及观众端观看对视频机型解码的时间,那也会不可避免的造成延迟,原因就是信息从主播到观众的“路程”上,可能会经过很多CDN节点,经过一次,就会产生一次分发过程,而这种过程必然会造成延迟。另外,数据传输过程中还涉及到逻辑上的交互,例如包的重传以及确认,以及缓存上的一些逻辑等,会在这个基础上又增加很多很多。
二、网络抖动
网络抖动,是指数据包的到达顺序、间隔和发出时不一致。比如说,发送N+1个数据包,每个表间隔1s发出,结果在第N-50个包在传输过程中遇到网络拥塞,导致包N-50不是紧跟着N-51到达的,而是延迟到N后面才到达。这种情况就会造成不能依照接收顺序把内容播放出来,否则会造成失真。为了不产生失真现象,就不可避免了造成播放延迟。
三、网络丢包
直播中用到的RTMP、HLS等流媒体传输协议都是建立在TCP的基础之上。TCP一个很重要的特性是其可靠性—不会发生数据丢失的问题。为了保证可靠性,TCP在传输过程中会有3次握手:首先客户端会向服务端发送连接请求,服务端同意后,客户端会确认这次连接,这就是3次握手。接着,客户端就开始发送数据,每次发送一批数据,得到服务端的“收到”确认后,继续发送下一批。那么问题就来了,TCP为了保证传到,都会有自动重传机制。如果传输中发生了丢包,没有收到对端发出的“收到”信号,那么本端就会自动重传丢失的包,一直到超时。网络丢包是很难控制的因素,所以当网络的丢包率开始升高时,重传会导致延时不断增大。
四、RTMP累积延迟
虽然在流媒体传输协议中,RTMP用的无疑是最多的,但是它也有一个比较显著的弱点,即累积误差。原因也比较简单,就是RTMP基于TCP:当网络状态很差时,服务器会将包缓存起来,从而导致累积的延迟,当网络状况好了,就一起发给客户端,这样做的对策就是,造成客户端的缓冲区很大,从而发生延迟。
五、GOP-Cache(图像群组造成的延迟)
图像群组(Group of pictures),简称GOP。为了让大家更加直观的理解,直接放图:
图片来源:https://www.processon.com/view/56ebb341e4b01c9aeb5f137f
以上,就是直播中,可能造成延迟的主要原因,如果你对此有其它见解,欢迎在评论区给小编进行留言。
文章主要内容来源自CSDN博客《直播技术学习笔记(直播协议+流媒体服务器+音视频处理+FFmpeg)》作者CrankZ,其中部分内容有改动。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。