我使用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会停止声音但是那时已经发出了一些声音,我该如何立即停止声音?
听起来您正在将带有HTML5视频或Flash视频的外部页面(即第三方网站)加载到QWebView中.此外,从一开始就保持视频静音,绝对没有音频,这似乎是您正在寻求的关键功能.
您page.mainFrame().evaluateJavaScript("...")似乎是最简单的解决方案,但在执行此脚本之前会有延迟.
另一种方法是刮掉目标网站,然后使用正则表达式或类似的东西更改所有<video>标签以添加静音属性,例如<video controls muted>.对任何<embed>标签也做类似的事情.然后,使用该setHtml()方法将此修改后的HTML加载到Web视图中,同时设置基本URL以及可能的referer标头.然后HTML将呈现,您的视频从一开始就静音.
另一个想法可能是使用Qt本身拦截媒体URL(例如.mp4,.mov),并最初将它们保持在暂停的队列中,调用您page.mainFrame().evaluateJavaScript("...")以编程方式静音<video>和<audio>标记,然后在evaluateJavaScript()调用返回时允许队列继续.媒体,如果自动播放,应该开始静音.