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数据文件
        └── ... (预设文件和示例)
相关推荐
pe7er5 天前
macOS 应用无法打开(权限问题)解决方案
macos·mac
REDcker7 天前
WebCodecs VideoDecoder 的 hardwareAcceleration 使用
前端·音视频·实时音视频·直播·webcodecs·videodecoder
gihigo19987 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
山河君7 天前
四麦克风声源定位实战:基于 GCC-PHAT + 最小二乘法实现 DOA
算法·音视频·语音识别·信号处理·最小二乘法·tdoa
音视频牛哥7 天前
Android平台RTMP/RTSP超低延迟直播播放器开发详解——基于SmartMediaKit深度实践
android·人工智能·计算机视觉·音视频·rtmp播放器·安卓rtmp播放器·rtmp直播播放器
qq_416276427 天前
通用音频表征的对比学习
学习·音视频
美狐美颜sdk7 天前
Android全局美颜sdk实现方案详解
人工智能·音视频·美颜sdk·视频美颜sdk·美狐美颜sdk
EasyDSS7 天前
私有化部署EasyDSS视频点播能力:全链路视频技术赋能,打造企业级视听新体验
音视频·hls·m3u8·点播技术·智能转码
qq_416276427 天前
DeLoRes——一种通用的音频表征学习新方法(DeLoRes(基于 Barlow Twins 的冗余最小化方法)
学习·音视频
harmful_sheep7 天前
mac生效的终端查看
macos