【问题标题】:How to make HLS start from the begining如何让 HLS 从头开始
【发布时间】:2016-11-17 22:21:38
【问题描述】:

我需要一些有关 HLS 流式传输的帮助,我正在尝试为流式传输创建一个播放列表,

我正在使用 ffmpeg 生成文件和 .m3u8 文件。为了播放,我正在使用带有 videojs 播放器的网页

这个想法是使用已经创建的文件来模拟实时流。

问题是在某些版本的 iphone 中可以工作,而在另一个版本中则不能。 问题是当我开始在手机的 Safari 浏览器中播放视频时,它会冻结一段时间,然后下载并播放最后一段。

例如,如果视频被分成 4 个不同的 .ts 文件。 它从第 4 个 .ts 文件开始播放,然后停止。

问题是我有 2 部 iphone 手机,其中一部可以正常工作,而另一部则不行

无法使用的手机是 iphone 6(版本 9.2.1)

这是我的 m3u8 文件。请注意,我使用的是#EXT-X-PLAYLIST-TYPE:EVENT,并从底部删除了#EXT-X-ENDLIST。所以应该以直播的形式播放。

它适用于其他手机,它从我设置 #EXT-X-START:TIME-OFFSET=0 的 0 秒开始

但在此版本 (9.2.1) 中,视频冻结,然后跳转到最后一段 (webinar-3.ts) 播放该段并最终停止。

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:NO
#EXT-X-PLAYLIST-TYPE:EVENT
#EXT-X-START:TIME-OFFSET=0
#EXT-X-TARGETDURATION:6
#EXTINF:5.046444,
webinar-0.ts
#EXTINF:5,
webinar-1.ts
#EXTINF:5,
webinar-2.ts
#EXTINF:5,
webinar-3.ts

有没有人知道我做错了什么或如何获得适用于此 iphone 版本的 m3u8 配置?

【问题讨论】:

    标签: ios iphone ffmpeg video-streaming http-live-streaming


    【解决方案1】:

    来自 HLS 规范的section 6.3.3

    如果 EXT-X-ENDLIST 标签不是 存在并且客户端打算正常播放媒体,客户端 不应选择开始少于三个目标的段 播放列表文件末尾的持续时间。

    在您的情况下,这意味着播放器将从webinar-3.ts 开始播放。由于播放列表中没有更多片段,视频将停止。换句话说,您看到的行为是正确的。

    允许您specify the starting point of a video 的 EXT-X-START 标记是在协议的第 6 版(不是第 4 版)中引入的,因此您应该相应地更改播放列表中 EXT-X-VERSION 标记的值.

    如果您想从视频的开头开始播放(并且活动没有直播),为什么不创建一个 VOD 播放列表呢?将所有片段添加到播放列表中,移除 EXT-X-PLAYLIST-TYPE 标签(或将其设置为 VOD),然后将 EXT-X-ENDLIST 标签添加到播放列表的末尾。

    【讨论】:

    • 嗨@Simon 感谢您的回答,是的,我在示例中犯了一个错误,但我使用的是#EXT-X-VERSION:6。
    • 我在示例中犯了一个错误,但我使用的是#EXT-X-VERSION:6。我不使用 VOD 事件的原因是因为我想模拟视频是实时流媒体,例如,如果有人观看视频,则该人不能像您可以使用视频点播。我清楚我想要达到的目标吗?这就是我使用 EVENT 播放列表类型并从播放列表末尾删除 ENDLIST 的原因。现在我已经阅读了 HLS 规范,是的,行为就像你说的那样。在 9.2.1 版本中。有什么解决方法可以帮助我做我想做的事吗?
    • EVENT 播放列表类型允许用户从事件开始处搜索流中的任何位置 - 片段被附加到播放列表中,它们不会从其中删除。如果您可以控制视频播放器,您可以创建一个 VOD 播放列表并禁用播放器控件。例如。移除快退和快进按钮。
    【解决方案2】:

    这个问题很久以前就已经发布了,但我发布了我的解决方法,以解决现在遇到同样问题的人以及我的个人笔记。

    在我的例子中,诀窍是将持续时间设置为一个非常大的值,例如 99999999999。

    #EXTM3U
    #EXT-X-VERSION:3
    #EXT-X-MEDIA-SEQUENCE:0
    #EXT-X-ALLOW-CACHE:NO
    #EXT-X-START:TIME-OFFSET=0
    #EXT-X-TARGETDURATION:99999999999
    #EXTINF:4.159091,
    v000.ts
    #EXTINF:4.090909,
    v001.ts
    
    ...
    
    

    正如 Simon 提到的,默认情况下,播放器不会从第 0 段开始,而是从“安全生存点”开始,距离播放列表末尾约 3 个目标持续时间。变通方法的想法是将“~3 目标持续时间”设置为一个荒谬的值,并让玩家处理此异常。看起来对此的异常处理是从段的开头开始的。

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-12
      • 1970-01-01
      • 2012-07-30
      相关资源
      最近更新 更多