【问题标题】:Showing (youtube)-videos in a QWebEngineView在 QWebEngineView 中显示(youtube)视频
【发布时间】:2019-06-24 13:09:54
【问题描述】:

我有一个使用QWebEngineView (Qt 5.9) 的WebBrowser 应用程序。我想加载一个嵌入 Youtube 视频的页面。页面加载完美,但视频无法正常工作。 我在尝试启动时收到的消息是:
Requests to the server have been blocked by an extension

我尝试激活插件并设置功能权限,但没有任何区别。

m_webView->settings()->setAttribute(QWebEngineSettings::PluginsEnabled, true);

m_webView->page()->setFeaturePermission(QUrl("https://www.youtube.com/watch?v=rNSnfXl1ZjU"),
                                    QWebEnginePage::MediaAudioVideoCapture,
                                    QWebEnginePage::PermissionGrantedByUser);

我对@9​​87654324@ 有点陌生。我需要启用视频编解码器吗? 非常感谢您,希望您能帮助我。

【问题讨论】:

    标签: qt youtube qwebengineview video-codecs


    【解决方案1】:

    以下小应用程序可按需要运行。如果我在我的小应用程序中取消注释设置部分,它会锁定 YouTube 视频的播放。

    我建议您手动将所有设置一一激活,以找出阻止视频在您的环境中运行的原因。

    控制台输出也可能非常有助于找出问题的原因。

    #include <QWebEngineView>
    #include <QWebEngineSettings>
    #include <QApplication>
    
    int main(int argc, char **args)
    {
        QApplication app(argc, args);
        auto view = new QWebEngineView; 
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::AllowGeolocationOnInsecureOrigins, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::Accelerated2dCanvasEnabled, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::AllowRunningInsecureContent, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::AllowWindowActivationFromJavaScript, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::JavascriptCanAccessClipboard, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::FullScreenSupportEnabled, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::LocalContentCanAccessFileUrls, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::JavascriptCanOpenWindows, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::JavascriptEnabled, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::ScreenCaptureEnabled, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::PluginsEnabled, false);
        //view->settings()->setAttribute(QWebEngineSettings::WebAttribute::LocalStorageEnabled, false);
    
        view->setUrl(QUrl("https://www.youtube.com/watch?v=rNSnfXl1ZjU"));
        view->show();
        app.exec();
    }
    

    停用所有设置后,我将得到以下控制台输出:

    js: Refused to display 'https://accounts.google.com/ServiceLogin?continue=https%3A%2F%2Fwww.youtube.com%2Fsignin%3Fnext%3D%252Fsignin_passive%26hl%3Dde%26feature%3Dpassive%26app%3Ddesktop%26action_handle_signin%3Dtrue&hl=de&passive=true&service=youtube&uilel=3' in a frame because it set 'X-Frame-Options' to 'deny'.
    

    【讨论】:

    • 首先:非常感谢您回答我!我尝试了这个小例子,它也适用于我。但是在我的大项目中它仍然不起作用。我不确定是否有其他东西阻止了这个......也许 QWebEngineUrlRequestInterceptor 可能会造成一些麻烦?但我认为我需要以某种方式自己解决这个问题,因为这是在此处发布大量代码的方式。再次感谢您!
    • @Vanessa:如果我有一些缺陷,我会尝试构建一个小的副项目,甚至更好的测试,这将重现这个缺陷。然后你将有一个最小可重现的例子(当然可以在这里发布,但也会对你有很大帮助。)
    • 非常感谢您,我会尽一切努力帮助您! :)
    • 我发现了问题。它是 QWebEngineUrlRequestInterceptor。我们有一个白名单,但问题是我允许例如“www.youtube.com”,但视频来自我们不知道的 CDN...
    猜你喜欢
    • 2018-02-12
    • 2016-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2016-07-28
    • 2016-05-22
    相关资源
    最近更新 更多