2016-03-10 1168 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