如何在我的自定义应用程序中禁用 flashplayer 的声音?

How to disable sound on flashplayer in my custom application?

我使用Qt QWebView 组件,它使用flash-player 来播放视频。如何禁用在我的 QWebView 中执行的 flashplayer 的声音?

我考虑的一种方法是执行一些 javascript 代码来禁用播放器的声音,但是什么时候执行呢?例如下一个代码如果 运行 在调用 "load":

后 1 秒禁用声音
page.mainFrame().evaluateJavaScript("""
    var mute_all_tags=function(tag){
        var elems = document.getElementsByTagName(tag);
        for(var i = 0; i < elems.length; i++){
            elems[i].muted=true;
            //alert(elems[i]);
        }
    }
    mute_all_tags("video");
    mute_all_tags("audio");
""")

较早的呼叫不会停止声音。调用 QWebView.loadFinished 停止声音但那一刻已经发出一些声音,我怎样才能立即停止声音?

听起来您正在将带有 HTML5 视频或 Flash 视频的外部页面(即第 3 方网站)加载到您的 QWebView 中。此外,让视频从一开始就保持静音,绝对没有音频似乎是您正在寻找的关键功能。

解决方案 1

您的 page.mainFrame().evaluateJavaScript("...") 似乎是最简单的解决方案,但在执行此脚本之前会有延迟。

解决方案 2

另一种方法是抓取目标网站,然后使用正则表达式或类似的东西更改所有 <video> 标签以添加静音 属性 例如<video controls muted>。对任何 <embed> 标签也做类似的事情。然后,使用 setHtml() 方法将这个修改后的 HTML 加载到 Web 视图中,同时设置基础 url,可能还有引用 header。然后 HTML 将从一开始就将您的视频设为静音。

解决方案 3

另一个想法可能是使用 Qt 本身拦截媒体 URL(例如 .mp4、.mov),并最初将它们保持在暂停状态 queue,调用您的 page.mainFrame().evaluateJavaScript("...") 以编程方式使 <video><audio> 标签,然后允许 queue 在 evaluateJavaScript() 调用 returns 时继续。媒体,如果 auto-playing,应该开始静音。

请将您的代码修改为以下内容:

page.mainFrame().evaluateJavaScript("var mute_all_tags=function(tag){var elems = document.getElementsByTagName(tag);for(var i = 0; i < elems.length; i++){elems[i].muted=true;}}mute_all_tags('video');mute_all_tags('audio');")

您代码中的字符串无效:

  1. 您在没有 Concatenation 的情况下向字符串添加双引号。

  2. 你在双引号内使用双引号,这是一团糟。