记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

相关推荐
码农coding9 小时前
android12 SystemUI之StatusBar(二)
android
Lesile11 小时前
Interview#1 历史演进:MVC · MVP · MVVM · MVI架构详解
android·android jetpack
杉氧11 小时前
Flutter 像素级还原实战:用 CustomPaint 与 Bezier 曲线手绘精致图针
android·前端·flutter
我命由我1234514 小时前
Android 在构建过程中,发现有两个依赖库都包含了相同路径的资源文件
android·java·开发语言·java-ee·kotlin·android-studio·android runtime
Coffeeee15 小时前
谷歌的一个优化建议,让我重新学了一遍Android里面如何正确处理位图
android·google·kotlin
冰暮流星15 小时前
mysql之新建表及对表的查询
android·数据库·mysql
用户20187928316715 小时前
彻底搞懂LayoutInflater、ViewInflater与textViewStyle优先级:XML属性为何能覆盖全局样式?
android
达达尼昂15 小时前
AI Native 工程实践:如何为 Claude 5 设计更有效的上下文
android·人工智能·后端
Cry丶16 小时前
【已解决】adb devices 能识别手机,但 HBuilderX 搜索不到设备的避坑指南
android·adb·uni-app·hbuilderx·真机调试
墨神谕17 小时前
认识一下Unicode(统一码)
android·java·数据库