编译要求
- MSYS2 模拟Linux环境编译FFmpeg
- NDK 编译工具ndk r22b,目前最新ndk 25编译报错
- FFmpeg 4.2.9 源码
1. 下载MSYS2 Download msys2
1.1 安装完成,打开mingw64.exe
1.2更新msys2核心组件包
$ pacman -Syu
安装过程会提示关闭msys2,重新打开继续更新
$ pacman -Su
安装make,autoconf等工具
$ pacman -S base-devel
确认make是否安装成功
$ make --version
3. 安装NDK Download NDK
目前最新版本 android-ndk-r25c编译报错,改用r22 Download NDK r22b
也可以通过AS下载
下载目录:C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/22.1.7171670
4.下载FFmpeg源码Download FFmpeg
本文下载4.2.9版本
解压源码目录如下:
5.创建build_android.sh,编写ffmpeg编译脚本,放到FFmepg源码目录
本文选择 CPU 架构 arm64-v8a,Android版本 29
#!/bin/bash
set -e
#编译输出路径
DST_DIR=F:/msys64/home/userName/ffmpeg-4.2.9_build_out
#NDK,使用ndk 22.1.7171670,由于ndk25编译失败
NDK=C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/22.1.7171670/toolchains/llvm/prebuilt/windows-x86_64
API=29
function build_onearch
{
echo ">> configure $CPU"
./configure --enable-cross-compile --target-os=android \
--prefix=$DST_DIR/$ANDROID_ABI --cross-prefix=$CROSS_PREFIX \
--cc=$CLANG_PREFIX --cxx=$CLANG_PREFIX++ \
--arch=$ARCH --cpu=$CPU --sysroot=$NDK/sysroot \
--enable-shared --disable-static \
--enable-small --disable-programs --disable-doc \
--enable-asm --enable-neon \
--enable-jni --enable-mediacodec
echo "<< configure $CPU"
make clean
make
make install
}
#编arm64-v8a动态库
ANDROID_ABI=arm64-v8a
ARCH=arm64
CPU=armv8-a
CROSS_PREFIX=$NDK/bin/aarch64-linux-android-
CLANG_PREFIX=$NDK/bin/aarch64-linux-android$API-clang
build_onearch
#编armeabi-v7a动态库
#ANDROID_ABI=armeabi-v7a
#ARCH=arm
#CPU=armv7-a
#交叉编译工具的前缀
#CROSS_PREFIX=$NDK/bin/arm-linux-androideabi-
#CLANG_PREFIX=$NDK/bin/armv7a-linux-androideabi$API-clang
#build_onearch
6.开始编译
打开MSYS64 cd进入FFmpeg源码目录
$ cd F:/msys64/home/userName/ffmpeg-4.2.9
执行脚本开始编译
$ ./build_android.sh
编译成功
ffmpeg-4.2.9_build_out目录,多出了arm64-v8a文件夹
include是头文件目录
lib目录生成了Android用到的so 动态库
编译报错汇总
确认编译版本是否正确:
- FFmpeg版本 4.2.9
- ndk版本 22.1.7171670
- MSYS2确认 make已安装