Qt6.8.2创建WebAssmebly项目使用FFmpeg资源

Qt6新出了WebAssmebly功能,可以将C++写的软件到浏览器中运行,最近一段时间正在研究这方便内容,普通的控件响应都能实现,今天主要为大家分享如何将FFmpeg中的功能应用到浏览器中。

开发环境:window11,Qt6.8.2

功能介绍

(一)编译FFmpeg

之前使用FFmpeg解码器时没有编译过,想要在WebAssmebly套件环境中使用FFmpeg时,不能使用dll的方式,所以只能手动编译,这个步骤对我来说还是有一定难度的,不是不会编译,而是编译出来的内容,无法在QtCreator中应用。

接下来我来详细讲述下如何编译FFmpeg并使用。

1:下载MSYS2环境

因为FFmpeg不支持在window环境下编译,所以这里借助了MSYS2环境,具体的安装包可以从官网上下载就行。MSYS2官网链接

安装的时候默认是C盘,考虑到后期电脑运行状态,我选择安装到了D盘,不受任何影响的。

 选择MSYS2 MINGW64方式进行编译

2:更新MSYS2和MINGW

控制台输入以下命令

pacman --sync --refresh --refresh
pacman --sync --sysupgrade

3:安装GIT

主要是使用git更新代码的,在这里需要注意的是,即使是在windows环境下已经安装过git了,在MSYS2中也是无法同步的。我之前就犯过这种错误,总觉得是在windows环境下应该是想通的才对,其实不是!

3.1:判断MSYS2中有没有安装git
pacman -Q git

如果能输出版本号,说明git已经被安装过

3.2:安装git
pacman -S git

安装后再次执行就能看到git的版本号了。

4:安装emscripten

为了编译FFmpeg为WebAssmebly可应用版本,需要安装emscripten

4.1:下载emscripten资源
git clone https://github.com/emscripten-core/emsdk.git

 下载完成后切换到emsdk文件夹中

cd emsdk

这时候只是下载了一个emsdk的框架,因为要匹配Qt6.8.2,根据QtCreator文档说明得知,需要搭配emscripten的3.1.56版本,因此在更新安装时指定安装版本,这很重要!

4.2:安装指定版本
./emsdk install 3.1.56
4.4:安装后激活当前版本
./emsdk activate 3.1.56
4.5:激活emscripten环境
source /emsdk/emsdk_env.sh
4.6:配置环境变量

为了以后每次启动时不需要每次都激活emscripten环境,需要将激活功能放到环境变量中,方便使用

找到MSYS2中你的用户下“xx.bashrc”文件,将下面这句话添加到文件末尾。

source /D/msys64/home/sutong/emsdk/emsdk_env.sh

在这里需要写绝对路径的

此时,在命令行中输入

emcc -v

就能看到版本号了,说明安装成功了。

 5:编译FFmpeg

最近我发现deepseek是个好东西,有啥问题都可以用这个咨询,我使用deepseek搜素了很多方案,以及各种博友的回答,都说使用“emconfigure ./configure”方式,但是,我也不知道是哪里出了问题,一直返回不是win32的有效应用程序,我简直跪了!

后来发现,直接使用"./configure"方式照样也能编译成功。下面是我配置FFmpeg编译项参数

第一步:

./configure --prefix=/home/sutong/ffmpeg/build-wasm --target-os=none --arch=x86_32 --enable-cross-compile --disable-asm --disable-programs --disable-doc  --cc="emcc" --cxx="em++" --ar="emar" --cpu=generic --disable-avdevice --disable-swresample --disable-postproc --disable-avfilter --disable-logging --enable-small --enable-decoder=h264 --enable-demuxer=mov --enable-network

第二步:

emmake make

第三步

emmake make install

等待编译完成就行,会将结果输出到“/home/sutong/ffmpeg/build-wasm”我们指定的文件夹中。

以上操作但凡发现有错误后,需要进行清理再次进行编辑

make clean

(二)代码应用

1:创建Qt项目

创建一个套件是WebAssmebly的项目,在这里我选择的是多线程

 2:将编译好的FFmpeg资源添加到项目中

# 添加FFmpeg头文件路径
INCLUDEPATH += $$PWD/ffmpeg/src
LIBS += -L$$PWD/ffmpeg/lib \-lavformat \-lavcodec \-lswscale \-lavutil#WebAssembly特定配置
QMAKE_CXXFLAGS += -s USE_PTHREADS=0 -s ALLOW_MEMORY_GROWTH=1
# 添加以下标志以保留未使用的函数并导出符号
QMAKE_LFLAGS += -s ERROR_ON_UNDEFINED_SYMBOLS=0 -s EXPORT_ALL=1

在这里需要记住,静态库的加载一定是按照这个顺序,否则代码应用一直报错,我已经踩坑过了。

3:代码调用

在.h中

extern "C"{
#include "libavformat/avformat.h"
#include "libavcodec/avcodec.h"}

在.cpp中

avformat_network_init();
// 初始化AVFormatContext
AVFormatContext* m_avFormCtx_Out = nullptr;
const char* filename = "F:\\11.mp4";
int nErrorCode = avformat_alloc_output_context2(&m_avFormCtx_Out, nullptr, nullptr, filename);
if(nErrorCode < 0)
{qDebug() << "调用<avformat_alloc_output_context2>,失败,错误码 = " << nErrorCode;
}
else
{qDebug() << "调用<avformat_alloc_output_context2>,成功,正确码 = " << nErrorCode;
}

运行代码,可以在浏览器中输出日志,说明FFmpeg接口调用成功

总结

虽然编译过程很简答, 主要是环境配置以及在项目中的兼容程序,之前总是查询emconfigure的使用,浪费了很长时间,发现不用调用“emconfigure”也可以编译成功。

大家有什么问题可以留言告诉我,我也是第一次尝试,接下来我会继续分享Qt程序在WebAssmebly中使用,毕竟要学一学新技术呀!

我是糯诺诺米团,一名C++程序媛~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/29890.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 解题思路 12(Hot 100)

解题思路&#xff1a; 定义三个指针&#xff1a; prev&#xff08;前驱节点&#xff09;、current&#xff08;当前节点&#xff09;、nextNode&#xff08;临时保存下一个节点&#xff09;遍历链表&#xff1a; 每次将 current.next 指向 prev&#xff0c;移动指针直到 curre…

用数据唤醒深度好眠,时序数据库 TDengine 助力安提思脑科学研究

在智能医疗与脑科学快速发展的今天&#xff0c;高效的数据处理能力已成为突破创新的关键。安提思专注于睡眠监测与神经调控&#xff0c;基于人工智能和边缘计算&#xff0c;实现从生理体征监测、智能干预到效果评估的闭环。面对海量生理数据的存储与实时计算需求&#xff0c;安…

玩转若依二次开发之若依框架Springboot+Vue3

目录 一、使用&#xff08;非重点&#xff09; 0.准备工作 1.下载git地址 2.配置信息 3.系统启动 4.DIY主题样式和文案 二、使用&#xff08;重点&#xff09; 1.单表生成Java和vue3代码 1.1.创建用户表 1.2.生成Java和vue3代码 1.3.把生成代码复制到项目中 1.4.重…

llamafactory大模型微调教程(周易大模型案例)

1.环境说明 操作系统&#xff1a;ubuntu 20 基础模型&#xff1a;Qwen2.5-1.5B-Instruct 工具&#xff1a;llamafactory GPU&#xff1a;四张4090 2、环境部署 2.1 下载基础模型 # 1、下载 modelscope pip install modelscope#2、模型下载 cd /data/ cat >> download…

06 HarmonyOS Next性能优化之LazyForEach 列表渲染基础与实现详解 (一)

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 目录 一、代码结构概览二、详细代码解析1. 数据源管理实现2. 数据结构定义3. 优化的列表项组件4. 主列表组件实现 一、代码结构概览 本文将详细解…

【Linux】线程同步与互斥

线程同步与互斥 一.线程互斥1.互斥相关概念2.互斥锁 Mutex3.互斥锁接口4.互斥锁实现原理5.互斥锁封装 二.线程同步1.同步相关概念2.条件变量 Condition Variable3.条件变量接口4.条件变量封装5.信号量 Semaphore6.信号量接口7.信号量封装 三.生产者 - 消费者模型1.基于 Blockin…

基于大数据的电影情感分析推荐系统

【大数据】基于大数据的电影情感分析推荐系统&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 本系统通过结合Flask框架、Vue前端、LSTM情感分析算法以及pyecharts和numpy、pandas等技术&#x…

网络安全配置截图 网络安全i

网络安全概念及规范 1.网络安全定义 网络安全的概述和发展历史 网络安全 广义的网络安全&#xff1a;Cyber Security&#xff08;网络空间安全&#xff09; 网络空间有独立且相互依存的信息基础设施和网络组成&#xff0c;包括互联网、电信网、计算机系统、嵌入式处理器和控…

测试用例详解

一、通用测试用例八要素   1、用例编号&#xff1b;    2、测试项目&#xff1b;   3、测试标题&#xff1b; 4、重要级别&#xff1b;    5、预置条件&#xff1b;    6、测试输入&#xff1b;    7、操作步骤&#xff1b;    8、预期输出 二、具体分析通…

mybatis映射文件相关的知识点总结

mybatis映射文件相关的知识点总结 mybatis官网地址 英文版&#xff1a;https://mybatis.org/mybatis-3/index.html 中文版&#xff1a;https://mybatis.p2hp.com/ 搭建环境 /* SQLyog Ultimate v10.00 Beta1 MySQL - 8.0.30 : Database - mybatis-label *****************…

智能体开发:推理-行动(ReAct)思维链提示

人类在处理一个需要多个步骤才能完成任务时&#xff0c;显著特点是能够将言语推理&#xff08;内心独白&#xff09;和实际行动融合在一起&#xff0c;在面对陌生或不确定的情况时通过这种方法学习新知识&#xff0c;做出决策&#xff0c;并执行&#xff0c;从而应对复杂的任务…

*VulnHub-FristiLeaks:1.3暴力解法、细节解法,主打软硬都吃,隧道搭建、寻找exp、提权、只要你想没有做不到的姿势

*VulnHub-FristiLeaks:1.3暴力解法、细节解法&#xff0c;主打软硬都吃&#xff0c;隧道搭建、寻找exp、提权、只要你想没有做不到的姿势 一、信息收集 1、扫靶机ip 经典第一步&#xff0c;扫一下靶机ip arp-scan -l 扫描同网段 nmap -sP 192.168.122.0/242、指纹扫描、端口…

Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台

2025-02-27&#xff0c;由北京邮电大学和理想汽车公司联合创建。该平台基于《Overcooked-AI》游戏环境&#xff0c;设计了更具挑战性和实用性的交互任务&#xff0c;目的通过自然语言沟通促进多智能体协作。 一、研究背景 近年来&#xff0c;基于大型语言模型的智能体系统在复…

HTTP 与 HTTPS 协议:从基础到安全强化

引言 互联网的消息是如何传递的&#xff1f; 是在路由器上不断进行跳转 IP的目的是在寻址 HTTP 协议&#xff1a;互联网的基石 定义 HTTP&#xff08;英文&#xff1a;HyperText Transfer Protocol&#xff0c;缩写&#xff1a;HTTP&#xff09;&#xff0c;即超文本传输协…

vue3:初学 vue-router 路由配置

承上一篇&#xff1a;nodejs&#xff1a;express js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;在线查询英汉词典 安装 cnpm install vue-router -S 现在讲一讲 vue3&#xff1a;vue-router 路由配置 cd \js\mydict-web\src mkdir router cd router 我还…

【ARM内核】SWCLK/SWDIO引脚复用

我以CMS32L1032&#xff08;ARMCortex-M0&#xff09;单片机举例&#xff1a; 一、直接将下载端口引脚复用是会出问题的 电平可能跟别的IO不一样&#xff0c;然后还不好用&#xff0c;仔细阅读芯片手册&#xff1a; 然后禁用代码是&#xff1a; //禁用SM调试接口 *(volatil…

一套企业级智能制造云MES系统源码, vue-element-plus-admin+springboot

MES应该是继ERP之后制造企业信息化最热门的管理软件&#xff0c;它适应产品个性化与敏捷化制造需求&#xff0c;满足生产过程精益管理而产生和发展起来的信息系统。 作为企业实现数字化与智能化的核心支撑技术与重要组成部分&#xff0c;MES在帮助制造企业走向数字化、智能化等…

π0及π0_fast的源码解析——一个模型控制7种机械臂:对开源VLA sota之π0源码的全面分析,含我司微调π0的部分实践

前言 ChatGPT出来后的两年多&#xff0c;也是我疯狂写博的两年多(年初deepseek更引爆了下)&#xff0c;比如从创业起步时的15年到后来22年之间 每年2-6篇的&#xff0c;干到了23年30篇、24年65篇、25年前两月18篇&#xff0c;成了我在大模型和具身的原始技术积累 如今一转眼已…

MAVEN的环境配置

在下载好maven后或解压maven安装包后进行环境配置 1.在用户环境变量中 新建一个MAVEN_HOME 地址为MAVEN目录 注&#xff1a;地址为解压后maven文件的根目录&#xff01;&#xff01;&#xff01; 2.在系统环境变量的path中添加该变量 %MAVEN_HOME%\bin 3. 测试maven安装是否成…

03 HarmonyOS Next仪表盘案例详解(二):进阶篇

温馨提示&#xff1a;本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦&#xff01; 文章目录 前言1. 响应式设计1.1 屏幕适配1.2 弹性布局 2. 数据展示与交互2.1 数据卡片渲染2.2 图表区域 3. 事件处理机制3.1 点击事件处理3.2 手势…