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

use*_*125 3 flash qt qwebview

我使用Qt QWebView组件,它使用flash播放器进行视频播放.如何在我的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");
""")
Run Code Online (Sandbox Code Playgroud)

早先的电话不会停止声音.调用QWebView.loadFinished会停止声音但是那时已经发出了一些声音,我该如何立即停止声音?

Dra*_*kes 5

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

解决方案1

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

解决方案2

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

解决方案3

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