Qt6.7.2 使用vcpkg编译QtWebengine以支持播放视频
Qt安装套件中的QtWebengine不能播放网页<video>视频,需要配置 -webengine-proprietary-codecs
从源代码重新编译。由于QtWebengine依赖众多,build时间很长,最好选择vcpkg构建。本文记录我踩坑的经过和解决方案。
一、首先安装好Visual Studio 2022,拉取最新的vcpkg仓库,其次是修改 d:\code\vcpkg\triplets\x64-windows.cmake,添加一行
set(VCPKG_BUILD_TYPE release)
因为vcpkg install XXXX选择x64-windows的triplet时,会先构建debug,再构建release,我不需要debug版本的,就设置成只构建release版本,可以将等待时间减半。
干完之后最好把x64-windows.cmake恢复回去,因为有的项目构建debug是必须的。
二、打开visual studio installer 修改-单个组件,搜索 atl ,把 带有Spectre缓解措施、适用于最新v143生成工具的C++ ATL(x86和x64)
以及 适用于最新v143生成工具的C++ ATL(x86和x64) 都装上。我之前因为少装了后者,导致构建到了链接阶段报错:cannot open file 'atls.lib'
三、打开控制面板-区域-管理-更改系统区域设置,换成英语(美国),之后就执行:
.\vcpkg.exe install qtwebengine[proprietary-codecs,webchannel]:x64-windows --x-buildtrees-root=D:\q\ --editable
根目录设为 D:\q\ 是为了避免编译器报错文件路径名过长。--editable 使得解压出来的源代码不用每次构建都被清除。
如果你等了几个小时构建结束发现出错了,解决完错误想再来一遍,可以在此命令后加上 --no-downloads 选项,意即不用重新下载源代码,使用缓存文件继续执行。
四、构建不出意外地还是出错了,打开 D:\q\qtwebengine\install-x64-windows-rel-out.log 搜索 error空格 发现:
../../../../../src/here-src-6-b423b4bf6d.clean/src/3rdparty/chromium/v8\src/compiler/turboshaft/operations.h(1336): error C2100: you cannot dereference an operand of type 'v8::internal::compiler::turboshaft::WordRepresentation'
经过一番网上搜索,发现有人说VS2022 17.10版本 才出这个错,退回到17.9版本就好了,但是我用visual studio installer 回滚到上一版本,并不能退到17.9。
找到了qt项目的patch,跟我本地的代码不一样,但是可以照着修改。
下载我的附件,解压到 d:\q\qtwebengine\src\here-src-6-b423b4bf6d\src\3rdparty\chromium\v8\src\compiler\turboshaft\ 覆盖原文件。注意换成实际路径。
经过6个小时的构建,终于成功。可以将 d:\q\qtwebengine\x64-windows-rel\bin\ 中的文件替换到我的Qt工程中打包了。