FFmpeg 5.x 编译 so 文件的记录

记录一下 FFmpeg 给 Android 编译 so 文件的全过程

FFmpeg 版本:5.1.7

NDK 版本:21.4.7075529

源码准备

复制代码
git clone https://github.com/FFmpeg/FFmpeg

切换到 5.1.7 版本

复制代码
cd ./FFmpeg
git checkout -b n5.1.7

so 文件编译脚本 (build_android.sh) (就放在 FFmpeg 目录中即可)

这里唯一需要你指定 NDK 的目录. 替换成 ndk 所在的目录

复制代码
#!/bin/bash

# 配置NDK路径
NDK=<NdkParentPath>/ndk/21.4.7075529
# 配置编译目标Android版本
API=21
# 配置输出目录
OUTPUT=$(pwd)/android_build

# 支持的架构
ARCHS=("arm64-v8a" "armeabi-v7a" "x86" "x86_64")
# ARCHS=("arm64-v8a" "x86")

# 循环编译各架构
for ARCH in "${ARCHS[@]}"; do
    echo "开始编译 $ARCH..."
    
    # 根据架构设置编译参数
    case $ARCH in
        arm64-v8a)
            CPU=armv8-a
            CROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android-
            CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android$API-clang
            CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android$API-clang++
            ARCH_CONFIG="aarch64"
            ;;
        armeabi-v7a)
            CPU=armv7-a
            CROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-
            CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi$API-clang
            CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi$API-clang++
            ARCH_CONFIG="arm"
            ;;
        x86)
            CPU=i686
            CROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android-
            CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android$API-clang
            CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android$API-clang++
            ARCH_CONFIG="x86"
            ;;
        x86_64)
            CPU=x86-64
            CROSS_PREFIX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android-
            CC=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android$API-clang
            CXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/x86_64-linux-android$API-clang++
            ARCH_CONFIG="x86_64"
            ;;
    esac

    # 创建输出目录
    mkdir -p $OUTPUT/$ARCH

    # 配置FFmpeg编译参数
    ./configure \
        --prefix=$OUTPUT/$ARCH \
        --enable-cross-compile \
        --target-os=android \
        --arch=$ARCH_CONFIG \
        --cpu=$CPU \
        --cc=$CC \
        --cxx=$CXX \
        --cross-prefix=$CROSS_PREFIX \
        --sysroot=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/sysroot \
        --extra-cflags="-Os -fpic -DANDROID -D__ANDROID_API__=$API" \
        --extra-ldflags="-lm" \
        --enable-shared \
        --disable-static \
        --disable-doc \
        --disable-programs \
        --disable-ffmpeg \
        --disable-ffplay \
        --disable-ffprobe \
        --disable-symver \
        --enable-small \
        --disable-asm

    # 编译并安装
    make clean
    make -j$(nproc)
    make install

    echo "$ARCH 编译完成"
done

echo "所有架构编译完成,输出目录: $OUTPUT"

正式开始编译 so 文件

复制代码
chmod u+x ./build_android.sh
./build_android.sh
相关推荐
Mister Leon1 天前
FFmpeg - Jetson Orin 实战部署
ffmpeg
阿拉斯攀登2 天前
售货柜实战:IPC 拉流 → 抽帧 → YOLO 识别完整流水线
yolo·ffmpeg·音视频·webrtc·视频编解码
阿拉斯攀登2 天前
RTSP 拉流与录制:IPC 摄像头本地录像完整方案
ffmpeg·音视频·webrtc·实时音视频·视频编解码
坐望云起3 天前
FFmpeg.wasm 纯浏览器端视频压缩与格式转换实战:零服务器、零上传、100% 隐私
服务器·ffmpeg·wasm
阿拉斯攀登3 天前
FFmpeg 转码详解:封装格式、编码器、码率控制
ffmpeg·音视频·webrtc·实时音视频·视频编解码
阿拉斯攀登3 天前
FFmpeg 入门:命令行的 20 个常用场景
ffmpeg·音视频·webrtc·视频编解码
luoyayun3614 天前
Qt + FFmpeg 音频工具:重采样实现
qt·ffmpeg·重采样
薄荷椰果抹茶5 天前
计算机导论_第6章_笔记
笔记·ffmpeg
FlightYe6 天前
FFmpeg移动端硬解机制
linux·网络·ffmpeg·音视频·实时音视频·视频编解码
小殊小殊7 天前
一文速通GPU版FFmpeg视频转码的安装使用
ffmpeg·音视频·视频编解码