ffmpeg hls duation на m3u8 не так - PullRequest
0 голосов
/ 25 июня 2018

Я использую ffmpeg для хранения видео в формате hls, используя приведенную ниже команду

~/bin/ffmpeg -r 15 -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -codec copy -hls_list_size 65535 -hls_time 2 -g 2 "./live.m3u8"

, где я получаю списки файлов ts и live.m3u8.Обратите внимание, что в приведенной выше команде длительность сегмента файла hls установлена ​​в 2 секунды.

Вот содержимое live.m3u8

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:2
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:2,
live0.ts
#EXTINF:2,
live1.ts
#EXTINF:2,
live2.ts
#EXTINF:2,
live3.ts
#EXTINF:1,
live4.ts
#EXTINF:2,
live5.ts
#EXT-X-ENDLIST

Обратите внимание, что в приведенном выше файле продолжительность не всегда равна 2 секундам, и онаменяется.И когда я проверяю продолжительность фактического сегмента файла ts с помощью ffprob, я получаю значение с плавающей запятой,

Например,

~/bin/ffprobe -i live3.ts -show_entries format=duration -v quiet -of csv="p=0"

дает 2.261556

И

~/bin/ffprobe -i live4.ts -show_entries format=duration -v quiet -of csv="p=0"

дает продолжительность 1.298256

Кажется, файл ffmpeg округляет значение float до int и записывает в файл live.m3u8.Это вызывает некоторые проблемы при поиске видеофайла (поиск по неправильной метке времени), а также общая продолжительность видеофайла всегда отображается меньше, чем фактическая продолжительность.Например, если я записываю видео в течение 2 часов и открываю live.m3u8 с помощью проигрывателя vlc, я вижу, что продолжительность видео отображается 1:45 мин, и я могу искать до 2 часов.

В чем может быть проблема,

Версия ffmpeg: ffmpeg version git-2014-06-24-b52637c

Эталонное изображение

enter image description here

Редактировать:

Я обновил ffmpeg до более новой версии, основываясь на инструкции здесь https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu. Но все жекакая-то проблема.Теперь файлы live.m3u8 генерируют информацию о времени в формате float, но значение не является точным.Например,

Сгенерированный файл m3u8 -

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:3.200000,
live0.ts
#EXTINF:3.100000,
live1.ts
#EXTINF:3.100000,
live2.ts
#EXTINF:2.340000,
live3.ts
#EXT-X-ENDLIST

, и если я проверю длительность live0.ts с помощью команды ~/bin/ffprobe -i live0.ts -show_entries format=duration -v quiet -of csv="p=0", она напечатает 2.3333, где, как в файле списка воспроизведения, это3.200000.

В чем может быть проблема ?.

...