我使用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会停止声音但是那时已经发出了一些声音,我该如何立即停止声音?
答案 0 :(得分:5)
听起来您正在将带有HTML5视频或Flash视频的外部网页(即第三方网站)加载到QWebView中。此外,从一开始就保持视频静音,绝对没有音频,这似乎是您正在寻找的关键功能。
您的page.mainFrame().evaluateJavaScript("...")
似乎是最简单的解决方案,但在执行此脚本之前会有延迟。
另一种方法是抓取目标网站,然后使用正则表达式或类似的内容更改所有<video>
标记以添加静音属性,例如<video controls muted>
。对任何<embed>
标签也做类似的事情。然后,使用setHtml()
方法将此修改后的HTML加载到Web视图中,同时设置基本URL和可能的referer标头。然后HTML将从一开始就将您的视频静音呈现。
另一个想法可能是拦截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');")
代码中的字符串无效:
您在没有 Concatenation 的情况下为字符串添加双引号。
你在双引号内使用双引号,这是一团糟。