ffmpeg HLS плейлист не запускается с самого начала

2329
Collin Allen

Я пытаюсь взять 5-минутный видеофайл и произвести гусек HTTP Live плейлиста потока и .tsфайл. Формат файла списка воспроизведения может поддерживать байтовые диапазоны вместо отдельных файлов с iOS 5, что является хорошей целью для моих сценариев использования. Но когда я запускаю свою ffmpegкоманду, первая запись в результирующем .m3u8списке воспроизведения не начинается с (или даже рядом) байта 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- это около 63 МБ в .tsфайле 68 МБ . Действительно, при загрузке списка воспроизведения в <video>тег и открытии HTML-кода с помощью Safari воспроизведение видео начинается примерно через 20 секунд с конца входного видео, а не с 0, и нет способа удалить его раньше.

Почему был ffmpegсоздан плейлист, который не включает все видео ? Когда я смотрю .tsфайл, созданный рядом со списком воспроизведения, присутствует весь видеоконтент.

Я вижу это на недавних ffmpegстатических сборках под Linux, а также на версии ffmpeg2.7.1, созданной Homebrew под OS X.

5

1 ответ на вопрос

6
Collin Allen

After reading the HLS documentation again, I finally noticed this option:

hls_list_size size

Set the maximum number of playlist entries. If set to 0 the list file will contain all the segments. Default value is 5.

Sure enough, in my initial question, there are 5 EXT-X-BYTERANGE entries from the end of the video, consistent with the stated default value. Setting hls_list_size to 0 as indicated does in fact ensure the video starts at the beginning and includes all the expected byte ranges.

Какой странный дефолт! При использовании байтовых диапазонов вы думаете, что они поймут, что вам нужен список воспроизведения для всего файла (по умолчанию). John 7 лет назад 1
Оглядываясь назад, я думаю, что ffmpeg по умолчанию был выбран с (вероятно, правильным), полагая, что наиболее распространенным вариантом использования этой функции будет кодирование потоков в реальном времени, где только последние несколько сегментов - это то, что может понадобиться посетителю, когда он начинает играть , Collin Allen 6 лет назад 0

Похожие вопросы