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

时间:2015-03-31 19:40:56

标签: qt flash qwebview

我使用Qt QWebView组件,它使用flash播放器进行视频播放。如何在我的QWebView内执行的flashplayer上禁用声音?

我考虑的一种方法是执行一些javascript代码来禁用播放器上的声音,但何时执行它?例如,如果在呼叫后#1;加载"

,则在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会停止声音但是那时已经发出了一些声音,我该如何立即停止声音?

2 个答案:

答案 0 :(得分:5)

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

解决方案1 ​​

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

解决方案2

另一种方法是抓取目标网站,然后使用正则表达式或类似的内容更改所有<video>标记以添加静音属性,例如<video controls muted>。对任何<embed>标签也做类似的事情。然后,使用setHtml()方法将此修改后的HTML加载到Web视图中,同时设置基本URL和可能的referer标头。然后HTML将从一开始就将您的视频静音呈现。

解决方案3

另一个想法可能是拦截Qt本身的媒体网址(例如.mp4,.mov),并最初将它们保持在暂停的队列中,调用page.mainFrame().evaluateJavaScript("...")以编程方式静音<video>和{ {1}}标记,然后在<audio>调用返回时允许队列继续。媒体,如果自动播放,应该开始静音。

答案 1 :(得分:3)

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

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. 你在双引号内使用双引号,这是一团糟。