我使用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视频的外部页面(即第三方网站)加载到QWebView中。而且,从一开始就保持视频完全静音,并且绝对没有音频,这似乎是您要寻找的关键功能。
您page.mainFrame().evaluateJavaScript("...")
的解决方案似乎是最简单的方法,但是执行此脚本之前会有一定的滞后。
另一种方法是抓取目标网站,然后使用正则表达式或类似方法更改所有<video>
标签以添加静音属性,例如<video controls muted>
。对任何<embed>
标签也做类似的事情。然后,使用方法将该修改后的HTML加载到Web视图中setHtml()
,同时还要设置基本url,并可能设置Referer标头。然后,HTML将从一开始就呈现为静音。
另一个想法可能是用Qt本身拦截媒体URL(例如.mp4,.mov),并最初将它们保存在暂停的队列中,调用page.mainFrame().evaluateJavaScript("...")
以编程方式使<video>
and<audio>
标记静音,然后在evaluateJavaScript()
调用返回时允许队列继续进行。如果自动播放,则媒体应开始静音。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句