Компиляция ffmpeg для Android на Mac - PullRequest
0 голосов
/ 20 ноября 2018

Я пытался скомпилировать ffmpeg для Android на Mac, но у меня это не работает.

#!/bin/bash
NDK=/Users/user/Library/Android/sdk/ndk-bundle
SYSROOT=$NDK/platforms/android-18/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

function build_one
{
    ./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-network \
    --disable-filters \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG

    make clean all
    make
    make install
}

CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"

build_one

Я также даю разрешение на выполнение через chmod +x build_script.sh

Я пробовал ffmpeg 4.1 и 4.0.3, но оба они не работают и имеют одну и ту же причину ошибки.

Я тоже примерял android-21 и android-18

test_cpp_condition stddef.h defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4
test_cpp
BEGIN /tmp/ffconf.bgSdFwkD/test.c
    1   #include <stddef.h>
    2   #if !(defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4)
    3   #error "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
    4   #endif
END /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -Os -fpic -marm -E -o /tmp/ffconf.bgSdFwkD/test.o /tmp/ffconf.bgSdFwkD/test.c
/tmp/ffconf.bgSdFwkD/test.c:3:2: error: "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
#error "unsatisfied condition: defined __ARM_ARCH_4__ || defined __TARGET_ARCH_4"
 ^
1 error generated.
test_cpp_condition stddef.h defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T
test_cpp
BEGIN /tmp/ffconf.bgSdFwkD/test.c
    1   #include <stddef.h>
    2   #if !(defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T)
    3   #error "unsatisfied condition: defined __ARM_ARCH_4T__ || defined __TARGET_ARCH_4T"
    4   #endif
END /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -Os -fpic -marm -E -o /tmp/ffconf.bgSdFwkD/test.o /tmp/ffconf.bgSdFwkD/test.c
test_ld cc
test_cc
BEGIN /tmp/ffconf.bgSdFwkD/test.c
    1   int main(void){ return 0; }
END /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -Os -fpic -marm -march=armv4t -c -o /tmp/ffconf.bgSdFwkD/test.o /tmp/ffconf.bgSdFwkD/test.c
/Users/user/Library/Android/sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/ -march=armv4t -o /tmp/ffconf.bgSdFwkD/test /tmp/ffconf.bgSdFwkD/test.o
ld: unknown option: --sysroot=/Users/user/Library/Android/sdk/ndk-bundle/platforms/android-21/arch-arm/
clang: error: linker command failed with exit code 1 (use -v to see invocation)
C compiler test failed.

Есть ли какие-либо инструменты / приложения или библиотеки, которые мне нужно дополнительно установить для компиляции? Я в замешательстве .... (Этот вопрос может дублировать, но ни одно из решений не было сработано для меня)

РЕДАКТИРОВАТЬ Чтобы уточнить мою системную среду.

  • Mac OS X High Sierra (10.13.6)
  • Android NDK (18.1.5063045)
  • Инструменты Android SDK и инструменты сборки SDK
  • CMake

РЕДАКТИРОВАТЬ Я также пробовал версию ffmpeg 3.3.9, но она также не работает.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Я установил NDK через Android Studio , и я думаю, что это была проблема, поэтому я загрузил Android NDK вручную, и теперь я могу настроить и запустить make-файл.

Подождите! Еще не сделано. Когда я запускал makefile с последним стабильным NDK (r16b), он писал:
./libavutil/common.h:33:19: fatal error: errno.h: No such file or directory

Согласно этому документу , поэтому я попытался использовать NDK r15c, и он, наконец, работает для меня.

Подводя итог, как я решаю эту проблему : Вручную установите NDK r15c и НЕ ЗАБЫВАЙТЕ обновить файл сценария оболочки!

Надеюсь, это поможет !!

0 голосов
/ 20 ноября 2018

Вы можете использовать обертки https://github.com/WritingMinds/ffmpeg-android если вы хотите использовать большую часть команды. Это увеличит размер apk.

Я также попытался скомпилировать его и после нескольких попыток скомпилировал свою собственную. Но это также сложно интегрировать. Для компиляции я использовал приведенные ниже уроки.

Но я просто хотел сказать, используйте обертку FFmpeg, если вы не учитываете размер apk. В собственном скомпилированном FFmpeg нет значительного прироста производительности. Используйте вышеупомянутую обертку, которую вы хотите. Это работает хорошо. Если вы более увлечены компиляцией и интеграцией своего собственного FFmpeg, попробуйте приведенные выше руководства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...