编译FFMPEG以获取命令行用法

时间:2014-09-02 12:15:40

标签: android android-ndk ffmpeg

我一直在尝试编译FFMPEG,因此我可以将它与我的Android应用程序一起使用命令。结果应该是1个静态文件“ffmpeg”,它不依赖于包。没有.so文件。

我设法用guardianProject编译它,一切正常,但源太旧,缺少我需要的选项。 我在VirtualBox上使用最新的Ubuntu,所有必需品都已安装和更新(gawk,yasm,aptitude等...)。

网络上有很多例子。以下是我尝试过的每个选项遇到的问题。我很感激以下任何一个错误的帮助:

  1. Guardian project - 我设法编译它并获取ffmpeg文件,但它使用的旧版本的ffmpeg不包含"-movFlags faststart"选项。我尝试在那里抛出新的ffmpeg(2.3.3),但它只是抛出错误。 (我运行了git submodule init并更新)

  2. JayH5 - 一个更通用的构建文件,基本上应该适用于每个ffmpeg。我更新了构建脚本以使用最新的NDK,它似乎正在工作,但它在/home/dor/Desktop/ndk/android-ndk-r10/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-pkg-config not found, library detection may fail.上失败了 我读到了这个,似乎需要一个黑客,我不明白如何实现。

  3. Trovao - 这是一个非常好的项目,构建脚本甚至可以下载最新的ffmpeg和x264源代码,我甚至成功将其编译为FFMPEG和X264文件但是当我使用它时,我得到这个错误:could not load library "libx264.so.142这很奇怪,因为x264就在那里,这个项目的全部想法是取消.so文件的需要。

  4. 我很感激帮助找出如何解决任何问题。我更喜欢使用JayH5构建脚本,因为它似乎是最直接的...

    JayH5构建文件:

    #!/bin/bash
    
    # set the base path to your Android NDK (or export NDK to environment)
    
    if [[ "x$NDK_BASE" == "x" ]]; then
        NDK_BASE=/opt/android-ndk
        echo "No NDK_BASE set, using $NDK_BASE"
    fi
    
    NDK_PLATFORM_VERSION=14
    NDK_ABI=arm
    NDK_COMPILER_VERSION=4.8
    NDK_SYSROOT=$NDK_BASE/platforms/android-$NDK_PLATFORM_VERSION/arch-$NDK_ABI
    NDK_UNAME=`uname -s | tr '[A-Z]' '[a-z]'` # Convert Linux -> linux
    HOST=$NDK_ABI-linux-androideabi
    NDK_TOOLCHAIN_BASE=$NDK_BASE/toolchains/$HOST-$NDK_COMPILER_VERSION/prebuilt/$NDK_UNAME-x86
    CC="$NDK_TOOLCHAIN_BASE/bin/$HOST-gcc --sysroot=$NDK_SYSROOT"
    LD=$NDK_TOOLCHAIN_BASE/bin/$HOST-ld
    
    BUILD_PATH=build/ffmpeg
    
    ./configure \
    $DEBUG_FLAG \
    --arch=arm \
    --target-os=linux \
    --enable-runtime-cpudetect \
    --enable-pic \
    --disable-shared \
    --enable-static \
    --cross-prefix=$NDK_TOOLCHAIN_BASE/bin/$NDK_ABI-linux-androideabi- \
    --sysroot="$NDK_SYSROOT" \
    --extra-cflags="-march=armv7-a -mfloat-abi=softfp -fPIC -DANDROID" \
    --extra-ldflags="" \
    --enable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-network \
    

1 个答案:

答案 0 :(得分:5)

在编译了那些无效的FFMPEG文件2天后,我终于成功了!

在上面的build.sh文件中,只需添加这4行和底部以避免prebuilt/linux-x86/bin/arm-linux-androideabi-pkg-config not found, library detection may fail错误。

添加到文件:

$ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install

过程完成后,请不要忘记chmod 775 ffmpeg文件。 真的希望这会对别人有所帮助!

如果你想要支持libX264的FFMPEG,请使用这个项目 - 非常完美。 https://github.com/hiteshsondhi88/ffmpeg-android/