windows11交叉编译ffmpeg的android版本库

目录

1、工具准备

(1)MSYS2

[(2)NDK(也可直接用android studio安装的)](#(2)NDK(也可直接用android studio安装的))

(3)ffmpeg源码

2、环境配置

3、创建编译脚本

4、编译


曾经看到一个博客说,不要用windows编译,很麻烦,容易出错,还担心windows有很多坑,然而参考了一些博客,发现用MSYS2编译好简单。我之前用ubuntu18.04没编成功(报一些工具找不到,安装又提示依赖不匹配,搞了一个晚上没成功,先放弃了,也可能是我镜像的问题。后面有时间重装系统试试),才换windows的。

1、工具准备

(1)MSYS2

MSYS2,该网页有安装教程,其实一路默认安装就行(安装成功默认会打开命令行窗口,此时千万先不要装任何东西,下面会说需要安装哪些组件)。

(2)NDK(也可直接用android studio安装的)

NDK 下载 | Android NDK | Android Developers,我是直接用android studio下载安装的(27.0.12077973),找到路径就行,一般在用户路径下。

(3)ffmpeg源码

Download FFmpeg,我是直接下载当前最新的(7.0.2),将压缩包解压到某个目录。

2、环境配置

这里主要需要配置MSYS2,看了一些博客,发现自己操作时并不成功,我是执行以下步骤就能安装成功了。

bash 复制代码
pacman -S gcc make nasm yasm diffutils

3、创建编译脚本(四个平台)

该编译脚本主要是调用ffmpeg的configure做编译前的配置,后期可以根据需要增删某些配置。注意,参考一些博客会报strip和nm找不到的问题,记得指定这两个选项(--strip、--nm)。

创建build_ffmpeg_android.sh(注意修改TOOLCHAIN的路径为自己NDK bin的路径):

bash 复制代码
#ndk工具链路径 -可配置
TOOLCHAIN=C:/Users/13658/AppData/Local/Android/Sdk/ndk/27.0.12077973/toolchains/llvm/prebuilt/windows-x86_64
#ndk api版本 -可配置
API=30
SYSROOT=$TOOLCHAIN/sysroot
function build_start() {
make clean
./configure --target-os=android \
--prefix=$PREFIX \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--strip=$TOOLCHAIN/bin/llvm-strip \
--nm=$TOOLCHAIN/bin/llvm-nm \
--enable-shared \
--disable-static \
--enable-gpl \
--cross-prefix=$CROSS_PREFIX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
make -j24
make install 
}
CPU=armv7-a
ARCH=arm
CROSS_PREFIX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-
CC=${CROSS_PREFIX}clang
CXX=${CROSS_PREFIX}clang++
PREFIX=./android/${API}/${CPU}/
OPTIMIZE_CFLAGS="-march=$CPU"
build_start
CPU=armv8-a
ARCH=arm64	
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android$API-
CC=${CROSS_PREFIX}clang
CXX=${CROSS_PREFIX}clang++
PREFIX=./android/${API}/${CPU}/
OPTIMIZE_CFLAGS="-march=$CPU"
build_start
CPU=i686
ARCH=x86
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android$API-
CC=${CROSS_PREFIX}clang
CXX=${CROSS_PREFIX}clang++
PREFIX=./android/${API}/${CPU}/
OPTIMIZE_CFLAGS="-march=i686"
ADDITIONAL_CONFIGURE_FLAG=--disable-asm 
build_start
CPU=x86-64
ARCH=x86_64
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android$API-
CC=${CROSS_PREFIX}clang
CXX=${CROSS_PREFIX}clang++
PREFIX=./android/${API}/${CPU}/
OPTIMIZE_CFLAGS="-march=$CPU"
ADDITIONAL_CONFIGURE_FLAG=
build_start

4、编译

打开MSYS2,执行:

bash 复制代码
./build_ffmpeg_android.sh

相关库及头文件都放在android目录下:

相关推荐
zhaoshuzhaoshu3 小时前
Android 系统启动与调试中的日志抓取方式全解析
android
雨声不在4 小时前
android 动画掉帧
android
在多学一点5 小时前
MYSQL第二次作业
android·数据库·mysql
骑着蜗牛撵大象3275 小时前
MySQL 8.0 迁移后 SQL 变慢:执行计划里 3 类被忽略的成本差异
android·数据库·sql·mysql·优化器·执行计划
我叫张土豆6 小时前
Android 14+ 模拟器抓包实录:把 Burp CA 装成系统 CA,让 targetSdk≥34 的 App 乖乖解密
android
booboosui9 小时前
Android 悬浮窗藏不住自己:一个标志位与 140 毫秒
android
传奇开心果9 小时前
【Flutter踩坑排雷】第5课:扩展方法冲突坑|同名扩展引发编译歧义,故障规避手段
android·flutter
.痞老板.12 小时前
mysql初阶--数据类型
android·数据库·mysql
StarsGreen12 小时前
Android 启动流程详解
android·linux·单片机·嵌入式硬件
booboosui1 天前
Android 上来电怎么判:7 个条件加 5 个中文词
android