Я работаю над оболочкой API libavformat, которая преобразует файлы MP4 с H.264 и AAC в сегменты MPEG-TS, подходящие для потоковой передачи. Я просто делаю простое потоковое копирование без перекодирования, но файлы, которые я создаю, воспроизводят видео со скоростью 3600 кадров в секунду вместо 24 кадров в секунду.
Вот некоторые результаты ffprobe https://gist.github.com/chrisballinger/6733678, сломанный файл ниже:
r_frame_rate=1/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=0
start_time=0.000000
duration_ts=2999
duration=0.033322
Тот же входной файл, отправленный вручную через ffmpeg, имеет правильную информацию о временной метке:
r_frame_rate=24/1
avg_frame_rate=0/0
time_base=1/90000
start_pts=126000
start_time=1.400000
duration_ts=449850
duration=4.998333
Я считаю, что проблема кроется где-то в моей настройке libavformat здесь: https://github.com/OpenWatch/FFmpegWrapper/blob/master/FFmpegWrapper/FFmpegWrapper.m#L349, где я переделал фрагмент кода из ffmpeg.c, который требовался для прямого копирования потока.
Поскольку 3600 кажется «магическим числом» (60 * 60), это может быть так же просто, как я неправильно установил шкалу времени, но я не могу понять, где мой код отличается от самого ffmpeg / avconv.
Аналогичный вопрос здесь, но я не думаю, что они дошли так далеко, как я: -libavformat-with-vcopy-acopy">Мультиплексирование потока H.264 Annex B и AAC с использованием libavformat с vcopy/acopy