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
相关推荐
活捉一个坏小孩6 天前
Nvidia FFmpeg安装说明
ffmpeg
WF_YL6 天前
如何删除 Oracle 过期 key / 数据,删除目的的key
ffmpeg
浩瀚之水_csdn7 天前
avcodec_find_decoder函数详解
ffmpeg
浩瀚之水_csdn10 天前
avcodec_parameters_copy详解
linux·人工智能·ffmpeg
不吃鱼的猫74813 天前
【ffplay 源码解析系列】02-核心数据结构详解
c++·ffmpeg·音视频
不吃鱼的猫74814 天前
【ffplay 源码解析系列】01-开篇-ffplay整体架构与启动流程
c++·架构·ffmpeg·音视频
REDcker15 天前
FFmpeg开发者快速入门
ffmpeg
不吃鱼的猫74815 天前
【从零手写播放器:FFmpeg 音视频开发实战】04-封装格式与多媒体容器
c++·ffmpeg·音视频
REDcker17 天前
FFmpeg完整文档
linux·服务器·c++·ffmpeg·音视频·c·后端开发
硬汉嵌入式17 天前
QEMU & FFmpeg作者Fabrice Bellard推出MicroQuickJS,一款面向嵌入式系统JavaScript引擎,仅需10K RAM
javascript·ffmpeg·microquickjs