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
相关推荐
EasyGBS12 小时前
国标GB28181视频平台EasyGBS解决多格式视频流无缝转换难题
ffmpeg·音视频
树下水月1 天前
关于使用ffmpeg的一些使用方法
ffmpeg
憧憬成为原神糕手1 天前
FFmpeg 音视频开发笔记(一):H.264 解码为 YUV
笔记·ffmpeg·音视频
阳光开朗男孩2 天前
FFmpeg从入门到精通-1.ffmpeg简介
ffmpeg
luoqice6 天前
RTMP视频流的帧格式分析
网络·ffmpeg
老姚---老姚6 天前
编译支持HEVC/H.265 over RTMP / Enhanced RTMP 的 ffmpeg
ffmpeg·h.265·hevc·rtmp·enhanced
码流怪侠8 天前
FFmpeg 开发实战全解析:从入门到精通(附完整代码示例)
ffmpeg·音视频开发·视频编码
圆弧YH8 天前
FFmpeg
ffmpeg
luoqice8 天前
FLV文件格式详解
ffmpeg
happybasic9 天前
在CMD下使用FFmpeg将.wav文件转换成指定的格式~
ffmpeg