新闻详情

新闻详情

首页 / 资讯中心 / 详情

QT使用FFMpeg编译安卓程序.md

发布时间:2026/9/30 15:12:50来源:尧图网络
QT使用FFMpeg编译安卓程序.md
一、准备工作下载所需资源资源版本/说明下载地址FFmpeg 源码7.1.5与 Qt 6.11 内置版本一致https://ffmpeg.org/releases/ffmpeg-7.1.5.tar.gzAndroid NDKWindows 版r26b (26.1.10909125) 或 r26d (26.3.11579264)https://developer.android.com/ndk/downloadsMSYS2提供 Windows 下的类 Unix 编译环境https://www.msys2.org/⚠️关键点NDK 必须下载Windows 版android-ndk-r26d-windows.zip不能使用 Linux 版。这只下载了FFmpeg 7.1.5源码和MSYS2,Android NDK使用QT自带的,目录位于/e/Android/android-sdk/ndk/27.2.12479018二、配置 MSYS2 编译环境安装 MSYS2 后打开MSYS2 MINGW64终端不是普通 MSYS2 终端。安装编译依赖pacman-S--noconfirmmakeyasm diffutils设置环境变量根据实际路径修改exportPATH/e/Qt/Tools/mingw1310_64/bin:$PATHexportANDROID_NDK_ROOT/e/Android/android-sdk/ndk/27.2.12479018三、在 Windows 下编译 FFmpeg for Android解压 FFmpeg 源码到不含中文和空格的路径例如/e/ffmpeg/ffmpeg-7.1.5/ffmpeg-7.1.5。在源码目录下创建build_android.sh#!/bin/bash# 设置目标架构这里以 arm64-v8a 为例ARCHaarch64CPUarmv8-aTOOLCHAIN_ARCHaarch64-linux-android# NDK 工具链路径TOOLCHAIN$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/windows-x86_64# 最低支持的 Android API 级别建议与你的 Qt 项目一致API28# 进入源码目录cd/e/ffmpeg/ffmpeg-7.1.5/ffmpeg-7.1.5# 配置 FFmpeg./configure\--prefix./install-android/$ARCH\--target-osandroid\--arch$ARCH\--cpu$CPU\--enable-cross-compile\--cross-prefix$TOOLCHAIN/bin/llvm-\--cc$TOOLCHAIN/bin/${TOOLCHAIN_ARCH}${API}-clang\--cxx$TOOLCHAIN/bin/${TOOLCHAIN_ARCH}${API}-clang\--sysroot$TOOLCHAIN/sysroot\--enable-shared\--disable-static\--disable-doc\--disable-programs\--enable-network# 开始编译-j 后面的数字建议设为 CPU 核心数make-j8makeinstall其他编译方式3.1 build_x86.sh#!/bin/bash# # FFmpeg for Android - x86# set-eexportANDROID_NDK_ROOT/e/Android/android-sdk/ndk/27.2.12479018API28ABI_NAMEx86ARCHx86CPUi686TOOLCHAIN_ARCHi686-linux-androidcase$(uname-s)inMINGW*|MSYS*|CYGWIN*)HOST_TAGwindows-x86_64;;Linux*)HOST_TAGlinux-x86_64;;*)echo不支持的主机平台;exit1;;esacTOOLCHAIN$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$HOST_TAGSYSROOT$TOOLCHAIN/sysrootSOURCE_DIR$(pwd)PREFIX$SOURCE_DIR/android/$ABI_NAMEechoecho 编译 FFmpeg for$ABI_NAMEechocd$SOURCE_DIRrm-rf$PREFIXmakedistclean2/dev/null||true./configure\--prefix$PREFIX\--target-osandroid\--arch$ARCH\--cpu$CPU\--enable-cross-compile\--cross-prefix$TOOLCHAIN/bin/llvm-\--cc$TOOLCHAIN/bin/${TOOLCHAIN_ARCH}${API}-clang\--cxx$TOOLCHAIN/bin/${TOOLCHAIN_ARCH}${API}-clang\--ar$TOOLCHAIN/bin/llvm-ar\--nm$TOOLCHAIN/bin/llvm-nm\--strip$TOOLCHAIN/bin/llvm-strip\--ranlib$TOOLCHAIN/bin/llvm-ranlib\--sysroot$SYSROOT\--enable-shared\--disable-static\--disable-doc\--disable-programs\--enable-network\--enable-jni\--enable-mediacodec\--disable-asmmake-j$(nproc2/dev/null||echo8)makeinstallechoecho?$ABI_NAME编译完成$PREFIXls-la$PREFIX/lib3.2 build_arm64_v8a.sh#!/bin/bash# # FFmpeg for Android - arm64-v8a# set-e# ---------- 配置 ----------exportANDROID_NDK_ROOT/e/Android/android-sdk/ndk/27.2.12479018API28ABI_NAMEarm64-v8aARCHaarch64CPUarmv8-aTOOLCHAIN_ARCHaarch64-linux-android# 判断主机平台case$(uname-s)inMINGW*|MSYS*|CYGWIN*)HOST_TAGwindows-x86_64;;Linux*)HOST_TAGlinux-x86_64;;*)echo不支持的主机平台;exit1;;esacTOOLCHAIN$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$HOST_TAGSYSROOT$TOOLCHAIN/sysrootSOURCE_DIR$(pwd)PREFIX$SOURCE_DIR/android/$ABI_NAMEechoecho 编译 FFmpeg for$ABI_NAMEechoechoNDK:$ANDROID_NDK_ROOTechoAPI:$APIecho输出:$PREFIXecho# ---------- 清理 ----------cd$SOURCE_DIRrm-rf$PREFIXmakedistclean2/dev/null||true# ---------- 配置 ----------./configure\--prefix$PREFIX\--target-osandroid\--arch$ARCH\--cpu$CPU\--enable-cross-compile\--cross-prefix$TOOLCHAIN/bin/llvm-\--cc$TOOLCHAIN/bin/${TOOLCHAIN_ARCH}${API}-clang\--cxx$TOOLCHAIN/bin/${TOOLCHAIN_ARCH}${API}-clang\--ar$TOOLCHAIN/bin/llvm-ar\--nm$TOOLCHAIN/bin/llvm-nm\--strip$TOOLCHAIN/bin/llvm-strip\--ranlib$TOOLCHAIN/bin/llvm-ranlib\--sysroot$SYSROOT\--enable-shared\--disable-static\--disable-doc\--disable-programs\--enable-network\--enable-jni\--enable-mediacodec# ---------- 编译 ----------make-j$(nproc2/dev/null||echo8)makeinstallechoecho?$ABI_NAME编译完成$PREFIXls-la$PREFIX/lib赋予执行权限并运行# 4. 首次使用前赋权chmodx build_*.sh# 5. 编译 arm64-v8a./build_arm64_v8a.sh# 6. 编译其他架构可选./build_armv7.sh ./build_x86.sh ./build_x86_64.sh编译成功后库文件位于./android/aarch64/。NDK r26 注意--cross-prefix必须为llvm-编译器名格式为aarch64-linux-android28-clang。显式指定--android-api可避免 “Defaulting to target API 21” 警告。四、复制库文件到 Qt 项目将编译生成的include和lib目录复制到 Qt 项目下textD:\Desktop\WifiUAV_MY\WifiUAV_MY\libs\android\arm64-v8a\ ├── include\ │ ├── libavcodec\ │ ├── libavformat\ │ ├── libavutil\ │ └── libswscale\ └── lib\ ├── libavcodec.so ├── libavcodec.so.61 ├── libavformat.so ├── libavformat.so.61 ├── libavutil.so ├── libavutil.so.59 ├── libswscale.so └── libswscale.so.8重要.so和.so.xx软链接指向的实际文件都要复制缺一不可五、修改.pro文件不要使用 $$ANDROID_ABI它在 qmake 解析阶段为空直接硬编码arm64-v8a增加自行匹配# 2. 区分平台配置android{FFMPEG_DIR$$PWD/libs/android# 根据目标 ABI 选择对应的 FFmpeg 库contains(ANDROID_TARGET_ARCH, arm64-v8a){FFMPEG_ANDROID_DIR$$FFMPEG_DIR/arm64-v8a}contains(ANDROID_TARGET_ARCH, armeabi-v7a){FFMPEG_ANDROID_DIR$$FFMPEG_DIR/armeabi-v7a}contains(ANDROID_TARGET_ARCH, x86){FFMPEG_ANDROID_DIR$$FFMPEG_DIR/x86}contains(ANDROID_TARGET_ARCH, x86_64){FFMPEG_ANDROID_DIR$$FFMPEG_DIR/x86_64}# 兜底如果没匹配到默认用 arm64isEmpty(FFMPEG_ANDROID_DIR){FFMPEG_ANDROID_DIR$$FFMPEG_DIR/arm64-v8a message(Warning: Unknown ABI, fallback to arm64-v8a)}INCLUDEPATH$$FFMPEG_ANDROID_DIR/include LIBS-L$$FFMPEG_ANDROID_DIR/lib\-lavcodec-lavformat-lavutil-lswscale}else:win32{# Windows 平台使用项目内置的 Windows FFmpegFFMPEG_DIR$$PWD/lib/ffmpeg INCLUDEPATH$$FFMPEG_DIR/include LIBS-L$$FFMPEG_DIR/lib\-lavcodec\-lavformat\-lavutil\-lswscale}else:unix{# Linux/Ubuntu 平台使用系统 FFmpeg 开发包CONFIGlink_pkgconfig PKGCONFIGlibavcodec libavformat libavutil libswscale}修改后执行清理项目 → 执行 qmake → 重新构建。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

vite-plugin-vue-inspector 点击直接跳转你的项目文件! 2026/9/30 19:56:41

vite-plugin-vue-inspector 点击直接跳转你的项目文件!

vite-plugin-vue-inspector 应用文档 一、这是什么? vite-plugin-vue-inspector 是一个 Vite 插件,它的核心能力可以概括为一句话:在浏览器中点击任意 Vue 元素,自动跳转到本地 IDE 中对应的组件源代码。如果你用过 Vue DevTools …

阅读更多 →
Rails之父重磅发声:手写代码不再是程序员首选操作 2026/9/30 19:56:33

Rails之父重磅发声:手写代码不再是程序员首选操作

文章目录1. 大佬直接掀桌子:手写代码不再是首选操作1.1 类比摄影:工具进化不会干掉从业者,只会换掉干活姿势2. 效能爆炸:从十倍程序员,奔着千倍效能去3. 37signals内部实操,激进的开发新玩法3.1 技术选型逻…

阅读更多 →
过程改进指南:4步用 Automotive Skills Suite 完成 ASPICE 评估、差距分析、改进计划与证据包 2026/9/30 19:56:25

过程改进指南:4步用 Automotive Skills Suite 完成 ASPICE 评估、差距分析、改进计划与证据包

过程改进指南:4步用 Automotive Skills Suite 完成 ASPICE 评估、差距分析、改进计划与证据包 【免费下载链接】automotive-skills-suite 100 installable Claude skills covering Engineering areas such as, ISO 26262 functional safety, ISO/SAE 21434 cybersec…

阅读更多 →
Redis接入AI实践:向量检索、会话管理与分布式锁 2026/9/30 19:56:17

Redis接入AI实践:向量检索、会话管理与分布式锁

最近圈子里都在聊“Redis 已正式接入 AI”这句话。其实翻一下 Redis 官方的更新日志就会明白,这件事不是某一篇新闻稿突然宣布的,而是从 Redis Stack 把 Search、JSON、TimeSeries 等模块变成标准能力,再加上向量检索(Vector Simi…

阅读更多 →
无人机侦测模块哪家强?低空经济行业知名品牌盘点 2026/9/30 19:56:02

无人机侦测模块哪家强?低空经济行业知名品牌盘点

低空经济火了,后台收到不少私信问:无人机侦测模块到底哪家强? 作为在安防圈摸爬滚打多年的过来人,我踩过坑,也帮客户选过型,今天掏心窝聊聊。去年有个做园区安保的朋友找我,说某大厂方案预算超了…

阅读更多 →
龙架构兼容互认|织灵 Coda Loom 2.0 完成龙芯平台兼容性测试 2026/9/30 19:56:01

龙架构兼容互认|织灵 Coda Loom 2.0 完成龙芯平台兼容性测试

近期,可达智灵与龙芯中科技术股份有限公司完成龙架构兼容互认证,获颁《龙架构兼容互认证书》(证书编号:LS06100260319)。经基于龙芯平台的兼容性测试,LoongArch 龙架构与织灵 Coda Loom 系统 V2.0 功能与稳…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉