Преобразование mp4 в mpeg2-ts дает сбой на аудиопакетах

Я написал код на C, который берет файл mp4 с видео в кодировке h264 и аудио в кодировке AAC и записывает его в сегментированные файлы.ts.

Код можно увидеть здесь: http://pastebin.com/JVdgjM9G

Проблема в том, что код подавляет аудиопакеты. Поскольку я конвертирую из h264, я должен использовать "h264_mp4toannexb", который я наконец-то получил для работы с видеокадрами. Однако, как только программа достигает первого аудиопакета (поток 1 ниже), она падает.

Образец вывода:

Output #0, mpegts, to 'testvideo':
    Stream #0.0: Video: libx264, yuv420p, 1280x720, q=2-31, 1416 kb/s, 90k tbn, 23.98 tbc
    Stream #0.1: Audio: libfaac, 48000 Hz, stereo, 127 kb/s
First chunk: testvideo-00001.ts
Read frame, keyframe: 1, index: 0
Did bitfilter fun!
Read frame, keyframe: 0, index: 0
Did bitfilter fun!
(...this repeats several more times, truncated for space...)
Did bitfilter fun!
Read frame, keyframe: 0, index: 0
Did bitfilter fun!
Read frame, keyframe: 1, index: 1
base(54516) malloc: *** error for object 0x7fd2db404520: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

Я попытался изменить код, чтобы также запустить фильтр на аудиопотоке (используя audio_stream->codec вместо video_stream->codec), но это просто выдает ошибку из фильтра.

Проблема возникает, когда я пытаюсь позвонить av_interleaved_write_frame(output_context, &packet);- для отфильтрованных видеопакетов проблем нет, кроме аудиопакета, который он полностью подавляет. Я вроде как озадачен почему, поэтому любая помощь приветствуется.

1 ответ

Решение

Оказывается av_free_packet вызов после того, как манипулирование битовым фильтром фактически высвобождает видео пакеты. Удаление этого вызова заставило код работать правильно!

Другие вопросы по тегам