Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检测是否在浏览器Javascript中播放音频_Javascript_Media Player_Audio Player - Fatal编程技术网

检测是否在浏览器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);