下载ffmpeg源码、编译生成安卓项目可使用的so库

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库的生成

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容