我正在尝试拍摄一段 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_size
为0
所示值确实可以确保视频从头开始并包含所有预期的字节范围。