Как скомпилировать FFmpeg с x264 и libfdk-aac для Android

Каждый.

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

Я хочу сделать приложение кодирования с использованием FFmpeg.

Я успешно строил NDK с FFmpeg.

Однако кодировать видео H.264 не удалось (кодек не найден..).

Я узнал, что libx264 нужно кодировать H.264 и libfdk-aac нужно кодировать AAC.

поэтому я попытался собрать libx264 и libfdk-aac, но не легко кросс-компилировать.

Пожалуйста, скажите мне, что я сделал не так.

Моя среда разработки

ОС: Ubuntu 13.10 64bit

NDK: android-ndk-r9

FFmpeg: ffmpeg-2.0.2

x264 build: build_x264_android.sh

NDK=$ANDROID_NDK_HOME

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64
PLATFORM=$NDK/platforms/android-9/arch-arm
CPU=arm
PREFIX=$NDK/sources/ffmpeg-2.0.2/android/$CPU

./configure --prefix=$PREFIX \
    --enable-shared \
    --enable-pic \
    --disable-asm \
    --disable-cli \
    --host=arm-linux \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --sysroot=$PLATFORM

make
make install
ldconfig

fdk-aac build: build_aac_android.sh

NDK=$ANDROID_NDK_HOME
CROSS_PREFIX=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
PLATFORM=$NDK/platforms/android-9/arch-arm
CPU=arm
PREFIX=$NDK/sources/ffmpeg-2.0.2/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a -mthumb -D__thumb__"

./configure --prefix=$PREFIX \
    --with-sysroot=$PLATFORM \
    --host=arm-linux \
    --enable-shared \
    --with-pic=no \
    CC="${CROSS_PREFIX}gcc --sysroot=$PLATFORM" \
    CXX="${CROSS_PREFIX}g++ --sysroot=$PLATFORM" \
    RANLIB="${CROSS_PREFIX}ranlib" \
    AR="${CROSS_PREFIX}ar" \
    STRIP="${CROSS_PREFIX}strip" \
    NM="${CROSS_PREFIX}nm" \
    CFLAGS="-O3 $OPTIMIZE_CFLAGS --sysroot=$PLATFORM" \
    CXXFLAGS="-O3 $OPTIMIZE_CFLAGS --sysroot=$PLATFORM"

make
make install

Когда я запускаю build_aac_android.sh, отображается ошибка.

войти в config.log

configure:2907: checking for arm-linux-gcc
configure:2934: result: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm
configure:3203: checking for C compiler version
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm --version >&5
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory
configure:3223: $? = 127
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -v >&5
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory
configure:3223: $? = 127
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -V >&5
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory
configure:3223: $? = 127
configure:3212: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -qversion >&5
./configure: line 3214: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory
configure:3223: $? = 127
configure:3243: checking whether the C compiler works
configure:3265: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=/platforms/android-9/arch-arm -O3 -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a -mthumb -D__thumb__ --sysroot=/platforms/android-9/arch-arm   conftest.c  >&5
./configure: line 3267: /toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-gcc: No such file or directory

configure:3312: error: in `/home/nel/android-ndk-r9/sources/ffmpeg-2.0.2/libfdk-aac':
    configure:3314: error: C compiler cannot create executables
    See `config.log' for more details

Я не могу понять эту ошибку! Мне подтвердили, что arm-linux-androideabi-gcc находится в каталоге..

Я хочу одолжить тебе мудрость. Подскажите пожалуйста, как собрать 'ffmpeg+x264+fdk-aac' для Android.

Спасибо..:-)

3 ответа

Решение

Вы можете попробовать / форк / клонировать мою библиотеку. Он уже компилирует x264 и libfdk-aac. Вы можете использовать любую версию цепочек инструментов gcc (например, 4.9) и поддерживает новейшую платформу Android (21).

Вы можете легко собрать ffmpeg (2.6 или новейшую версию) из моего репозитория, запустив 2-3 сценария.

Трудно объяснить, как скомпилировать оба, но вы можете проверить сценарий build_android.sh, который компилирует x264 и libfdk-aac для всех архитектур.

Вы можете прочитать функцию Bash build_aac а также build_x264 чтобы увидеть, как это было скомпилировано.

РЕПО: https://github.com/matthewn4444/VPlayer_lib

ИНСТРУКЦИЯ: https://github.com/matthewn4444/VPlayer_lib/wiki/Compiling-FFmpeg

Я знаю, что уже поздно. Я только что столкнулся с этой проблемой, и я нашел ваш вопрос. Я решил эту проблему, как показано ниже. Я надеюсь, что это может помочь некоторым парням, когда они найдут ваш вопрос через поиск в Google, как я. Это как скомпилировать fdk-aac для android. NDK версия 9d

Измените ANDROID_ROOT и ANDROID_BIN соответственно

export ANDROID_ROOT=/path/to/android-ndk/platforms/android-9/arch-arm
export ANDROID_BIN=/path/to/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin

export CFLAGS="-DANDROID -fPIC -ffunction-sections -funwind-tables -fstack-protector -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -fomit-frame-pointer -fstrict-aliasing -funswitch-loops -finline-limit=300"

export LDFLAGS="-Wl,--fix-cortex-a8"
export CC="arm-linux-androideabi-gcc --sysroot=$ANDROID_ROOT"
export CXX="arm-linux-androideabi-g++ --sysroot=$ANDROID_ROOT"

export PATH=$ANDROID_BIN:$PATH

./configure --host=arm-linux-androideabi  --with-sysroot="$ANDROID_ROOT"  --enable-static --prefix="/tmp"
make -j4
make install

тогда библиотека будет установлена ​​в каталог /tmp. Вы можете изменить это через --prefix выше.

https://github.com/guardianproject/android-ffmpeg

Выше проект для Android включает в себя x264. Если вы хорошо разбираетесь в подпроектах git, и если вы хорошо разбираетесь в NDK-построении с использованием кросс-инструментальной цепочки, следите за сборками.

Если нет, то вам нужно будет узнать о сборке ffmpeg на Linux (без Android) . затем изучите сборку NDK на Android, затем изучите git-подпроекты, затем соберите его.

Другие вопросы по тегам