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
相关推荐
Anhty4 小时前
3 款手机音频剪辑 APP 横评,短视频配音后期,免费工具怎么选?
功能测试·ffmpeg·音视频
VidDown1 天前
自动给视频挑一张能看的封面:帧评分、构图与批量生成
python·ffmpeg·音视频·视频
可乐鸡翅yeah_2 天前
HLS 业务 Referer‑Policy 网页元标签引发播放异常排错
前端·javascript·网络·ffmpeg·php·音视频
开开心心就好3 天前
本地文件搜索工具推荐,占用小速度还快
智能手机·ffmpeg·ocr·word·音视频·网络攻击模型·安全架构
我科绝伦(Huanhuan Zhou)3 天前
oracle坏块导致备份不了
数据库·oracle·ffmpeg
RS迷途小书童3 天前
Python+FFmpeg提取大疆无人机MP4内嵌mov_text遥测SRT字幕并做完整性校验
python·ffmpeg·大疆·srt字幕·dji
开开心心就好3 天前
视频压缩工具推荐,画质效果很能打
智能手机·ffmpeg·ocr·word·排序算法·音视频·散列表
可乐鸡翅yeah_4 天前
业务中 M3U8 水印相关坑,硬水印和动态水印区别
前端·网络·数据库·ffmpeg·m3u8在线
redfred4 天前
HyperFrames 部署教程:5.6 万 Star 开源「写 HTML 出视频」框架,Windows 从零上手(CLI 三条命令 + 7 个避坑)
ffmpeg·开源·自动化·html·音视频
Arcai10244 天前
PostgreSQL数据备份和恢复完全指南
数据库·postgresql·ffmpeg·备份一体机·备份软件·smartstor·智备科技