问题描述
我正在使用 webengine 创建一个简单的网络浏览器。我去了 youtube 并尝试播放直播但失败了。每个需要在浏览器中支持 HTML5 视频的视频都会发生同样的事情。我没有看到任何与此相同的最近问题。 Qt 表示 webengine 从他们发布的 Qt5 开始支持 HTML5。对相同问题的一些旧答案建议他们自己编译 qtwebengine。我尝试了几次都失败了(可能是我的电脑无法完成这项工作)。其他人说从代码中启用专有插件。但就我而言,它也不起作用。
运行代码也会记录错误 WebEngineContext used before QtWebEngine::initialize() or OpenGL context creation Failed.
这是我的简单 qml 代码。
import QtQuick 2.12
import QtQuick.Window 2.12
import QtWebEngine 1.0
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
WebEngineView{
anchors.fill:parent
url:"https://www.youtube.com/watch?v=iL53Y28Rp84"
}
}
Qt 版本:5.15.1(GNU 公共许可证)
使用 qt 在线安装程序安装。
解决方法
您的问题很可能是 - 正如控制台中的错误所说 - 您尚未初始化 Web 引擎。在您的 main()
中,您必须在进行任何渲染之前调用 QtWebEngine::initialize()
。所以你的主函数应该是这样的:
#include <QtWebEngine>
int main(int argc,char* argv[])
{
QGuiApplication a(argc,argv);
QtWebEngine::initialize();
(...)
}
根据 Qt 文档,initialize()
函数确保可以在 GUI 和渲染器进程之间共享 OpenGL 上下文。
Link to the Qt documentation.
您收到的错误消息很简单,他们已经在另一个答案中为您提供了解决方案,而我的答案是解决根本问题。无法播放 youtube 视频,因为 Chromium(和 Qt WebEngine)不是通过启用专有编解码器编译的。解决方案是在启用该标志的情况下重新编译 Qt WebEngine。
从评论中可以看出OP使用的是Qt 5.15.1,所以他必须遵循以下步骤:
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install -y libxcursor-dev libxcomposite-dev libxdamage-dev libxrandr-dev libxtst-dev libxss-dev libdbus-1-dev libevent-dev libfontconfig1-dev libcap-dev libpulse-dev libudev-dev libpci-dev libnss3-dev libasound2-dev libegl1-mesa-dev gperf bison nodejs
git clone -b 5.15.1 git://code.qt.io/qt/qtwebengine.git
cd qtwebengine
git submodule update --init
/path/of/Qt/5.15.1/gcc_64/bin/qmake . -- -webengine-proprietary-codecs
make
make install
注意:根据评论中显示的日志 /path/of/Qt/5.15.1/gcc_64/bin/qmake
在您的情况下是 /mnt/volume1/main_file_folder/Home/Qt/5.15.1/gcc_64/bin/qmake