直播延时的本质
所谓直播就是正在发生的事情,流逝多少时间产生多少数据。
- 那么直播为什么会有延时?
本质是:直播为了提升体验,会给缓存一部分历史数据(比如说为了提高画面打开速度做GOP缓存)
- 那是不是没有GOP缓存就不会有延时呢?
答案是错误的,因为不仅仅你的服务器有缓存,播放器也有缓存。播放器在点击开始播放到出现画面会有时间差,那么为什么播放器要这么做?原因是播放器为了提高播放流畅度,做了缓存。直播数据传到播放器我们可以认为是一根水管,这跟水管水量时大时小,有时干脆断流。如果不用桶缓存一下,那么画面会卡顿。
- 假定我们削掉服务器和播放器所有的缓存,那么是不是就没有延时呢?
缓存是永远无法消灭的。假定网络是根水管,我们掐住它5秒,然后再放开手,那么这5秒的数据会消失吗?并不会!直播是正在发生的事情,它会源源不断产生水量,会把水管涨粗,在这5秒内,播放器就得干等数据,等网络恢复了,那么这5秒的数据会一股脑怼给播放器,然后又是接着的源源不断过来的直播数据,这样播放器就多了5秒的数据,而这多出来5秒的数据要么直接丢弃要么加快播放速度,否则永远都不会凭空消灭掉。
目前几乎所有标准播放器,都不会直接丢数据或加快播放速度。
- 为什么UDP直播延时更低?
原因是UDP这根管子
上有很多破洞,水量太大了直接漏了,表现形式就是数据直接丢了,那么播放器就得花屏了。
- TCP水管涨粗可以理解为网络链路缓存的增加(路由器缓存增加),如果滞留的水量太大了怎么办?
那么先是撑满网络链路缓存,然后撑满发送端Socket缓存,然后撑满发送端应用逻辑缓存,如果还放不下,那么对不起,服务器只能掐断TCP了。