【问题标题】:hls.js - how to increase the preloaded buffer sizehls.js - 如何增加预加载的缓冲区大小
【发布时间】:2016-06-25 17:07:57
【问题描述】:

我正在使用来自远程 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 在控制这些事情方面有什么区别吗?

【问题讨论】:

  • 您找到了一个好的解决方案吗?谢谢。

标签: ffmpeg video.js http-live-streaming live-streaming clappr


【解决方案1】:

您遇到的延迟可能与分段持续时间有关。对于实时流,较短的持续时间可能会导致更频繁地请求播放列表,这可能会导致额外的网络流量。 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

【讨论】:

  • 是的,我已经使用了 hls_time 并尝试了各种长度。我认为主要问题是我没有得到每个段的固定长度。有些是 10 秒,有些是 8 或 12 秒,这在后一种情况下会导致延迟,因为在前 10 秒过去后它还没有准备好。这有助于获得一致的长度:-x264-params scenecut=0 -x264opts keyint_min=100 -g 100 -r 20 -framerate 20
【解决方案2】:

尝试使用 maxBufferLength。这是 hls.js 将尝试达到的保证缓冲区长度,与 maxBufferSize 无关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多