我使用来自远程src的ffmpeg生成hls内容,并且我在浏览器中保持经验滞后,我不明白。
例如,即使有说 out8.ts,out9.ts ... hls.js播放器将会显示 out7.ts并且不会加载out8.ts或out9 .ts。
等到out7.ts 几乎完成播放然后尝试加载 out.m3u8 ,其中包含out8.ts和可能out9.ts.但它这么晚才这样做,最终导致滞后。我在localhost上以有效的方式执行此操作。
一旦它开始发生,这似乎会重演。
如何让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
});
使用clapper 而不是hls.js在控制此类事情方面有什么区别吗?
答案 0 :(得分:1)
您遇到的延迟可能会延迟到细分持续时间。对于直播流,较短的持续时间会导致对播放列表的更频繁请求,这可能导致额外的网络流量。 Apple推荐10秒,但(我相信)ffmpeg默认使用2秒。如果您使用ffmpeg' s hls muxer,则可以使用-hls_time
选项设置分段持续时间;如果使用分段1,则可以使用-segment_time
选项设置分段持续时间。我先试试这个。
HLS规范指定reloading the playlist之间的时间由段的目标持续时间决定,因此我猜如果要符合规范,播放器必须遵守此标准。
您可以将EXT-X-START标记用于start playing the video at a specific point in time。
答案 1 :(得分:0)
尝试使用maxBufferLength。这是hls.js尝试达到的保证缓冲区长度,与maxBufferSize无关。