2016-03-10 659 views
1

我使用遠程src中的ffmpeg生成hls內容,並且經驗滯後,我在瀏覽器中不理解。hls.js - 如何增加預加載的緩衝區大小

舉例來說,即使有說out8.ts,out9.ts ... hls.js玩家將在發言權out7.ts並不會加載out8.ts或out9.ts.

它會等到out7.ts 已基本完成播放,然後嘗試加載out.m3u8其中將包含out8.ts並可能out9.ts.但是這樣做太晚了,最終導致滯後。我在本地主機上以高效的方式執行此操作。

這似乎一旦開始發生就會重演。

我怎樣才能讓hls.js 更經常請M3U8緩衝什麼都存在?或儘可能多?

此外,如果有已經說1-10.ts文件,我怎麼能讓hls.js開始不是最後一個(雖然更接近實況),但也許在5.TS,所以它不會運行進入緊急的最後期限問題,關於下一次更新的m3u8和可能的長期11.ts阻止它緩衝它?

我的選擇:

new Hls({ 
      autoStartLoad: true, 
      debug: App.isDevelopment(), 
      manifestLoadingTimeOut : 60000, 
      /*manifestLoadingMaxRetry : 9,*/ 
      manifestLoadingRetryDelay : 500, 
      levelLoadingTimeOut : 60000, 
      /*levelLoadingMaxRetry : 9,*/ 
      levelLoadingRetryDelay : 500, 

      fragLoadingTimeOut : 60000, 
      /*fragLoadingMaxRetry : 6,*/ 
      fragLoadingRetryDelay : 250, 
      startFragPrefetch : true 
    }); 

是否有使用梆子代替hls.js關於控制這樣的事情在有什麼區別?

回答

1

您遇到的滯後可能會降低到段持續時間。對於直播,短暫的播放列表可能會導致更頻繁的請求,從而導致額外的網絡流量。蘋果推薦10秒,但(我相信)ffmpeg使用2秒的默認值。如果您正在使用ffmpeg的hls muxer,或者使用-segment_time選項(如果您使用的是段1),則可以使用-hls_time選項設置段持續時間。我會先試試這個。

HLS規範規定reloading the playlist之間的時間由段的目標持續時間決定,所以我想玩家必須堅持這一點,如果它符合規範。

您可以使用EXT-X-START標籤至start playing the video at a specific point in time

+0

是的,我已經使用hls_time並嘗試了各種長度。我認爲主要的問題是我沒有爲每個細分市場固定長度。有些會是10秒,其他8或12會在後一種情況下導致滯後,因爲在前10秒過去後它不會準備好。 雖然這有助於獲得一致的長度: -x264-params scenecut = 0 -x264opts keyint_min = 100 -g 100 -r 20 -framerate 20 – momomo