记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

相关推荐
警醒与鞭策5 小时前
【无标题】
android·unity·性能优化·游戏引擎·perforce
allnlei5 小时前
Opus In-Band FEC 详解:原理、实现与开源方案
ffmpeg·音视频·gstreamer
传奇开心果编程7 小时前
【Jetpack Compose进阶学与练】第14课:系列收尾复习总结;Compose项目常见坑点汇总;学习路线与后续学习方向
android·学习·ui·kotlin·android jetpack
李游Leo9 小时前
《HarmonyOS 7 精准碰一碰跨设备协作开发实战》07:异常恢复、状态机与CrossDrop工程收尾【鸿蒙心迹】
android·harmonyos
方白羽12 小时前
Android APK安全防护
android·安全·apk
小黄人软件12 小时前
AndroidStudio老项目 macOS运行BlueTooth蓝牙串口助手(Android+Studio源码).rar
android·macos
00后程序员张12 小时前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview
天神哥哥啊12 小时前
cocos联调注意事项-安卓
android
TDengine (老段)12 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
蓝速科技13 小时前
政务自助终端信创选型与无人值守落地方案
android·大数据·数据库·人工智能·科技·技术分享·政务