Сборка FFMPEG с librtmp для Android - PullRequest
11 голосов
/ 09 марта 2012

Я пытаюсь собрать все в одном статическом двоичном файле FFMPEG с NDK r7b, и все работает нормально, пока я не попытаюсь собрать его с поддержкой RTMP.

Я использую источники из https://github.com/guardianproject/android-ffmpeg с librtmp2.4 и пользовательской конфигурацией, подобной этой

.configure \
--target-os=linux \
--cross-prefix=arm-linux-androideabi- \
--arch=arm \
--sysroot=/home/andrey/android-ndk-r7b/platforms/android-3/arch-arm \
--enable-static \
--disable-shared \
--disable-symver \
--enable-small \
--disable-devices \
--disable-avdevice \
--enable-gpl \
--enable-librtmp \
--prefix=../build/ffmpeg/armeabi \
--extra-cflags=-I../rtmpdump/librtmp \
--extra-ldflags=-L../rtmpdump/librtmp \

, а каталог rtmpdump находится на том же уровне, что и ffmpeg.Как я понимаю, последние две строки в моем конфиге говорят, где компилятор может найти источники librtmp.Но все, что я получаю, это ERROR: librtmp not found

Я не имею опыта работы с NDK и, конечно же, мне не хватает какой-то важной части, но я не могу найти ее сам.

1 Ответ

11 голосов
/ 10 марта 2012

Это сложно, но я думаю, что у меня есть решение. Проблема во время настройки заключается в том, что FFmpeg хочет определить правильную установку librtmp через систему управления pkg-config.

Я предполагаю, что вы успешно скомпилировали librtmp в каталоге, указанном в ../rtmpdump. Отредактируйте скрипт конфигурации FFmpeg и найдите строку:

enabled librtmp    && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket

Прокомментируйте это (поставьте «#» в начале строки). Теперь перезапустите конфигурацию, только с такими модификациями:

--extra-cflags="-I/full/path/to/rtmpdump"

Здесь может помочь абсолютный путь. Кроме того, в конце опустите / librtmp /, так как директивы #include уже ставят префикс файлов заголовка с помощью librtmp /. Далее:

--extra-ldflags="-L/full/path/to/rtmpdump -lrtmp"

Опять же, абсолютный путь и укажите библиотеку для ссылки, поскольку мы закомментировали эту логику через configure.

Теперь настройка должна завершиться успешно, и кросс-компиляция также должна быть успешной. Последний двоичный файл ffmpeg должен сообщать о семействе модулей RTMP по протоколам:

ffmpeg -protocols
[...]
rtmp
rtmpe
rtmps
rtmpt
rtmpte

Обратите внимание, что у меня нет среды разработки NDK для тестирования. Но я протестировал на своей настольной системе Ubuntu, скомпилировав librtmp (без установки пакета через pkg-config), а затем выполнив описанные выше шаги.

...