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

标签 android android-ndk ffmpeg aac x264

每个人。

请理解我用错了英文。

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

我使用 FFmpeg 成功构建了 NDK。

但是,对制作的 H.264 视频进行编码失败(找不到编解码器..)。

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

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

请告诉我我哪里做错了。

我的开发环境

OS : ubuntu 13.10 64bit

NDK : android-ndk-r9

FFmpeg : ffmpeg-2.0.2

x264 构建: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_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..

我想借你智慧。请告诉我如何为 android 构建“ffmpeg+x264+fdk-aac”。

谢谢..:-)

最佳答案

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

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

很难解释如何编译两者,但您可以查看 build_android.sh为所有架构编译 x264 和 libfdk-aac 的脚本。

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

repo :https://github.com/matthewn4444/VPlayer_lib

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

关于android - 如何使用 x264 和 libfdk-aac 为 Android 编译 FFmpeg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21471444/

相关文章:

android - 找不到方法compile()

android - 将 vector<string> 从 C++ 返回到 Java

Android NDK : Multiple definition of . o 和 .c 文件

android - 在视频中添加叠加层导出为 android 中的视频

php - ffmpeg 从视频错误中获取图像或缩略图

java - TabLayout - 指示器动画延迟

android - Gallery 内的 ScrollView,两者独立滚动

java - 如何在java中根据国家代码获取语言代码

android - glDrawArrays 在 vm 中工作,在手机上崩溃

hadoop - ffmpeg直接输出到HDFS