如何让 HLS 从头开始
How to make HLS start from the begining
我需要 HLS 流式传输方面的帮助,我正在尝试为流式传输创建播放列表,
我正在使用 ffmpeg 生成文件和 .m3u8 文件。为了播放,我正在使用带有 videojs 播放器的网页
想法是使用已经创建的文件来模拟直播。
问题是 iphone 在某些版本中有效,而在另一个版本中无效。
问题是,当我开始在 phone 的 Safari 浏览器中播放视频时,它会冻结一段时间,然后下载并播放最后一段。
例如,如果视频分为 4 个不同的 .ts 文件。
从第4个.ts文件开始播放然后停止
问题是我有 2 个 iphone 手机 phone,其中一个工作正常,但另一个不工作
不工作的单元格 phone 是 iphone 6(版本 9.2.1)
这是我的 m3u8 文件。请注意,我使用的是#EXT-X-PLAYLIST-TYPE:EVENT,我从按钮中删除了#EXT-X-ENDLIST。所以它应该作为直播播放。
它还工作了 phone 秒,它从我设置 #EXT-X-START:TIME-OFFSET=0
的 0 秒开始
但在此版本 (9.2.1) 中,视频冻结,然后跳到最后一段(网络研讨会-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 配置吗?
来自 HLS 规范的 section 6.3.3:
If the EXT-X-ENDLIST tag is not
present and the client intends to play the media normally, the client
SHOULD NOT choose a segment which starts less than three target
durations from the end of the Playlist file.
在您的例子中,这意味着播放器将从 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 标签添加到播放列表的末尾。
这个问题很久以前就已经 post 了,但我 post 我的解决方法是为现在遇到同样问题的人解决这个问题,并作为我的个人笔记。
在我的例子中,诀窍是将持续时间设置为一个非常大的值,例如 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 个目标持续时间”设置为一个荒谬的值,并让玩家处理此异常。看起来异常处理是从段的开头开始的。
希望对您有所帮助。
我需要 HLS 流式传输方面的帮助,我正在尝试为流式传输创建播放列表,
我正在使用 ffmpeg 生成文件和 .m3u8 文件。为了播放,我正在使用带有 videojs 播放器的网页
想法是使用已经创建的文件来模拟直播。
问题是 iphone 在某些版本中有效,而在另一个版本中无效。 问题是,当我开始在 phone 的 Safari 浏览器中播放视频时,它会冻结一段时间,然后下载并播放最后一段。
例如,如果视频分为 4 个不同的 .ts 文件。 从第4个.ts文件开始播放然后停止
问题是我有 2 个 iphone 手机 phone,其中一个工作正常,但另一个不工作
不工作的单元格 phone 是 iphone 6(版本 9.2.1)
这是我的 m3u8 文件。请注意,我使用的是#EXT-X-PLAYLIST-TYPE:EVENT,我从按钮中删除了#EXT-X-ENDLIST。所以它应该作为直播播放。
它还工作了 phone 秒,它从我设置 #EXT-X-START:TIME-OFFSET=0
的 0 秒开始但在此版本 (9.2.1) 中,视频冻结,然后跳到最后一段(网络研讨会-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 配置吗?
来自 HLS 规范的 section 6.3.3:
If the EXT-X-ENDLIST tag is not present and the client intends to play the media normally, the client SHOULD NOT choose a segment which starts less than three target durations from the end of the Playlist file.
在您的例子中,这意味着播放器将从 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 标签添加到播放列表的末尾。
这个问题很久以前就已经 post 了,但我 post 我的解决方法是为现在遇到同样问题的人解决这个问题,并作为我的个人笔记。
在我的例子中,诀窍是将持续时间设置为一个非常大的值,例如 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 个目标持续时间”设置为一个荒谬的值,并让玩家处理此异常。看起来异常处理是从段的开头开始的。
希望对您有所帮助。