1、到ffmpeg官网下载ffmeg源码,下载后解压ffmpeg源码
2、生成编译脚本,创建文件build_ffmpeg_android.sh。
在mac电脑运行的脚本
在文件中添加以下内容:
#!/bin/bash
# 用于在macOS下,自动交叉编译FFmpeg为Android so库
# 使用方法:
# 1. 修改下面的变量(如FFmpeg路径、NDK路径、架构等)
# 2. 赋予此脚本执行权限:chmod +x build_ffmpeg_android.sh
# 3. 运行:./build_ffmpeg_android.sh
###################### 配置区 ########################
# FFmpeg源码路径
FFMPEG_SOURCE="/Users/xrh/Downloads/ffmpeg-8.0"
# Android NDK路径
ANDROID_NDK="$HOME/Library/Android/sdk/ndk/28.0.12433566"
# 架构: arm64-v8a/armeabi-v7a/x86/x86_64
ABI="arm64-v8a"
# Android API版本
API=21
###################### 脚本区 ########################
if [ ! -d "$FFMPEG_SOURCE" ]; then
echo "FFmpeg 源码路径不存在! ($FFMPEG_SOURCE)"
exit 1
fi
if [ ! -d "$ANDROID_NDK" ]; then
echo "Android NDK 路径不存在! ($ANDROID_NDK)"
exit 1
fi
cd "$FFMPEG_SOURCE" || exit 1
TOOLCHAIN="$ANDROID_NDK/toolchains/llvm/prebuilt/darwin-x86_64"
case "$ABI" in
arm64-v8a)
ARCH="aarch64"
TARGET="aarch64-linux-android"
CPU="armv8-a"
CC="$TOOLCHAIN/bin/${TARGET}${API}-clang"
CXX="$TOOLCHAIN/bin/${TARGET}${API}-clang++"
;;
armeabi-v7a)
ARCH="arm"
TARGET="armv7a-linux-androideabi"
CPU="armv7-a"
CC="$TOOLCHAIN/bin/${TARGET}${API}-clang"
CXX="$TOOLCHAIN/bin/${TARGET}${API}-clang++"
;;
x86)
ARCH="x86"
TARGET="i686-linux-android"
CPU="i686"
CC="$TOOLCHAIN/bin/${TARGET}${API}-clang"
CXX="$TOOLCHAIN/bin/${TARGET}${API}-clang++"
;;
x86_64)
ARCH="x86_64"
TARGET="x86_64-linux-android"
CPU="x86-64"
CC="$TOOLCHAIN/bin/${TARGET}${API}-clang"
CXX="$TOOLCHAIN/bin/${TARGET}${API}-clang++"
;;
*)
echo "不支持的ABI: $ABI"
exit 1
;;
esac
AR="$TOOLCHAIN/bin/llvm-ar"
AS="$CC"
NM="$TOOLCHAIN/bin/llvm-nm"
STRIP="$TOOLCHAIN/bin/llvm-strip"
SYSROOT="$TOOLCHAIN/sysroot"
PREFIX="$FFMPEG_SOURCE/android/${ABI}"
mkdir -p "$PREFIX"
# 清理旧文件
make distclean 2>/dev/null
echo "---------------- 配置信息 ---------------"
echo "FFmpeg源码: $FFMPEG_SOURCE"
echo "NDK: $ANDROID_NDK"
echo "构建ABI: $ABI"
echo "安装路径: $PREFIX"
echo "-----------------------------------------"
./configure \
--prefix="$PREFIX" \
--disable-static \
--enable-shared \
--disable-doc \
--disable-programs \
--disable-symver \
--enable-cross-compile \
--cross-prefix="$TOOLCHAIN/bin/${TARGET}-" \
--target-os=android \
--arch="$ARCH" \
--cpu="$CPU" \
--cc="$CC" \
--cxx="$CXX" \
--ar="$AR" \
--nm="$NM" \
--strip="$STRIP" \
--sysroot="$SYSROOT" \
--extra-cflags="-Os -fpic" \
--extra-ldflags=""
if [ $? -ne 0 ]; then
echo "配置失败,请检查参数与依赖。"
exit 1
fi
make -j$(sysctl -n hw.logicalcpu)
if [ $? -ne 0 ]; then
echo "make失败"
exit 2
fi
make install
if [ $? -ne 0 ]; then
echo "make install失败"
exit 3
fi
echo "完成!so文件请在 $PREFIX/lib 内查找。"
3、运行脚本,等待so库的生成