检测音频是否在浏览器 Javascript 中播放

Chr*_*ris 17 javascript media-player audio-player

是否有一种全局方法可以检测音频何时在浏览器中播放或开始播放。

类似的想法 if(window.mediaPlaying()){...

没有将代码绑定到特定元素?

编辑:这里重要的是无论音频来自何处,都能够检测到任何音频。无论是来自 iframe、视频、Web Audio API 等。

Tro*_*bol 10

没有人应该使用它,但它有效。

基本上,我发现访问整个窗口音频的唯一方法是使用MediaDevices.getDisplayMedia()

从那里可以将MediaStream馈送到AnyalizerNode 中,该节点可用于检查音频音量是否大于零。

仅适用于 Chrome 和 Edge(仅在 Linux 上的 Chrome 80 中测试)

的jsfiddle<video><audio>和YouTube!

重要的代码位(由于代码段 iframe 上的功能策略,无法在工作代码段中发布):

var audioCtx = new AudioContext();
var analyser = audioCtx.createAnalyser();

var bufferLength = analyser.fftSize;
var dataArray = new Float32Array(bufferLength);

window.isAudioPlaying = () => {
  analyser.getFloatTimeDomainData(dataArray);
  for (var i = 0; i < bufferLength; i++) {
    if (dataArray[i] != 0) return true;

  }
  return false;
}

navigator.mediaDevices.getDisplayMedia({
     video: true,
     audio: true
   })
   .then(stream => {
      if (stream.getAudioTracks().length > 0) {
        var source = audioCtx.createMediaStreamSource(stream);
        source.connect(analyser);

        document.body.classList.add('ready');
      } else {
        console.log('Failed to get stream. Audio not shared or browser not supported');
      }

   }).catch(err => console.log("Unable to open capture: ", err));
Run Code Online (Sandbox Code Playgroud)

  • 即使每个人都静音,但选项卡中似乎还是有一点静电声。我制作了一个更新的小提琴,显示音频图表。[jsfiddle](https://jsfiddle.net/Thornton_Fernbacher/u78pce9g/62/) (3认同)

小智 0

我一直在谷歌寻找解决方案,但我还没有找到任何东西。也许您可以仅在播放音频时检查一些具有 X 值的数据。如果您有一些开始播放音频文件的按钮,也许您可​​以通过在代表上添加一些事件侦听器来确定音频正在播放。按钮...

也许像向“音频”标签添加事件侦听器之类的东西?如果我没记错的话,音频标签有一个“暂停”属性...现在我只记得音频有“暂停”属性...

另外,您可能想检查此主题HTML5 检查音频是否正在播放?

我五秒前才找到它 jaja