网站建设人员需求分析,丰和园林建设集团网站,中国城市建设研究院深圳分院网站,百度竞价代理商Qt6新出了WebAssmebly功能#xff0c;可以将C写的软件到浏览器中运行#xff0c;最近一段时间正在研究这方便内容#xff0c;普通的控件响应都能实现#xff0c;今天主要为大家分享如何将FFmpeg中的功能应用到浏览器中。
开发环境#xff1a;window11#xff0c;Qt6.8.2…Qt6新出了WebAssmebly功能可以将C写的软件到浏览器中运行最近一段时间正在研究这方便内容普通的控件响应都能实现今天主要为大家分享如何将FFmpeg中的功能应用到浏览器中。
开发环境window11Qt6.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-osnone --archx86_32 --enable-cross-compile --disable-asm --disable-programs --disable-doc --ccemcc --cxxem --aremar --cpugeneric --disable-avdevice --disable-swresample --disable-postproc --disable-avfilter --disable-logging --enable-small --enable-decoderh264 --enable-demuxermov --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_PTHREADS0 -s ALLOW_MEMORY_GROWTH1
# 添加以下标志以保留未使用的函数并导出符号
QMAKE_LFLAGS -s ERROR_ON_UNDEFINED_SYMBOLS0 -s EXPORT_ALL1在这里需要记住静态库的加载一定是按照这个顺序否则代码应用一直报错我已经踩坑过了。
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程序媛~