Я написал код C, который принимает файл mp4 с кодированным h264 видео и аудио в формате AAC и записывает его в сегментированные файлы .ts.Преобразование mp4 в mpeg2-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);
- для отфильтрованных видеопакетов нет проблем, но аудио пакет полностью задыхается. Я, как бы торопится, почему, хотя, поэтому любая помощь приветствуется.
Таким образом, ошибка происходит по строке 297? Что такое объект 0x7fd2db404520? – idoby
Это пакетный объект, насколько я могу судить. Я попробовал отладить его, но попал во что-то, где не было символов (черная дыра), и он не мог следовать за ним. Но пакет - это единственное, что меняется между каждой итерацией для этой функции, поэтому я не могу представить, что это что-то еще. –
Это довольно много кода для отладки глазного яблока. Можете ли вы опубликовать это как строительный проект, включая любые библиотеки, чтобы люди могли вставлять его в виртуальную машину, строить и отлаживать ее? – idoby