如何在我的自定义应用程序中禁用 flashplayer 的声音?
How to disable sound on flashplayer in my custom application?
我使用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 视频的外部页面(即第 3 方网站)加载到您的 QWebView 中。此外,让视频从一开始就保持静音,绝对没有音频似乎是您正在寻找的关键功能。
解决方案 1
您的 page.mainFrame().evaluateJavaScript("...")
似乎是最简单的解决方案,但在执行此脚本之前会有延迟。
解决方案 2
另一种方法是抓取目标网站,然后使用正则表达式或类似的东西更改所有 <video>
标签以添加静音 属性 例如<video controls muted>
。对任何 <embed>
标签也做类似的事情。然后,使用 setHtml()
方法将这个修改后的 HTML 加载到 Web 视图中,同时设置基础 url,可能还有引用 header。然后 HTML 将从一开始就将您的视频设为静音。
解决方案 3
另一个想法可能是使用 Qt 本身拦截媒体 URL(例如 .mp4、.mov),并最初将它们保持在暂停状态 queue,调用您的 page.mainFrame().evaluateJavaScript("...")
以编程方式使 <video>
和 <audio>
标签,然后允许 queue 在 evaluateJavaScript()
调用 returns 时继续。媒体,如果 auto-playing,应该开始静音。
请将您的代码修改为以下内容:
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 的情况下向字符串添加双引号。
你在双引号内使用双引号,这是一团糟。
我使用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 视频的外部页面(即第 3 方网站)加载到您的 QWebView 中。此外,让视频从一开始就保持静音,绝对没有音频似乎是您正在寻找的关键功能。
解决方案 1
您的 page.mainFrame().evaluateJavaScript("...")
似乎是最简单的解决方案,但在执行此脚本之前会有延迟。
解决方案 2
另一种方法是抓取目标网站,然后使用正则表达式或类似的东西更改所有 <video>
标签以添加静音 属性 例如<video controls muted>
。对任何 <embed>
标签也做类似的事情。然后,使用 setHtml()
方法将这个修改后的 HTML 加载到 Web 视图中,同时设置基础 url,可能还有引用 header。然后 HTML 将从一开始就将您的视频设为静音。
解决方案 3
另一个想法可能是使用 Qt 本身拦截媒体 URL(例如 .mp4、.mov),并最初将它们保持在暂停状态 queue,调用您的 page.mainFrame().evaluateJavaScript("...")
以编程方式使 <video>
和 <audio>
标签,然后允许 queue 在 evaluateJavaScript()
调用 returns 时继续。媒体,如果 auto-playing,应该开始静音。
请将您的代码修改为以下内容:
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 的情况下向字符串添加双引号。
你在双引号内使用双引号,这是一团糟。