Mac 平台 FFmpeg4.2.1 交叉编译 —— Android

2,835 阅读1分钟

FFmpeg4.2.1 已是目前最新的版本,下载地址如下:

FFmpeg 下载地址

交叉编译

本文基于 ndk-r17 版本进行编译的 点击此处下载。本文的交叉编译工具链使用 ndk-r17 提供的独立工具链脚本生成,如果你还不知道怎样生成自己的工具链,请 点击此处参考

Mac 平台的编译脚本

# 独立工具链路径, 根据 xx/android-ndk-r17c/build/tools/make_standalone_toolchain.py 生成
TOOLCHAIN=/Users/xxx/standalone-toolchain/armv7a-standalone-toolchain

export PATH=$PATH:$TOOLCHAIN/bin

# armeabi 架构, 32 位平台。如果需要编译 64 位平台需要更换为 aarch64-linux-android
target_host=arm-linux-androideabi
export AR=$target_host-ar
export AS=$taret_host-clang
export CC=$target_host-clang++
export LD=$target_host-ld
export STRIP=$target_host-strip


# 安装路径
PREFIX=./android1/armeabi-v7a

# 编译目标平台版本
ANDROID_API=21

./configure \
--prefix=$PREFIX \
--enable-small \
--disable-programs \
--disable-avdevice \
--disable-encoders \
--disable-muxers \
--disable-filters \
--enable-cross-compile \
--cross-prefix=$target_host- \
--disable-shared \
--enable-static \
--sysroot=$TOOLCHAIN/sysroot \
--extra-cflags="-isysroot $TOOLCHAIN/sysroot -isystem $NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=$ANDROID_API -U_FILE_OFFSET_BITS" \
--arch=arm \
--target-os=android

make clean
make -j4
make install

参数说明:

  • --disable-programs: 关闭命令行工具,在 Android 平台无需使用
  • --disable-avdevice: Android 平台不关心
  • --disable-muxers: 因为笔者后面的例子实现一个简单的播放器,暂时不需要用到,这个用于生成封装格式,例如 MP4,FLV
  • --disable-filters: 笔者暂不使用到滤镜相关
  • --disable-small: 启动优化
  • --prefix: 静态库/动态库文件存放目录
  • --enable-cross-compile: 开启交叉编译
  • --extra-cflags: 交叉编译器需要的参数
  • --arch: 指定平台为 arm, 一般移动手机的 CPU 都是 arm
  • --target-os: 指定平台为 android
  • --disable-shared: 关闭动态库,静态库和动态库需要打开一个, 例如: --disable-shared \ --enable-static

使用我编译好的,点击此处

更多的命令参考 configure 帮助命令,你可以将其重定向到文本文件中, 便于查看。

./configure --help >> configure_help.txt