当前位置: 首页 > news >正文

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[@]}"; doecho "开始编译 $ARCH..."# 根据架构设置编译参数case $ARCH inarm64-v8a)CPU=armv8-aCROSS_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-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android$API-clang++ARCH_CONFIG="aarch64";;armeabi-v7a)CPU=armv7-aCROSS_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-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/armv7a-linux-androideabi$API-clang++ARCH_CONFIG="arm";;x86)CPU=i686CROSS_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-clangCXX=$NDK/toolchains/llvm/prebuilt/darwin-x86_64/bin/i686-linux-android$API-clang++ARCH_CONFIG="x86";;x86_64)CPU=x86-64CROSS_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-clangCXX=$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 cleanmake -j$(nproc)make installecho "$ARCH 编译完成"
doneecho "所有架构编译完成,输出目录: $OUTPUT"

正式开始编译 so 文件

chmod u+x ./build_android.sh
./build_android.sh
http://www.dtcms.com/a/394700.html

相关文章:

  • 以开启https的nginx转发流量到minio
  • StarRocks 各类索引以及存储位置详解
  • PromptPilot 技术深解,工程化提示词开发如何让大模型准确率大大提高
  • RTX4090:AI与深度学习应用实践的革命性推动者
  • Cursor Multi-Root Workspace 新特性深度实战:一次打开 React 前端 + Go 后端,AI 自动跨项目跳转、联调、写代码!
  • 如何处理单位换算的问题
  • Docker部署 MySQL+Mycat
  • RTX4090:极致性能探索与硬核评测
  • DM物理存储结构及内存结构
  • ASP.NET Core MVC 路由逻辑初探
  • 【Python办公】文字转视频(可自定义颜色、字体大小)
  • 数据洪流时代,如何挑选一款面向未来的时序数据库?IoTDB 的答案
  • python+django/flask的吉安红色旅游平台 红色教育景区展示+图文资讯发布+评论互动功能系统java+nodejs
  • 设计模式(C++)详解——代理模式 (Proxy Pattern)(2)
  • 详解 Kubernetes 命令:kubectl exec -it nginx -- bash 及实战场景
  • Android挂机短信模板和多台手机同步短信模板
  • Solid Edge 转换为 IGS 全流程技术指南:含迪威模型网在线转换方案
  • 设计模式(C++)详解——代理模式 (Proxy Pattern)(1)
  • 聊聊AI agents MCP 开发
  • 【C++进阶】智能指针的使用及其原理
  • 极客天成让统一存储从云原生‘进化’到 AI 原生: 不是版本升级,而是基因重组
  • 【JavaScript 性能优化实战】第五篇:运行时性能优化进阶(懒加载 + 预加载 + 资源优先级)
  • Java基础(十二):抽象类与接口详解
  • 使用《微PE》软件,制作U盘启动盘(PE工具盘)
  • 《初阶 Linux 工具学习:Shell运行原理以及Linux权限讲解》
  • 树链剖分(模板 + 思路)
  • 医疗数据互操作性与联邦学习的python编程方向研究(上)
  • Windows最新摆烂更新,让用户没法看视频了
  • 可配置化App启动弹窗系统:实现后台动态管理与热更新引导-蜻蜓Q系统laravel+vue3-优雅草卓伊凡
  • Permute 媒体文件格式转换【音视频图像文件转换】(Mac电脑)