如何在我的自定义应用程序中禁用 flashplayer 上的声音?
Posted
技术标签:
【中文标题】如何在我的自定义应用程序中禁用 flashplayer 上的声音?【英文标题】:How to disable sound on flashplayer in my custom application? 【发布时间】:2015-03-31 19:40:56 【问题描述】:我使用 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 会停止声音,但在那一刻已经发出了一些声音,我怎样才能立即停止声音?
【问题讨论】:
WebView 中的 html 是什么?首先你说它是一个flashplayer,然后你引用<audio>
/<video>
标签。
例如来自 youtube 的视频。
您是否控制提供的 HTML,或者它是来自 YouTube 页面的第 3 方?
【参考方案1】:
听起来您正在将带有 HTML5 视频或 Flash 视频的外部页面(即第 3 方网站)加载到您的 QWebView 中。此外,从一开始就保持视频静音且绝对没有音频似乎是您正在寻求的关键功能。
解决方案 1
您的page.mainFrame().evaluateJavaScript("...")
似乎是最简单的解决方案,但在执行此脚本之前会有延迟。
解决方案 2
另一种方法是抓取目标网站,然后使用正则表达式或类似的方法更改所有 <video>
标签以添加静音属性,例如<video controls muted>
。对任何<embed>
标签也做类似的事情。然后,使用 setHtml()
方法将修改后的 HTML 加载到 Web 视图中,同时设置基本 url,可能还有引用标头。然后 HTML 将在您的视频从一开始就静音的情况下呈现。
解决方案 3
另一个想法可能是使用 Qt 本身拦截媒体 URL(例如 .mp4、.mov),并最初将它们保存在暂停队列中,调用您的 page.mainFrame().evaluateJavaScript("...")
以编程方式使 <video>
和 <audio>
标记静音,然后在evaluateJavaScript()
调用返回时允许队列继续。媒体,如果自动播放,应该开始静音。
【讨论】:
【参考方案2】:请将您的代码修改为以下内容:
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 的情况下为字符串添加双引号。
您在双引号内使用双引号,这是一团糟。
【讨论】:
视频静音前的延迟怎么办?他怎么能解决这个问题? 我的代码在我调用它时有效,我提到了这一点。问题是 - 何时调用它。这是 python,三引号可以满足我的需要。 对不起,我没有很好地回答这个问题,但是我看到你已经找到了你想要的东西,祝你好运:),即使我不知道你的代码在没有连接的情况下是如何工作的,即使它是蟒蛇。以上是关于如何在我的自定义应用程序中禁用 flashplayer 上的声音?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 7 上的 UINavigationController 中禁用向后滑动手势