天天看點

EasyDarwin手機直播是如何實作的快速顯示視訊的方法

前言

經常有人提到最近比較火的映客直播、花椒直播這種,是如何做到在打開手機直播中的某一個主播房間後,立即就能顯示出主播視訊,非常非常快,而且延時也比較小,是怎麼做到的?

其實,這并不是什麼高深的技術,就是最基本的關鍵幀索引/推送,在使用者打開直播,請求直播流的時候,伺服器将緩存中最新的關鍵幀開始推送給用戶端,那麼用戶端收到關鍵幀就能夠立即解碼顯示,一個720p的關鍵幀,一般的十幾k,即使在網速不好的情況下,也是秒秒鐘内就能下載下傳完成,下載下傳完成就能立即顯示,這樣就是快速第一時間出畫面的效果了;

伺服器端處理

我們在EasyDarwin服務端将接收到的推送端推送的資料都以隊列的形式進行緩沖,我們在緩沖的同時,對幀進行過濾,區分音/視訊RTP包和I/P視訊幀,我們每次都将最新的I幀位置在Queue中進行标記,這樣在每一個直播推送分發的時候,我們都從最新的I關鍵幀開始推送,這樣既保證了能夠第一時間顯示畫面,又能夠非常低延時低進行直播分發,具體算法如圖所示:

EasyDarwin手機直播是如何實作的快速顯示視訊的方法

顯示效果

EasyDarwin手機直播是如何實作的快速顯示視訊的方法

版本及源碼下載下傳

  1. 流媒體伺服器EasyDarwin:https://github.com/EasyDarwin/EasyDarwin
  2. 手機直播推送端EasyPusher:https://github.com/EasyDarwin/EasyPusher
  3. 手機直播用戶端EasyClient:https://github.com/EasyDarwin/EasyClient

遺留問題

其實這裡還有一個問題遺留,就是在視訊檢索到最新的關鍵幀開始發送的時候,而且音頻隊列還是從頭開始發送給用戶端的,這樣當緩沖區開的比較大的時候,就會有很多無用的音頻資料分發到用戶端了,其實這裡在做視訊幀定位的時候,也要做一下音頻幀的定位,不過這個還沒想好怎麼做,後續再完善!

擷取更多資訊

郵件:[email protected]

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

EasyDarwin手機直播是如何實作的快速顯示視訊的方法

繼續閱讀