最近一个项目用到ffmpeg,项目是部署在android上面,需要使用armeabi-v7a和arm64-v8a的库,特记录一下编译过程,找到一份优质的文章,由于他写的时间距离现在比较久了,很多库和版本都有点老了,脚本执行有问题,特此更新下,以做记录
一、下载ffmpeg代码
下载地址:Download FFmpeg
当前是8.1.1

1.1 修改configure配置
下载解压后,找到 configure文件

修改配置
把如下
SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'
替换为
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
如下所示 大概在4431,具体意思可以查询原文档(在windows10下编译android平台可用的ffmpeg3.3_windows ffmpeg3.3版本下载-CSDN博客)
1.2 编译脚本
添加编译android的脚本,具体如下,有几个目录需要自己修改:
NDK 修改为ndk的路径
FFMPEG_DIR 修改自己解压ffmpeg代码路径
#!/bin/bash
NDK="D:/ProgramData/Android/ndk/23.1.7779620"
FFMPEG_DIR="F:/code/c/ffmpeg-8.1.1/ffmpeg-8.1.1"
PREFIX_BASE="${FFMPEG_DIR}/build"
API=21
build_ffmpeg() {
local ARCH=$1
local ABI=$2
local TARGET=$3
local EXTRA_CFLAGS=$4
PREFIX="${PREFIX_BASE}/${ABI}"
TOOLCHAIN="${NDK}/toolchains/llvm/prebuilt/windows-x86_64"
SYSROOT="${TOOLCHAIN}/sysroot"
# 仅保留 FFmpeg 支持的工具链参数
AR="${TOOLCHAIN}/bin/llvm-ar"
RANLIB="${TOOLCHAIN}/bin/llvm-ranlib"
NM="${TOOLCHAIN}/bin/llvm-nm"
STRIP="${TOOLCHAIN}/bin/llvm-strip"
echo "===== 开始构建 ${ABI} ====="
./configure \
--prefix="$PREFIX" \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-cross-compile \
--target-os=android \
--arch="$ARCH" \
--sysroot="$SYSROOT" \
--cc="${TOOLCHAIN}/bin/${TARGET}${API}-clang" \
--cxx="${TOOLCHAIN}/bin/${TARGET}${API}-clang++" \
--ar="$AR" \
--ranlib="$RANLIB" \
--nm="$NM" \
--strip="$STRIP" \
--extra-cflags="-Os -fpic $EXTRA_CFLAGS -D__ANDROID_API__=$API" \
--extra-ldflags="-llog" \
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j$(getconf _NPROCESSORS_ONLN 2>/dev/null || echo 4)
make install
echo "===== ${ABI} 构建完成 ====="
}
# 构建 armeabi-v7a
build_ffmpeg \
arm \
"armeabi-v7a" \
"armv7a-linux-androideabi" \
"-march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=softfp"
# 构建 arm64-v8a
build_ffmpeg \
aarch64 \
"arm64-v8a" \
"aarch64-linux-android" \
""
二、安装 mingw
下载地址:https://sourceforge.net/projects/mingw/files/

点击下载,如果出不来那么多下刷新几次,下载有点慢
2.1 安装环境

这个需要等待,我也不知道等了多久,反正是晚上安装的,早上起来就好了
2.2 配置环境变量
由于我是安装在d盘,下面是我配置的环境变量,具体以自己的安装目录为主

三、编译
3.1 打开mingw
打开 MinGW\msys\1.0 下面的msys.bat
最好以管理员的方式运行

由于我的ffmpeg在f盘
cd f:
cd code/c/ffmpeg-8.1.1/ffmpeg-8.1.1

这样就进入到了ffmpeg的代码目录了
执行 ls

3.2 编译
执行编译命令
./build_android.sh
执行输出

他会自动执行,正常环境没问题,那么直接会在build 目录下生成arm64-v8a 和 armeabi-v7a
两个目录

下面包含了 include lib 和 share

这个lib库,可以用在你的android环境了

引用:在windows10下编译android平台可用的ffmpeg3.3
已经编译好的代码和库:https://download.csdn.net/download/p731heminyang/92987313