macos环境下FFmpeg打包成.so文件

FFmpeg打包成.so文件

简介

FFmpeg 编译并打包成 Android 可直接使用的 .so 动态库,这是Android音视频开发的核心步骤。我们现在通过在macos环境下编译一个.so文件,以下是完整的流程。

前置条件

  1. NDK 准备:例如版本 28.0.12433566
  2. FFmpeg 源码 (可根据此文章进行配置

打包步骤

步骤一:创建脚本文件

在 ~/ffmpeg目录下创建 build_android.sh,这是生成 .so 的核心脚本

python 复制代码
#!/bin/bash

export ANDROID_NDK_ROOT=~/Library/Android/sdk/ndk/28.0.12433566 # 设置 Android NDK 路径
export TOOLCHAIN=$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/darwin-x86_64
export API=21 # 最低兼容安卓版本
export TARGET=aarch64-linux-android

# 设置编译工具
export CC=$TOOLCHAIN/bin/$TARGET$API-clang
export CXX=$TOOLCHAIN/bin/$TARGET$API-clang++
export AR=$TOOLCHAIN/bin/llvm-ar
export STRIP=$TOOLCHAIN/bin/llvm-strip
export RANLIB=$TOOLCHAIN/bin/llvm-ranlib

# 清理之前的配置和编译结果
echo "清理之前的编译结果..."
make distclean 2>/dev/null || true
rm -f config.h config.mak ffbuild/config.mak
rm -rf ./android/arm64-v8a

echo "开始配置 FFmpeg..."
# 配置 FFmpeg
./configure \
  --prefix=./android/arm64-v8a \  
  --target-os=android \          
  --arch=aarch64 \                
  --cpu=armv8-a \				 
  --cc=$CC \                     
  --cxx=$CXX \                   
  --ar=$AR \                    
  --strip=$STRIP \
  --ranlib=$RANLIB \
  --enable-cross-compile \
  --enable-shared \
  --disable-static \
  --disable-programs \
  --disable-doc \
  --disable-symver \
  --enable-small \
  --disable-asm

if [ $? -eq 0 ]; then
    echo "配置成功,开始编译..."
    make -j8
    if [ $? -eq 0 ]; then
        echo "编译成功,开始安装..."x
        make install
        echo "编译完成!共享库文件位于 ./android/arm64-v8a/lib/ 目录"
        ls -la ./android/arm64-v8a/lib/
        echo ""
        echo "文件大小统计:"
        du -sh ./android/arm64-v8a/lib/*.so
    else
        echo "编译失败"
        exit 1
    fi
else
    echo "配置失败"
    exit 1
fi

步骤 2:执行脚本编译 + 打包

bash 复制代码
# 1. 给脚本添加执行权限
chmod +x build_android.sh

# 2. 执行脚本(M芯片若报错,先执行 arch -x86_64 zsh 再运行)
./build_android.sh

验证

打包完成后,会出现一个"android"的文件夹。我们可以进入arm64-v8中(可以在脚本文件自定义文件名),以下是 Android 可直接使用的结构:

xml 复制代码
android/arm64-v8a/                          # 根目录
├── lib/                                    # 共享库目录
│   ├── libavcodec.so                      # 编解码库
│   ├── libavformat.so                     # 格式处理库
│   ├── libavfilter.so                     # 滤镜库
│   ├── libavutil.so                       # 工具库
│   ├── libswscale.so                      # 图像处理库
│   ├── libswresample.so                   # 音频重采样库
│   ├── libavdevice.so                     # 设备库
│   └── pkgconfig/                         # 配置文件
│       ├── libavcodec.pc                  # 编解码库配置
│       ├── libavformat.pc                 # 格式库配置
│       ├── libavfilter.pc                 # 滤镜库配置
│       ├── libavutil.pc                   # 工具库配置
│       ├── libswscale.pc                  # 图像库配置
│       ├── libswresample.pc               # 重采样库配置
│       └── libavdevice.pc                 # 设备库配置
├── include/                               # 头文件目录
└── share/                                 # 共享数据文件
    └── ffmpeg/                            # FFmpeg数据文件
        └── ... (预设文件和示例)
相关推荐
和沐阳学逆向2 小时前
iOS逆向_古法逆向_Instagram最新版抓包
macos·ios·cocoa
潜创微科技--高清音视频芯片方案开发6 小时前
2026年对拷线芯片实用对比分析:从需求到选型的全维度指南
音视频·硬件工程
自学AI的鲨鱼儿7 小时前
mac npm 安装 codex 报错 npm ENOTEMPTY
macos·npm·codex
愚公搬代码7 小时前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》033-调色:废片秒变氛围感大片(HSL的精准调节)
音视频
Sephiroth.Ma14 小时前
Mac 提示“Docker 已损坏,无法打开”?我这样排查后 10 分钟修好
macos·docker·容器
量子炒饭大师15 小时前
【OpenClaw修炼宝典】—— 【macOS安装篇】想玩《爪子船长》复刻版却卡在安装?OpenClaw 从零环境搭建与编译全攻略 (小白避坑指南)
macos·openclaw·小龙虾·龙虾
不才小强15 小时前
macOS 屏幕录制开发完全指南:ScreenCaptureKit与音频采集实战
macos·音视频
ShiLuoHeroKing1 天前
Mole:面向专业用户的Mac系统清理开源方案
macos
轻口味1 天前
HarmonyOS 6 NDK开发系列1:音视频播放能力介绍
华为·音视频·harmonyos