直播延時的本質
阿新 • • 發佈:2020-11-25
所謂直播就是正在發生的事情,流逝多少時間產生多少資料。
- 那麼直播為什麼會有延時?
本質是:直播為了提升體驗,會給快取一部分歷史資料(比如說為了提高畫面開啟速度做GOP快取)
- 那是不是沒有GOP快取就不會有延時呢?
答案是錯誤的,因為不僅僅你的伺服器有快取,播放器也有快取。播放器在點選開始播放到出現畫面會有時間差,那麼為什麼播放器要這麼做?原因是播放器為了提高播放流暢度,做了快取。直播資料傳到播放器我們可以認為是一根水管,這跟水管水量時大時小,有時乾脆斷流。如果不用桶快取一下,那麼畫面會卡頓。
- 假定我們削掉伺服器和播放器所有的快取,那麼是不是就沒有延時呢?
快取是永遠無法消滅的。假定網路是根水管,我們掐住它5秒,然後再放開手,那麼這5秒的資料會消失嗎?並不會!直播是正在發生的事情,它會源源不斷產生水量,會把水管漲粗,在這5秒內,播放器就得乾等資料,等網路恢復了,那麼這5秒的資料會一股腦懟給播放器,然後又是接著的源源不斷過來的直播資料,這樣播放器就多了5秒的資料,而這多出來5秒的資料要麼直接丟棄要麼加快播放速度,否則永遠都不會憑空消滅掉。
目前幾乎所有標準播放器,都不會直接丟資料或加快播放速度。
- 為什麼UDP直播延時更低?
原因是UDP這根管子
上有很多破洞,水量太大了直接漏了,表現形式就是資料直接丟了,那麼播放器就得花屏了。
- TCP水管漲粗可以理解為網路鏈路快取的增加(路由器快取增加),如果滯留的水量太大了怎麼辦?
那麼先是撐滿網路鏈路快取,然後撐滿傳送端Socket快取,然後撐滿傳送端應用邏輯快取,如果還放不下,那麼對不起,伺服器只能掐斷TCP了。