繁体   English   中英

如何使用x264和libfdk-aac为Android编译FFmpeg

[英]How to Compile FFmpeg with x264 and libfdk-aac for Android

大家。

请理解我使用错误的英语。

我想使用FFmpeg制作编码应用程序。

我用FFmpeg成功构建了NDK。

然而,编码H.264视频已经失败(Codec not found ..)。

我了解到libx264需要编码H.264而libfdk-aac需要编码AAC。

所以我试着构建libx264和libfdk-aac,但是不容易交叉编译。

请告诉我我做错了什么。

操作系统:ubuntu 13.10 64位

NDK:android-ndk-r9

FFmpeg:ffmpeg-2.0.2

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

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'时,显示错误。

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。

我想借用你的智慧。 请告诉我如何为Android设置'ffmpeg + x264 + fdk-aac'。

谢谢.. :-)

我知道已经晚了。 我刚遇到这个问题,我找到了你的问题。 我已经解决了这个问题,如下所示。 我希望有些人可以通过Google搜索来找到你的问题。 这是如何为android编译fdk-aac的。 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更改它。

你可以尝试/ fork / clone我的库。 它已经编译了x264和libfdk-aac。 您可以使用任何版本的gcc工具链(如4.9)并支持最新的Android平台(21)。

您可以从运行2-3个脚本的repo轻松构建ffmpeg(2.6或最新版本)。

很难解释如何编译这两个,但你可以检查build_android.sh脚本,该脚本为所有体系结构编译x264和libfdk-aac。

您可以阅读bash函数build_aacbuild_x264以了解它是如何交叉编译的。

REPOhttps//github.com/matthewn4444/VPlayer_lib

说明https//github.com/matthewn4444/VPlayer_lib/wiki/Compiling-FFmpeg

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

上面的android项目包括x264。 如果您对git子项目有好处,并且如果您对交叉工具链NDK构建很好,那么应该很容易遵循构建。

如果你不是那么你将需要了解在linux上构建ffmpeg(没有android)。 然后在android上学习NDK构建,然后学习git子项目,然后构建它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM