记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

相关推荐
启雀AI13 小时前
培训平台移动端离线学习方案设计与实现:视频缓存、断点续传与进度同步的工程实践
android·学习·缓存·音视频·企业lms
我命由我1234514 小时前
RxJava - 冷数据流与热数据流
android·java·java-ee·android studio·rxjava·android-studio·android runtime
2601_9665635216 小时前
愤怒的小鸟单机版 去广告 安卓+PC端离线纯净版 益智耐玩小游戏 不需联网 老旧手机都可以玩 怀旧手机小游戏
android·智能手机
hunterandroid16 小时前
[Android 从零到一] Retrofit 请求取消与生命周期绑定:从 Call.cancel 到协程可取消设计
android
爱跑马的程序员17 小时前
安卓专有的通信子系统-Binder IPC
android·binder·ipc·安卓间通信机制
ue星空17 小时前
【安卓逆向】为什么用Frida?
android
小驰行动派18 小时前
Camx架构全景图:从V4L2到Pipeline的完整拆解
android·camera·android camera
hunterandroid18 小时前
[Android 从零到一] Custom View 触摸反馈与手势冲突解决
android
coderSong256819 小时前
Android | 四大组件之 BroadcastReceiver(广播接收器)
android
爱笑鱼1 天前
Android 系统启动机制(二):init.rc 不是普通脚本,service、action 和 property 怎样驱动启动?
android