记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

相关推荐
wupa6 分钟前
在 enableEdgeToEdge 模式下处理软键盘与自定义面板协同
android
plainGeekDev2 小时前
ProGuard → R8
android·java·kotlin
雨白3 小时前
C 语言字符串:从字符数组、指针到核心操作实战
android
Java小白笔记3 小时前
MySQL中存储过程大表分批删除历史数据
android·mysql·adb
aidou13144 小时前
Kotlin中沉浸式状态栏显示布局
android·kotlin·windowmanager·沉浸式状态栏·insetslistener·insetscompat·systembars
luoyayun3614 小时前
Qt + FFmpeg 音频工具:重采样实现
qt·ffmpeg·重采样
我命由我123454 小时前
Android 构建项目问题:XML 片段出错,com.ctc.wstx.exc.WstxUnexpectedCharException
android·xml·android studio·android jetpack·android-studio·android runtime
阿pin5 小时前
Android随笔-pipe是什么?
android·linux·pipe
帅次5 小时前
Android 高级工程师面试:Flow 与状态流 近1年高频追问 22 题
android·面试·职场和发展
雨季余静5 小时前
RustDesk Android APK 从零编译全步骤
android