hls.js - 如何增加预加载缓冲区大小

hls.js - how to increase the preloaded buffer size

我正在使用来自远程 src 的 ffmpeg 生成 hls 内容,但我的经验一直滞后,我在浏览器中无法理解。

例如,即使有说 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
    });

使用 clapper 而不是 hls.js 来控制这些东西有什么区别吗?

您遇到的延迟可能与分段持续时间有关。对于直播流,较短的持续时间可能会导致对播放列表的更频繁请求,这可能会导致额外的网络流量。 Apple 建议 10 秒,但(我相信)ffmpeg 使用默认值 2 秒。如果您使用的是 ffmpeg 的 hls muxer,则可以使用 -hls_time 选项设置片段持续时间,如果您使用的是第一个片段,则可以使用 -segment_time 选项。我先试试这个。

HLS 规范指定 reloading the playlist 之间的时间由片段的目标持续时间决定,所以我想播放器必须遵守此规范才能符合规范。

您可以使用 EXT-X-START 标签 start playing the video at a specific point in time

尝试使用 maxBufferLength.This 是保证的缓冲区长度 hls.js 将尝试达到,而不管 maxBufferSize。