Wednesday, April 11, 2012

Сборка ffmpeg для Android проекта

Сегодня поговорим о том как собрать ffmpeg под Android. В свое время эта задача у меня вызвала некоторое затруднение. Вменяемой документации и примера как это делается я не нашел, плюс ко многим вещам пришел экспериментальным путем, поэтому думаю, данный опыт было бы хорошо задокументировать.

Итак начнем! Исходные условия такие: у нас установлен NDK 7-й ревизии, у нас есть исходники ffmpeg(актуальная версия на момент написания статьи 0.10.2). Я строго рекомендую использовать именно указанную версию ffmpeg-а иначе есть риск того, что он банально не собирается(проект активно развивается, версия 0.8.x у меня компилировалась благополоучно, 0.9.x напрочь отказывалась это делать). После сборке на выходе мы получим статические библиотеки(файлы с расширение *.a, то беж archive), которые можно будет линковать нативными исходниками Android приложения(но об этом позже). В директорию с исходниками кладем данный скрипт (его я нашел на широких просторах интернета и внес некоторые изменения):

Первым делом мы отключаем весь ненужный функционал и лишь после этого добавляем поддержку необходимых кодеков и протоколов. Если этого не сделать, то размер библиотеки на выходе будет слишком большой(порядка 20Mб), а так около 5Мб, что, на самом деле, тоже немело :).Про поддержку специфического кодека нужно написать отдельно. Например мы хотим декодировать файлы сжатые посредством кодека h264. Опции которые нам нужно добавить:

Последний параметр необходимо добавлять только в том случае, если планируется сжимать данные указанным кодеком. Для аудио кодека acc набора параметров будет выглядеть следующим образом (без кодера):

Если неизвестно имя кодека(его абревиатура) то следует заглянуть в файл configure, он может дать ответы на многие вопросы :).После выполнения *.sh скрпита будет создана директория с названием целевой архитектуры. В нашем случае этот путь должен выглядеть так FFMPEG_SRC/android/armv5. Содержимое armv5(это статические библиотеки и заголовочные файлы) можно непосредственно использовать в Android проекте.

No comments:

Post a Comment