Ubuntu编译ffmpeg4.1.3
16lz
2021-01-23
-
准备
平台: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 )注意:源码与交叉编译器需要配套,否者会编译失败。这里选的版本是通过编译的版本。
-
解压文件
创建 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/
- 编写编译脚本
注意: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 --------"
- 编译
chmod a+x build.sh ./build.sh
5. 编译结果
编译输出库文件目录
ffmpeg-4.1.3/android-build/libs
更多相关文章
- 版本更新简要
- Android Gallery3d源码学习总结(一)——绘制流程drawFocusItems
- Android 编程获取手机型号,本机电话号码,sdk版本及firmware版本号(
- Android Retrofit源码解析
- Android系统源码framework SystemUI导入eclipse编译
- android源码下载时,repo下载不成功的问题
- Android系统应用程序安装过程源码分析
- 分享45个android实例源码,很好很强大
- Android进阶之android应用的SDK版本之间的切换