ffmpeg HLS 播放列表没有从头开始

ffmpeg HLS 播放列表没有从头开始

我正在尝试拍摄一段 5 分钟的视频文件并制作一个单文件HTTP 直播流播放列表和.ts文件。从 iOS 5 开始,播放列表文件格式可以支持字节范围而不是单独的文件,这对于我的用例来说是一个很好的目标。但是,当我运行命令时ffmpeg,生成的播放列表中的第一个条目.m3u8不是从字节 0 开始(甚至不是在字节 0 附近)。

例如:

ffmpeg -i input -hls_flags single_file out.m3u8

生成如下播放列表:

#EXTM3U
#EXT-X-VERSION:4
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:63
#EXTINF:1.376367,
#EXT-X-BYTERANGE:568324@63107840
out.ts
#EXTINF:1.334667,
#EXT-X-BYTERANGE:235564@63676164
out.ts
#EXTINF:1.918589,
#EXT-X-BYTERANGE:343288@63911728
out.ts
#EXTINF:10.427078,
#EXT-X-BYTERANGE:3311996@64255016
out.ts
#EXTINF:5.672333,
#EXT-X-BYTERANGE:52828@67567012
out.ts
#EXT-X-ENDLIST

请注意,第一个EXT-X-BYTERANGE条目不是@0——它在 68 MB 文件中占了大约 63 MB .ts。事实上,当将播放列表加载到<video>标签中并使用 Safari 打开 HTML 时,视频播放从输入视频的结尾开始大约 20 秒,而不是从 0 开始,并且没有办法将其拖放到更早的位置。

为什么ffmpeg制作了一个播放列表不包括所有视频? 当我观看.ts随播放列表制作的文件时,所有视频内容均存在。

我最近看到这个ffmpeg静态构建在 Linux 下,以及ffmpeg在 OS X 下使用 Homebrew 构建的 2.7.1版本。

答案1

看完之后HLS 文档 再次,我终于注意到了这个选项:

hls_list_size size

设置播放列表条目的最大数量。如果设置为 0,列表文件将包含所有片段。默认值为 5。

果然,在我最初的问题中,EXT-X-BYTERANGE视频末尾有 5 个条目,与规定的默认值一致。设置hls_list_size0所示值确实可以确保视频从头开始并包含所有预期的字节范围。

相关内容