Могу ли я мультиплексировать поток h264 в mp4 (aac) через libavformat без libx264? - PullRequest
1 голос
/ 03 июня 2011

У меня просто есть поток видео в кодировке h.264, и я хочу создать файл mp4.

/ * найти выходной формат для mp4 * /

m_pOutputFormat = av_guess_format ("mp4", NULL, NULL);

if (! M_pOutputFormat) return FALSE; // не удалось найти подходящий формат вывода (mp4).

в этом коде я получаю mpeg для видеокодека, а не h264, я думаю, это потому, что я собираю ffmpeg без libx264. (и я не хочу собирать ffmpeg с libx264 для лицензии)

m_pOutputFormat-> video_codec = CODEC_ID_H264;

когда я изменяю его video_codec на CODEC_ID_H264, он отлично работает на некоторых проигрывателях (kmplayer). но он не работает на iPod, QuickTime.

этот код может быть неправильным, поскольку он не может изменить значение codec_tag (эта переменная имеет свойство const).


1. как получить другой результат для av_guess_format ("mp4", NULL, NULL) без перекомпиляции libav + libx264?

2. как правильно сделать файл mp4?

1 Ответ

0 голосов
/ 06 сентября 2011

Я думаю, вам не нужен libx264 для правильной работы с потоком h264, потому что libx264 является кодировщиком, и я работал с пакетами h264, используя libav, скомпилированный без libx264. Он отлично работает для чтения пакетов из файла и записи его в другой файл.

Что касается вызова av_guess_format, вы можете предоставить соответствующий тип MIME для h264 (например, video / h264 или любой другой) или просто дать функции другое короткое имя типа. Это должно быть правильно: av_guess_format ("h264", NULL, NULL).

Посмотрите здесь пример кода (target-C): http://libav -users.943685.n4.nabble.com / Libavcodec-encoding-with-libx264-td3250373.html

...