如何使HLS从开始

时间:2016-07-14 20:28:14

标签: ios iphone ffmpeg video-streaming hls

我需要一些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时,从0秒开始:TIME-OFFSET = 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配置?

2 个答案:

答案 0 :(得分:0)

来自HLS规范的section 6.3.3

  

如果EXT-X-ENDLIST标签不是      目前和客户打算正常播放媒体,客户端      不应该选择一个小于三个目标的片段      播放列表文件末尾的持续时间。

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

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

如果您想从视频的开头开始播放(事件不是直播),为什么不创建VOD播放列表?将所有片段添加到播放列表,删除EXT-X-PLAYLIST-TYPE标签(或将其设置为VOD),然后将EXT-X-ENDLIST标签添加到播放列表的末尾。

答案 1 :(得分:0)

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

就我而言,诀窍是将持续时间设置为一个非常大的值,例如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个目标持续时间”设置为一个荒谬的值,并让播放器处理此异常。看起来异常处理是从分段的开头开始的。

我希望这会有所帮助。