1. 准备
    平台:64位 Ubuntu 16
    源码: ffmpeg-4.1.3.tar.bz2 (https://ffmpeg.org/releases/)
    交叉编译器:android-ndk-r17c-linux-x86_64.zip (https://dl.google.com/android/repository/android-ndk-r17c-linux-x86_64.zip )

    注意:源码与交叉编译器需要配套,否者会编译失败。这里选的版本是通过编译的版本。

  2. 解压文件
    创建 ffmpeg 目录

mkdir ~/ffmpeg
解压 ffmpeg-4.1.3.tar.bz2 
tar xvf ffmpeg-4.1.3.tar.bz2 -C ~/ffmpeg/
解压 android-ndk-r17c-linux-x86_64.zip 
 unzip android-ndk-r17c-linux-x86_64.zip -d ~/ffmpeg/
解压结果

在这里插入图片描述
进入 ffmpeg-4.1.3/

cd ffmpeg-4.1.3/
  1. 编写编译脚本
    注意:NDK_HOME修改成android-ndk-r17c的路径
#!/usr/bin/env bashNDK_HOME=~/ffmpeg/android-ndk-r17cPREFIX=android-buildHOST_PLATFORM=linux-x86_64PLATFORM=android-18PLATFORM_64=android-21CONFIG_LOG_PATH=${     PREFIX}/logCOMMON_OPTIONS=CONFIGURATION=build(){         APP_ABI=$1    echo "======== > Start build $APP_ABI"    case ${     APP_ABI} in    armeabi )        ARCH="arm"        CPU="armv6"        MARCH="armv6"        TOOLCHAINS="$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/$HOST_PLATFORM"        CROSS_PREFIX="$TOOLCHAINS/bin/arm-linux-androideabi-"        SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-arm"        EXTRA_CFLAGS="-march=$MARCH"        EXTRA_CFLAGS="$EXTRA_CFLAGS -mfloat-abi=softfp -mfpu=vfp"        EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK_HOME/sysroot/usr/include/arm-linux-androideabi"        EXTRA_CFLAGS="$EXTRA_CFLAGS -isysroot $NDK_HOME/sysroot"        EXTRA_LDFLAGS="-lc -lm -ldl -llog"        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib"        EXTRA_OPTIONS="--disable-x86asm"    ;;    armeabi-v7a )        ARCH="arm"        CPU="armv7-a"        MARCH="armv7-a"        TOOLCHAINS="$NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/$HOST_PLATFORM"        CROSS_PREFIX="$TOOLCHAINS/bin/arm-linux-androideabi-"        SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-arm"        EXTRA_CFLAGS="-march=$MARCH"        EXTRA_CFLAGS="$EXTRA_CFLAGS -mfloat-abi=softfp -mfpu=vfpv3-d16"        EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK_HOME/sysroot/usr/include/arm-linux-androideabi"        EXTRA_CFLAGS="$EXTRA_CFLAGS -isysroot $NDK_HOME/sysroot"        EXTRA_LDFLAGS="-lc -lm -ldl -llog"        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,--fix-cortex-a8"        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib"        EXTRA_OPTIONS="--enable-neon --disable-x86asm"    ;;    arm64-v8a )        ARCH="aarch64"        CPU="armv8-a"        MARCH="armv8-a"        TOOLCHAINS="$NDK_HOME/toolchains/aarch64-linux-android-4.9/prebuilt/$HOST_PLATFORM"        CROSS_PREFIX="$TOOLCHAINS/bin/aarch64-linux-android-"        SYSROOT="$NDK_HOME/platforms/$PLATFORM_64/arch-arm64"        EXTRA_CFLAGS="-march=$MARCH"        EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK_HOME/sysroot/usr/include/aarch64-linux-android"        EXTRA_CFLAGS="$EXTRA_CFLAGS -isysroot $NDK_HOME/sysroot"        EXTRA_LDFLAGS="-lc -lm -ldl -llog"        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib"        EXTRA_OPTIONS="--enable-neon --disable-x86asm"    ;;    x86 )        ARCH="x86"        CPU="i686"        MARCH="i686"        TOOLCHAINS="$NDK_HOME/toolchains/x86-4.9/prebuilt/$HOST_PLATFORM"        CROSS_PREFIX="$TOOLCHAINS/bin/i686-linux-android-"        SYSROOT="$NDK_HOME/platforms/$PLATFORM/arch-x86"        EXTRA_CFLAGS="-march=$MARCH"        EXTRA_CFLAGS="$EXTRA_CFLAGS -mtune=intel -mssse3 -mfpmath=sse -m32"        EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK_HOME/sysroot/usr/include/i686-linux-android"        EXTRA_CFLAGS="$EXTRA_CFLAGS -isysroot $NDK_HOME/sysroot"        EXTRA_LDFLAGS="-lc -lm -ldl -llog"        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib"        EXTRA_OPTIONS="--disable-asm"    ;;    x86_64 )        ARCH="x86_64"        CPU="x86_64"        MARCH="x86-64"        TOOLCHAINS="$NDK_HOME/toolchains/x86_64-4.9/prebuilt/$HOST_PLATFORM"        CROSS_PREFIX="$TOOLCHAINS/bin/x86_64-linux-android-"        SYSROOT="$NDK_HOME/platforms/$PLATFORM_64/arch-x86_64"        EXTRA_CFLAGS="-march=$MARCH"        EXTRA_CFLAGS="$EXTRA_CFLAGS -mtune=intel -msse4.2 -mpopcnt -m64"        EXTRA_CFLAGS="$EXTRA_CFLAGS -I$NDK_HOME/sysroot/usr/include/x86_64-linux-android"        EXTRA_CFLAGS="$EXTRA_CFLAGS -isysroot $NDK_HOME/sysroot"        EXTRA_LDFLAGS="-lc -lm -ldl -llog"        EXTRA_LDFLAGS="$EXTRA_LDFLAGS -Wl,-rpath-link=$SYSROOT/usr/lib64 -L$SYSROOT/usr/lib64"        EXTRA_OPTIONS="--disable-asm"    ;;    esac    echo "-------- > Start clean workspace"    make clean    echo "-------- > Start build configuration"    CONFIGURATION="$COMMON_OPTIONS"    CONFIGURATION="$CONFIGURATION --logfile=$CONFIG_LOG_PATH/config_$APP_ABI.log"    CONFIGURATION="$CONFIGURATION --prefix=$PREFIX"    CONFIGURATION="$CONFIGURATION --libdir=$PREFIX/libs/$APP_ABI"    CONFIGURATION="$CONFIGURATION --incdir=$PREFIX/includes/$APP_ABI"    CONFIGURATION="$CONFIGURATION --pkgconfigdir=$PREFIX/pkgconfig/$APP_ABI"    CONFIGURATION="$CONFIGURATION --arch=$ARCH"    CONFIGURATION="$CONFIGURATION --cpu=$CPU"    CONFIGURATION="$CONFIGURATION --cross-prefix=$CROSS_PREFIX"    CONFIGURATION="$CONFIGURATION --sysroot=$SYSROOT"    CONFIGURATION="$CONFIGURATION --extra-ldexeflags=-pie"    CONFIGURATION="$CONFIGURATION $EXTRA_OPTIONS"    echo "-------- > Start config makefile with $CONFIGURATION --extra-cflags="${     EXTRA_CFLAGS}" --extra-ldflags="${     EXTRA_LDFLAGS}""    ./configure ${     CONFIGURATION} \        --extra-cflags="$EXTRA_CFLAGS" \        --extra-ldflags="$EXTRA_LDFLAGS"    echo "-------- > Start make $APP_ABI with -j8"    make j8    echo "-------- > Start install $APP_ABI"    make install    echo "++++++++ > make and install $APP_ABI complete."}build_all(){         COMMON_OPTIONS="$COMMON_OPTIONS --target-os=android"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-static"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-shared"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-protocols"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-cross-compile"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-optimizations"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-debug"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-small"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-doc"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-programs"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-ffmpeg"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-ffplay"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-ffprobe"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-symver"    COMMON_OPTIONS="$COMMON_OPTIONS --disable-network"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-pthreads"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-mediacodec"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-jni"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-zlib"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-pic"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-avresample"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=h264"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mpeg4"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=mjpeg"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=png"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=vorbis"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=opus"    COMMON_OPTIONS="$COMMON_OPTIONS --enable-decoder=flac"    echo "COMMON_OPTIONS=$COMMON_OPTIONS"    echo "PREFIX=$PREFIX"    echo "CONFIG_LOG_PATH=$CONFIG_LOG_PATH"    mkdir -p ${     CONFIG_LOG_PATH}#    build $app_abi     build "armeabi"     build "armeabi-v7a"     build "arm64-v8a"     build "x86"     build "x86_64"}echo "-------- Start --------"build_allecho "-------- End --------"
  1. 编译
 chmod a+x build.sh  ./build.sh 

在这里插入图片描述
5. 编译结果
编译输出库文件目录

ffmpeg-4.1.3/android-build/libs

更多相关文章

  1. 版本更新简要
  2. Android Gallery3d源码学习总结(一)——绘制流程drawFocusItems
  3. Android 编程获取手机型号,本机电话号码,sdk版本及firmware版本号(
  4. Android Retrofit源码解析
  5. Android系统源码framework SystemUI导入eclipse编译
  6. android源码下载时,repo下载不成功的问题
  7. Android系统应用程序安装过程源码分析
  8. 分享45个android实例源码,很好很强大
  9. Android进阶之android应用的SDK版本之间的切换

随机推荐

  1. fiddle android
  2. ****** 如何使Android应用程序获取系统权
  3. 面试总结(6):ScheduledExecutorService的使
  4. Services的生命周期
  5. 手把手教你如何在Android(安卓)Studio 中
  6. repo超时
  7. RxJava 学习笔记(四)
  8. Android(安卓)开发笔记4-- 常用控件
  9. unity3d深入学习笔记6:发布Android(安卓)a
  10. Android(安卓)学习书单