Подтвердить что ты не робот

Здание FFMPEG с librtmp для Android

Я пытаюсь построить статический двоичный код 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 и, очевидно, пропустил какую-то важную часть, но не могу найти ее сам.

4b9b3361

Ответ 1

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

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

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

Прокомментируйте это (поставьте '#' в начале строки). Теперь запустите configure, только с этими изменениями:

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

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

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

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

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

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

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