Windows编译FFmpeg Android (2023-4-
2023-04-28 本文已影响0人
Mixqum
编译要求
- MSYS2 模拟Linux环境编译FFmpeg
- NDK 编译工具ndk r22b,目前最新ndk 25编译报错
- FFmpeg 4.2.9 源码
1. 下载MSYS2 Download msys2
![](https://img.haomeiwen.com/i1992772/d3a446662325e895.png)
1.1 安装完成,打开mingw64.exe
![](https://img.haomeiwen.com/i1992772/c506992a8206ed93.png)
1.2更新msys2核心组件包
$ pacman -Syu
![](https://img.haomeiwen.com/i1992772/278063497bf3935c.png)
安装过程会提示关闭msys2,重新打开继续更新
$ pacman -Su
![](https://img.haomeiwen.com/i1992772/3ad5412ddb5fa9b0.png)
安装make,autoconf等工具
$ pacman -S base-devel
![](https://img.haomeiwen.com/i1992772/1df72052b6973ca1.png)
确认make是否安装成功
$ make --version
![](https://img.haomeiwen.com/i1992772/0057f595df9f3822.png)
3. 安装NDK Download NDK
目前最新版本 android-ndk-r25c编译报错,改用r22 Download NDK r22b
![](https://img.haomeiwen.com/i1992772/f41e957e6397c294.png)
也可以通过AS下载
![](https://img.haomeiwen.com/i1992772/6a5b53fa6ded3f4a.png)
下载目录:C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/22.1.7171670
4.下载FFmpeg源码Download FFmpeg
本文下载4.2.9版本
![](https://img.haomeiwen.com/i1992772/9f155a49e7dc894b.png)
解压源码目录如下:
![](https://img.haomeiwen.com/i1992772/55d061d4c91df2a8.png)
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
![](https://img.haomeiwen.com/i1992772/9a2da1374e784d33.png)
6.开始编译
打开MSYS64 cd进入FFmpeg源码目录
$ cd F:/msys64/home/userName/ffmpeg-4.2.9
执行脚本开始编译
$ ./build_android.sh
编译成功
![](https://img.haomeiwen.com/i1992772/4449424c2ceb01d3.png)
ffmpeg-4.2.9_build_out目录,多出了arm64-v8a文件夹
include是头文件目录
lib目录生成了Android用到的so 动态库
![](https://img.haomeiwen.com/i1992772/84ff7eda17b4b8e4.png)
编译报错汇总
![](https://img.haomeiwen.com/i1992772/c72de1287bc5c0f6.png)
确认编译版本是否正确:
- FFmpeg版本 4.2.9
- ndk版本 22.1.7171670
- MSYS2确认 make已安装