直播延时的本质
夏楚 edited this page 2019-12-19 18:31:39 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

  • 1、所谓直播就是正在发生的事情流逝多少时间产生多少数据。

  • 2、那么直播为什么会有延时本质是直播为了提升体验会给缓存一部分历史数据(比如说为了提高画面打开速度做GOP缓存)。

  • 3、那是不是没有GOP缓存就不会有延时呢答案是错误的因为不仅仅你的服务器有缓存播放器也有缓存。播放器在点击开始播放出现画面会有时间差,那么为什么播放器要这么做?原因是播放器为了提高播放流畅度,做了缓存。直播数据传到播放器我们可以认为是一根水管,这跟水管水量时大时小,有时干脆断流,如果不用缓存一下,那么画面会卡顿。

  • 4、假定我们削掉服务器和播放器所有的缓存那么是不是就没有延时呢Too yong too simple!记住,缓存是永远无法消灭的。假定网络是根水管我们掐住它5秒然后再放开手那么这5秒的数据会消失吗并不会直播是正在发生的事情它会源源不断产生水量会把水管涨粗在这5秒内播放器就得干等数据等网络恢复了那么这5秒的数据会一股脑怼给播放器然后又是接着的源源不断过来的直播数据这样播放器就多了5秒的数据而这多出来5秒的数据要么直接丢弃要么加快播放速度否则永远都不会凭空消灭掉。

  • 5、很遗憾的告诉你几乎所有标准播放器都不会直接丢数据或加快播放速度。

  • 6、那细心的小伙伴会问我为什么UDP直播延时更低原因是UDP这根管子上有很多破洞,水量太大了直接漏了,表现形式就是数据直接丢了,那么播放器就得花屏了。

  • 7、TCP水管涨粗可以理解为网络链路缓存的增加(路由器缓存增加)如果滞留的水量太大了怎么办那么先是撑满网络链路缓存然后撑满发送端Socket缓存然后撑满发送端应用逻辑缓存如果还放不下那么对不起服务器只能掐断TCP了。