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数据文件
        └── ... (预设文件和示例)
相关推荐
蝉蜕日记11 小时前
视频压缩 v1.1.31:高效压缩,无损画质,释放存储空间
音视频·生活·视频编解码·视频·软件需求
lumengabc12 小时前
视频制作流程MP4旁白语音生成裁剪视频压缩python处理ppt转视频M4a格式
音视频
音视频牛哥15 小时前
AI浪潮下,实时音视频SDK正在经历怎样的价值重构?
人工智能·音视频·实时音视频·rtmp推流·低延迟rtsp播放器·低延迟rtmp播放器·rtsp转rtmp推流
fukai772215 小时前
macOS防止休眠的菜单栏小工具
macos
乐橙开放平台16 小时前
明厨亮灶笔记:乐橙轻应用 H5 + 小程序插件,一套 BFF 出两张播放凭证
人工智能·笔记·物联网·小程序·音视频·notepad++
ofoxcoding16 小时前
Seedance 2.0 与 Wan 2026 视频生成 API 成本效率深度对比分析
网络·人工智能·ai·音视频
web守墓人16 小时前
【go语言】gotar:使用go语言复刻tar命令,并加入7z支持,可独立运行在windows、linux、macos上
linux·macos·golang
xingyuzhisuan16 小时前
星宇智算 AI 视频生成工具九维度全测评与行业对标分析
人工智能·音视频
豌豆学姐17 小时前
likeadmin-api 视频生成工作流实战:Seedance 2.0 接口从素材到任务查询
aigc·音视频·api·视频生成·likeadmin-api
乐橙开放平台17 小时前
养殖 SaaS 笔记:乐橙 IoT 物模型管环境,视频 OpenAPI 管回看
数据库·笔记·物联网·mysql·音视频