检测是否在浏览器Javascript中播放音频
是否有一种全局方法可以检测何时在浏览器中播放或开始播放音频 类似于检测是否在浏览器Javascript中播放音频,javascript,media-player,audio-player,Javascript,Media Player,Audio Player,是否有一种全局方法可以检测何时在浏览器中播放或开始播放音频 类似于if(window.mediaPlaying()){… 没有将代码绑定到特定元素 编辑:这里重要的是能够检测任何音频,无论音频来自何处。无论它来自iframe、视频、Web音频API等。我在谷歌寻找解决方案,但我还没有找到任何东西。 也许你可以只在播放音频时检查一些具有X值的数据。如果你有一些按钮开始播放音频文件,也许你可以通过在rep.按钮上添加一些事件侦听器来确保音频正在播放 也许有点像在“音频”标记中添加事件侦听器?如果我没
if(window.mediaPlaying()){…
没有将代码绑定到特定元素
编辑:这里重要的是能够检测任何音频,无论音频来自何处。无论它来自iframe、视频、Web音频API等。我在谷歌寻找解决方案,但我还没有找到任何东西。 也许你可以只在播放音频时检查一些具有X值的数据。如果你有一些按钮开始播放音频文件,也许你可以通过在rep.按钮上添加一些事件侦听器来确保音频正在播放 也许有点像在“音频”标记中添加事件侦听器?如果我没记错的话,音频标记有一个“暂停”属性。。。 现在我只记得音频有“暂停”属性 此外,您可能需要检查此主题
我在五秒钟前发现它,jaja有一个
playbackState
property(),但不是所有浏览器都支持它
if(navigator.mediaSession.playbackState === "playing"){...
任何人都不应该使用它,但它是有效的 基本上,我发现访问整个窗口音频的唯一方法是使用 从那里可以将a馈入a,a可用于检查音频音量是否大于零 (仅在Linux上的Chrome 80中测试) 使用代码片段iframe上的
,:
var audioCtx=newaudiocontext();
var Analyzer=audioCtx.createAnalyzer();
var bufferLength=Analyzer.fftSize;
var dataArray=新的Float32Array(bufferLength);
window.isAudioPlaying=()=>{
Analyzer.getFloatTimeDomainData(数据数组);
对于(变量i=0;i{
if(stream.getAudioTracks().length>0){
var source=audioCtx.createMediaStreamSource(流);
源。连接(分析仪);
document.body.classList.add('ready');
}否则{
console.log('获取流失败。音频不共享或不支持浏览器');
}
}).catch(err=>console.log(“无法打开捕获:”,err));
事实上,我搜索了很多并阅读了所有关于的MDN文档,但在显示音频播放的窗口上没有找到任何全局标志,但我有一种显示任何音频播放的巧妙方法,无论是iframe还是视频,但关于Web音频API,我不确定,巧妙的方法是:
const allAudio = Array.from( document.querySelectorAll('audio') );
const allVideo = Array.from( document.querySelectorAll('video') );
const isPlaying = [...allAudio, ...allVideo].some(item => !item.paused);
现在,购买isPlaying
标志,我们可以在浏览器中检测播放。“不将代码绑定到特定元素”是问题的一个关键方面。(至少对我来说。)没错,在这种情况下,应该首先为元素设置playbackState
(默认值为“无”
),但可以为任何媒体源设置。如果无法控制源元素,则可以按照Ed的逻辑在文档中查找媒体元素(音频、视频、iframe)并检查其中是否有人在播放音频。我必须花一些时间来研究这一点。有一些选项可用于访问iframe的文档及其内部DOM,如contentWindow
()和frames
()。我还发现一个相关的问题可能会有所帮助。这几乎是肯定的,这依赖于音频/视频元素成为DOM的一部分。我非常确信,您可以使用JS创建音频元素&在不将其添加到DOM的情况下轻松播放它;因此,这对该场景不起作用。解决方案不错,但不幸的是,这并不总是可行的rk。我在Google Meet上试过检测是否有人在说话,但消息说即使没有人说话,音频也在播放。即使每个人都静音,标签上似乎也有一点静电。我制作了一个更新的小提琴,显示了音频图。
const allAudio = Array.from( document.querySelectorAll('audio') );
const allVideo = Array.from( document.querySelectorAll('video') );
const isPlaying = [...allAudio, ...allVideo].some(item => !item.paused);