直播延时讲解

转载请注明出处:https://blog.csdn.net/impingo
项目地址:https://github.com/im-pingo/pingos

直播延时出现的原因

在单个服务器节点的情况下,延时出现在三个地方,推流端、服务器、播放端

推流
推流端
服务器
播放端

推流端造成的延时(TCP连接)

推流端处理流程,直播内容采集→编码→封包→缓存→发送
由于采集、编码和封包高度依赖硬件配置,所以不在本文章的讨论范围内。
发送端的主要延时原因在于缓存,那么为何会有缓存呢?我们可以将采集编码看做一个生产者,编码数据在直播过程中会不断地产生,如果网络问题导致发送失败或者发送阻塞,那么新产生的编码数据就会将旧数据覆盖导致旧数据丢失,所以需要缓存来存储新生成的编码数据。如果某个时间段内网络状况差,导致数据发送不及时,发送缓存就会增加,延时也就会增加,等到网络恢复,发送端再尽可能多地将缓存中的数据发送给服务器。
到这里推流端的延时原理已经说完了,下面讲一下服务器端是如何造成延时的。

服务器端造成的延时

上面提到,发送端为了应对网络抖动,需要将数据缓存起来,服务器端同样将收到的数据加入缓存。但是服务器端加缓冲除了为了应对抖动之外还有一个重要的原因是让播放端实现秒开功能。
服务器的缓存长度一般为gop(关键帧间隔)的整数倍,这么做的原因是播放端解码需要从关键帧开始,那么服务器向播放器端下发数据的时候就必须从关键帧的位置开始下发。
为什么实现播放器秒开功能需要在服务器端添加缓存?

播放器一般要缓存够一定长度的数据后才开始解码播放。为了让播放器马上播放,服务器就要一次性给播放器下发足够的数据。

播放器造成的延时

上文中描述秒开功能时已经提高播放器端也有一个缓存,这个缓存存在的意义在于,如果某一段时间内服务器到播放器的网络不好,播放器可以播放缓存里的数据,等网络恢复后服务器将积累的数据尽量发给播放器,播放器再填充本地缓存。通过这样的操作,播放端看起来播放效果会更好,即使出现短时间的网络抖动,画面也不至于会卡。

总结延时原因

延迟端 原因 缓存大小
推流端 应对网络抖动 不定,可配置
服务器 应对网络抖动、实现秒开功能 不定,可配置,大于等于整数个gop
播放端 应对网络抖动 不定,可配置

下篇文章将介绍如何降低直播延时。

QQ交流群:697773082

QQ交流群:697773082

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章