在涉及对视频进行操作的场景,ffmpeg可以很好地满足一些需求,下面以arm64的Android系统为例,记录ffmpeg编译的实现。
一、下载源码
可以通过git的方式获取源码,这里直接从ffmpeg.org下载到4.3.1的tar包。
二、配置和编译
ffmpeg的编译方式跟其他unix*开源工具类似,先configure再make即可。但这里我们是要在mac上编译用于Android的二进制文件,所以需要使用交叉编译工具链。
1. 引用Android ndk编译,这里使用的是ndk r21版本,亲测可用
NDK=$ANDROID_NDK_HOME
2. 指定需要用到的toolchain和sysroot路径
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64 SYSROOT=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang # c compiler path CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ # c++ compiler path
3. 根据实际需求打开或关闭ffmpeg的feature,这些可以从configure中获得
./configure --enabe-* --disable-* make make install
4. 最后放出完整脚本
#!/bin/bash NDK=$ANDROID_NDK_HOME ARCH=aarch64 TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64 SYSROOT=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot ROOT_FOLDER=$PWD/.. OUTPUT=$ROOT_FOLDER/output/android/ffmpeg/arm64 CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang # c compiler path CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ # c++ compiler path ADDI_CFLAGS="-fPIE -pie -mfloat-abi=softfp -mfpu=neon" ADDI_LDFLAGS="-fPIE -pie" echo "sysroot:$SYSROOT" echo "output:$OUTPUT" echo "arch:$ARCH" echo "CC:$CC" echo "CXX:$CXX" ./configure --disable-shared --enable-static --disable-stripping --enable-debug --prefix=$OUTPUT --toolchain=clang-usan --enable-cross-compile --target-os=linux --arch=$ARCH --sysroot=$SYSROOT --cc=$CC --cxx=$CXX --cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- --extra-cflags="$ADDI_CFLAGS" --extra-ldflags="$ADDI_LDFLAGS" --extra-libs=-ldl --disable-avdevice --disable-ffplay --disable-network --disable-doc --disable-symver --disable-ffprobe --disable-opencl --enable-neon --enable-gpl --enable-pthreads --enable-encoder=aac --enable-encoder=gif --enable-encoder=mpeg4 --enable-encoder=yuv4 --enable-decoder=h264 --enable-bsf=h264_mp4toannexb --enable-bsf=hevc_mp4toannexb --enable-bsf=mpeg4_unpack_bframes rm -rf $OUTPUT make clean make -j9 make install