Я использую 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
Эталонное изображение
Редактировать:
Я обновил 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
.
В чем может быть проблема ?.