记ffmpeg-8.1.1 之Android库编译(window)

最近一个项目用到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

相关推荐
一笑的小酒馆14 小时前
AndroidKMP之网络请求
android
aqi0017 小时前
鸿蒙版本的JSBridge兼容与安卓配套的H5啦
android·华为·harmonyos·鸿蒙·移动应用
事圆则缓18 小时前
MVVM 的理解与设计
android·android jetpack
码农阿豪19 小时前
我把 OpenClaw 装进旧安卓手机后,又折腾了 3 天:飞书、ADB、SSH 全部打通
android·智能手机·飞书
有什么事20 小时前
把安卓搬上云端:云手机系统改造与内核优化拆解
android·智能手机
方白羽20 小时前
性能分析:Android Studio Profiler
android·性能优化·app
没文化的阿浩21 小时前
【MySQL】用户管理
android·mysql·adb
FlightYe1 天前
音视频修炼之基础理论(五):AAC格式与解析
android·linux·c++·音视频·aac
法欧特斯卡雷特1 天前
Kotlin 2.4.20 现已发布,新特性多不多?
android·开源·全栈
摇滚侠1 天前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记