Linux Qt5.15.2 编译QWebEngine源码支持音视频H264

背景

默认自带的QWebEngine 因版权问题不支持音视频功能,需要自己编译源码以支持。

平台:Linux(UOS V20 1050)
Qt:5.15.2

准备工作

  1. 下载 Qt 5.15.2 对应版本源码,使用镜像网站或者Qt Maintenance Tool工具下载。
  2. 配置 Qt 环境变量
vim ~/.bashrc

将以下内容追加到bashrc文件后

#QT ENV
export PATH=/home/Leou/Qt/5.15.2/gcc_64/bin:$PATH
export LD_LIBRARY_PATH=/home/Leou/Qt/5.15.2/gcc_64/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=/home/Leou/Qt/5.15.2/gcc_64/plugins:$QT_PLUGIN_PATH
export QML2_PATH=/home/Leou/Qt/5.15.2/gcc_64/qml:$QML2_PATH

刷新使其生效

source ~/.bashrc

这个阶段可以预先安装所需的库:

On all platforms, the following tools are required at build time:

  • Python 2.7.5 or later. Python 3 is not supported.
  • Bison, Flex
  • GPerf
  • Node.js version 8 or later (version 12 or later is recommended)

这些是最基本的要求,实际上还有很多库需要安装,可参考qtwebengine-platform-notes

编译

创建build目录,并使用qmake ../qtwebengine.pro -- -webengine-proprietary-codecs命令

Leou@Leou-PC:/media/Leou/qtwebengine$ mkdir build
Leou@Leou-PC:/media/Leou/qtwebengine$ cd build/
Leou@Leou-PC:/media/Leou/qtwebengine/build$ qmake ../qtwebengine.pro -- -webengine-proprietary-codecs

输出信息:

Info: creating stash file /media/Leou/qtwebengine/build/.qmake.stash
Info: creating cache file /media/Leou/qtwebengine/build/.qmake.cacheRunning configuration tests...
Checking for architecture supported... yes
Checking for bison... no
Checking for submodule initialized... yes
Checking for build path without whitespace... yes
Checking for platform supported... 
Checking for gperf... yes
Checking for flex... no
Checking for host pkg-config... /usr/bin/pkg-config
Checking for jumbo build merge limit... 8
Checking for linker supports -z noexecstack... yes
Checking for x11... yes
Checking for libdrm... yes
Checking for xcomposite... yes
Checking for xcursor... yes
Checking for xi... yes
Checking for xtst... yes
Checking for python2... /usr/bin/python2
Checking for d-bus... yes
Checking for fontconfig... yes
Checking for freetype >= 2.4.2... yes
Checking for glib-2.0 >= 2.32.0... yes
Checking for glibc > 2.16... yes
Checking for jsoncpp... no
Checking for khr... yes
Checking for lcms2... no
Checking for libevent... no
Checking for libvpx... no
Checking for libwebp, libwebpmux and libwebpdemux... no
Checking for compatible libxml2 and libxslt... no
Checking for minizip... no
Checking for system ninja... no
Checking for nss >= 3.26... yes
Checking for opus... no
Checking for protobuf... no
Checking for re2... no
Checking for snappy... no
Checking for zlib... yes
Done running configuration tests.Configure summary:Qt WebEngine Build Tools:Use System Ninja ....................... noUse System Gn .......................... noJumbo Build Merge Limit ................ 8Developer build ........................ noSanitizer .............................. noQtWebEngine required system libraries:fontconfig ........................... yesdbus ................................. yesnss .................................. yeskhr .................................. yesglibc ................................ yesQtWebEngine required system libraries for qpa-xcb:x11 .................................. yeslibdrm ............................... yesxcomposite ........................... yesxcursor .............................. yesxi ................................... yesxtst ................................. yesOptional system libraries used:re2 .................................. noicu .................................. nolibwebp, libwebpmux and libwebpdemux . noopus ................................. noffmpeg ............................... nolibvpx ............................... nosnappy ............................... noglib ................................. yeszlib ................................. yesminizip .............................. nolibevent ............................. nojsoncpp .............................. noprotobuf ............................. nolibxml2 and libxslt .................. nolcms2 ................................ nopng .................................. noJPEG ................................. noharfbuzz ............................. nofreetype ............................. yesNote: The following modules are not being compiled in this configuration:webenginecorewebenginewebenginewidgetspdfpdfwidgetsWARNING: Tool bison is required to build QtWebEngine.WARNING: Tool bison is required to build QtPdf.WARNING: QtWebEngine will not be built.WARNING: QtPdf will not be built.Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into '/home/Leou/Qt/5.15.2/gcc_64'.Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

查看输出信息并安装缺失的库:

安装bison

sudo apt install bison

安装flex

sudo apt install flex

安装后,疑似有缓存,所以导致未更新,可删除build下的产物,再运行一次qmake ../qtwebengine.pro -- -webengine-proprietary-codecs

输出信息:

Leou@Leou-PC:/media/Leou/QtSrc/Src/qtwebengine/build$ qmake ../qtwebengine.pro -- -webengine-proprietary-codecsRunning configuration tests...
Done running configuration tests.Configure summary:Qt WebEngine Build Tools:Use System Ninja ....................... noUse System Gn .......................... noJumbo Build Merge Limit ................ 8Developer build ........................ noSanitizer .............................. noQtWebEngine required system libraries:fontconfig ........................... yesdbus ................................. yesnss .................................. yeskhr .................................. yesglibc ................................ yesQtWebEngine required system libraries for qpa-xcb:x11 .................................. yeslibdrm ............................... yesxcomposite ........................... yesxcursor .............................. yesxi ................................... yesxtst ................................. yesOptional system libraries used:re2 .................................. noicu .................................. nolibwebp, libwebpmux and libwebpdemux . noopus ................................. noffmpeg ............................... nolibvpx ............................... nosnappy ............................... noglib ................................. yeszlib ................................. yesminizip .............................. nolibevent ............................. nojsoncpp .............................. noprotobuf ............................. nolibxml2 and libxslt .................. nolcms2 ................................ nopng .................................. noJPEG ................................. noharfbuzz ............................. nofreetype ............................. yes
Qt WebEngineCore:Embedded build ......................... noFull debug information ................. noPepper Plugins ......................... yesPrinting and PDF ....................... yesProprietary Codecs ..................... yesSpellchecker ........................... yesNative Spellchecker .................... noWebRTC ................................. yesPipeWire over GIO ...................... noGeolocation ............................ yesWebChannel support ..................... yesKerberos Authentication ................ noExtensions ............................. yesNode.js ................................ noSupport qpa-xcb ........................ yesUse ALSA ............................... yesUse PulseAudio ......................... yes
Qt WebEngineQml:Support Qt WebEngine Qml ............... yesUI Delegates ........................... yesTest Support ........................... no
Qt WebEngineWidgets:Support Qt WebEngine Widgets ........... yes
Qt PDF:Support V8 ............................. noSupport XFA ............................ noSupport XFA-BMP ........................ noSupport XFA-GIF ........................ noSupport XFA-PNG ........................ noSupport XFA-TIFF ....................... no
Qt PDF Widgets:Support Qt PDF Widgets ................. yesWARNING: Building without node.js will disable some features of QtWebEngine DevTools.Qt is now configured for building. Just run 'make'.
Once everything is built, you must run 'make install'.
Qt will be installed into '/home/Leou/Qt/5.15.2/gcc_64'.Prior to reconfiguration, make sure you remove any leftovers from
the previous build.

执行make

make -j14

如果出错,则多执行几次make命令
在这里插入图片描述

执行结束后:

mv -f libqwebengineview.so ../../../plugins/designer/libqwebengineview.so
objcopy --only-keep-debug ../../../plugins/designer/libqwebengineview.so ../../../plugins/designer/libqwebengineview.so.debug && objcopy --strip-debug ../../../plugins/designer/libqwebengineview.so && objcopy --add-gnu-debuglink=../../../plugins/designer/libqwebengineview.so.debug ../../../plugins/designer/libqwebengineview.so && chmod -x ../../../plugins/designer/libqwebengineview.so.debug
make[3]: 离开目录“/media/Leou/QtSrc/Src/qtwebengine/build/src/plugins/qwebengineview”
make[2]: 离开目录“/media/Leou/QtSrc/Src/qtwebengine/build/src/plugins”
rm -f libQt5PdfWidgets.so.5.15.2 libQt5PdfWidgets.so libQt5PdfWidgets.so.5 libQt5PdfWidgets.so.5.15
g++ -Wl,--no-undefined -Wl,--version-script,QtPdfWidgets.version -Wl,--enable-new-dtags -Wl,-z,origin -Wl,-rpath,\$ORIGIN -Wl,-rpath,\$ORIGIN -Wl,-rpath-link,/home/Leou/Qt/5.15.2/gcc_64/lib -shared -Wl,-Bsymbolic-functions -Wl,-soname,libQt5PdfWidgets.so.5 -o libQt5PdfWidgets.so.5.15.2 .obj/qpdfview.o  -L/home/qt/openssl-1.1.1g/lib /media/Leou/QtSrc/Src/qtwebengine/build/lib/libQt5Pdf.so /home/Leou/Qt/5.15.2/gcc_64/lib/libQt5Widgets.so /home/Leou/Qt/5.15.2/gcc_64/lib/libQt5Gui.so /home/Leou/Qt/5.15.2/gcc_64/lib/libQt5Core.so -lpthread -lGL   
ln -s libQt5PdfWidgets.so.5.15.2 libQt5PdfWidgets.so
ln -s libQt5PdfWidgets.so.5.15.2 libQt5PdfWidgets.so.5
ln -s libQt5PdfWidgets.so.5.15.2 libQt5PdfWidgets.so.5.15
rm -f ../../lib/libQt5PdfWidgets.so.5.15.2
mv -f libQt5PdfWidgets.so.5.15.2 ../../lib/libQt5PdfWidgets.so.5.15.2
rm -f ../../lib/libQt5PdfWidgets.so
rm -f ../../lib/libQt5PdfWidgets.so.5
rm -f ../../lib/libQt5PdfWidgets.so.5.15
mv -f libQt5PdfWidgets.so ../../lib/libQt5PdfWidgets.so
mv -f libQt5PdfWidgets.so.5 ../../lib/libQt5PdfWidgets.so.5
mv -f libQt5PdfWidgets.so.5.15 ../../lib/libQt5PdfWidgets.so.5.15
objcopy --only-keep-debug ../../lib/libQt5PdfWidgets.so.5.15.2 ../../lib/libQt5PdfWidgets.so.5.15.2.debug && objcopy --strip-debug ../../lib/libQt5PdfWidgets.so.5.15.2 && objcopy --add-gnu-debuglink=../../lib/libQt5PdfWidgets.so.5.15.2.debug ../../lib/libQt5PdfWidgets.so.5.15.2 && chmod -x ../../lib/libQt5PdfWidgets.so.5.15.2.debug
make[2]: 离开目录“/media/Leou/QtSrc/Src/qtwebengine/build/src/pdfwidgets”
make[1]: 离开目录“/media/Leou/QtSrc/Src/qtwebengine/build/src”

可以看到lib下的产物
在这里插入图片描述

安装

直接替换安装当前Qt 的 QWebEngine

make install

测试

使用Qt的simplebrowser demo程序打开 html5test 网站测试功能:
在这里插入图片描述
可见已经支持了h264、mp3等音视频功能。

总结

在Linux上编译QWebEngine总体上比较容易,没有编译chromium那么困难。

https://doc.qt.io/qt-5/qtwebengine-platform-notes.html

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

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

相关文章

【RPC】gRPC 安装及使用

本文记录下 Mac 安装 gRPC 的过程。 参考:官网 1. gRPC 安装 gRPC 安装步骤如下: 克隆 grpc 代码 git clone --recurse-submodules -b v1.58.0 --depth 1 --shallow-submodules https://github.com/grpc/grpc注意:不要直接 git clone http…

计算机竞赛 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖,适合作为竞赛课题方向&#xff0…

一台PoE交换机可以为多少个设备提供供电?

如今在安防监控领域,许多网络设备都支持PoE供电。在网络监控工程中,为了节省布线成本并提高便捷性,大多数工程商选择使用PoE供电方案,也就是使用PoE交换机为监控摄像头提供电力。那么,一台功率输出以太网(P…

AI创作专家,免费的AI创作专家工具

AI创作专家是一种崭新的工具,它们利用先进的人工智能技术,帮助创作者和写手更轻松地应对创作挑战。这些工具不仅可以生成文字,还可以提供灵感、帮助构思和组织思路,使创作过程更加高效。 147GPT批量文章生成工具​www.147seo.com/…

深入探究序列化与反序列化:原理、应用和最佳实践

目录 什么是对象的序列化和反序列化序列化步骤反序列化步骤案例演示Java中哪些字段不能序列化序列化与反序列化的重要性序列化与反序列化的应用场景 什么是对象的序列化和反序列化 序列化(Serialization)是指将对象转化为字节流的过程,以便于…

想学嵌入式开发,薪资怎么样?

想学嵌入式开发,薪资怎么样? 对于嵌入式工程师来说呢,它重点学习内容就是首先一定要打好基础,如果从编程语言角度来讲,那么可以在语言上选C或者C,你可以选择其中任何一门语言作为你的入门。 最近很多小伙伴…

什么是魔法值

“魔法值”(Magic Value)是指在代码中直接使用的没有明确含义或解释的常量值。这些常量值通常以硬编码的方式出现在代码中,没有提供清晰的命名或注释来解释其含义。 使用魔法值会给代码的可读性、可维护性和可理解性带来问题。以下是一些使用…

C++ 字符串格式化方法

最近用C写代码的时候,发现C居然没有自己的字符串格式化的方法(PS:C20才推出了自己format),所以如果不支持C20,就没有现成的用,在网上找了一圈,发现了某位大神自己写的C字符串格式化的工具,就是一个Format.h头文件,可以直接用,很方便 Github地址:https://github.com/arajar/for…

Vue3数组重新赋值问题

Vue3数组重新赋值问题 1. reactive2. ref总结 vue3中使用组合式式API时定义响应式数据需要使用reactive或者ref,两者使用时有些许不同,下面通过重新赋值数组来说明两者的不同 1. reactive 主要用来定义复杂一些的响应式数据 先清空再赋值 const datas reactive([{id:1,name…

电磁逆设计中伴随变量法的详细指南:Python在Jupyter环境下的完整演示

第一部分:电磁逆设计与伴随变量法的基础介绍 1. 电磁逆设计简介 电磁逆设计是一种寻找最优电磁结构的方法,以实现特定的电磁响应。与传统的电磁设计方法不同,逆设计方法不是从已知的结构出发,而是从期望的响应出发,反…

前端 代码规范

阿里设计规范 !!! 项目中除注释之外 不要出现汉字情况!!! 代码格式化问题 vscode安装 Prettier插件 将其设为默认格式化 这个工具能够使输出代码保持风格一致。 注释与命名 样式命名 class、id都需小写命名使用英文,禁止使用…

Matlab编程中函数的重命名方法

Matlab编程中函数的重命名方法 在进行matlab编程时候,有时需要根据自己的习惯,需要对函数重命名。本文简要介绍重命名的方法。 一、重命名的方法 通过和赋值号实现,如下所示: 新函数名原函数名二、具体举例 clc clear all %将…

亚马逊云科技面向 macOS 的 Amazon 云服务器 EC2 M1 Mac 实例

北京 ——2022 年 8 月 10 日,日前,亚马逊云科技宣布基于 Apple 芯片 Mac mini 计算机构建的 Amazon Elastic Compute Cloud (Amazon EC2) M1 Mac 实例正式可用。该实例由亚马逊云科技 Nitro 系统提供支持,与基于 x86 的 Amazon EC2 Mac 实例…

requests处理 multipart/form-data 请求以及 boundary值问题

requests处理 multipart/form-data 请求以及 boundary值问题 前言1. 请求需要携带本地资源2. 请求需要携带json3. 总结 前言 关于 Content-type: multipart/form-data可以看一下这篇文章, 分析特别详细 HTTP协议之multipart/form-data请求分析 put和post区别不大, 只是上传资…

Flutter超好用的路由库-fluro

文章目录 fluro的介绍fluro简介安装和导入路由配置导航到路由参数传递 fluro的典型使用创建路由管理类代码解释例子小结 初始化路由导航到路由 总结 fluro的介绍 fluro简介 fluro是一个流行的Flutter插件,用于实现高级路由管理。它提供了灵活的路由配置和导航功能…

笔试面试相关记录(5)

(1)给定一个字符串,含有大写、小写字母,空格,数字,需要将其变为满足如下条件: 所有的数字需要换成空格,并且字符串的头尾不包含空格,且整个字符串不包含连续的两个空格。…

Maven的介绍和使用

Maven的作用 项目构建 依赖管理:避免资源间版本冲突问题 统一开发结构:提供统一的项目结构 Maven的使用 下载完压缩包之后放在合适的目录下,其中apache-maven-3.8.8文件夹是安装的maven,下面的repository是本地仓库&#xff…

月木学途开发 6.网址模块

概述 效果图 数据库设计 网站类型表 DROP TABLE IF EXISTS website; CREATE TABLE website (websiteId int(11) NOT NULL AUTO_INCREMENT,websiteImg longtext,websiteName varchar(255) DEFAULT NULL,websiteUrl longtext,websiteDesc varchar(255) DEFAULT NULL,websiteTy…

Python经典练习题(一)

文章目录 🍀第一题🍀第二题🍀第三题🍀第四题🍀第五题 🍀第一题 有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少? 这里我们使用…

AtCoder ABC260 G 累积和

题意 传送门 AtCoder ABC260 G Scalene Triangle Area 题解 暴力 前缀和 对每一行计算前缀和&#xff0c;处理每一个询问时暴力枚举每一行进行累加。总时间复杂度 O ( n ( n q ) ) O\Big(n(n q)\Big) O(n(nq))。 #include <bits/stdc.h> using namespace std;vo…