如果 正在播放音频,请检测

问题描述 投票:4回答:2

问题

我想知道嵌入在我网站中的<iframe>是否正在播放音频。

理想情况下<iframe>播放音频的声音也“大声”,但这是可选的。

请注意,<iframe>不在同一原点上,因此无法检查<iframe>

我的具体用例

我是https://www.timer-tab.com/的开发人员,当时间到了时,YouTube视频开始播放。 YouTube视频正在<iframe>中播放。我想知道YouTube <iframe>是否发出声音。如果未发出任何声音,则使用Web Audio API播放后备声音。 (YouTube <iframe>有时不发出声音。例如,当用户将其YouTube音量设置设为静音时。不幸的是,无法通过postMessage打开YouTube <iframe>来获取该信息。)

相关问题

Detect if audio is playing in browser Javascript

这不是重复的;我的问题专门询问<iframe>音频检测,而相关问题询问所有音频检测。

javascript web audio iframe web-deployment
2个回答
1
投票

除非API允许,否则。出于安全原因,您不能。


0
投票

这可能无法通过标题回答您的问题(我什至认为这是不可能的),但是它可以解决您的根本问题。您可以使用YouTube的JavaScript API来检测音频是否被静音,或者根据需要将其取消静音:

var tag = document.createElement('script');

tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

var player;

function onYouTubeIframeAPIReady() {
  player = new YT.Player('ytplayer', {
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}

function onPlayerReady(event) {
  event.target.playVideo();
}

function onPlayerStateChange(event) {
  if (event.data == YT.PlayerState.PLAYING) {
    console.log("isMuted = " + event.target.isMuted());
    event.target.unMute();
    event.target.setVolume(100);
  }
}
<iframe id="ytplayer" type="text/html" src="https://www.youtube.com/embed/dQw4w9WgXcQ?controls=0&showinfo=0&rel=0&enablejsapi=1" frameborder="0"></iframe>

请注意,由于此代码段不允许iframe元素,因此无法在StackOverflow上正常运行。我在本地对其进行了测试,但是仍然有效。

您可以在文档(YouTube Player API Reference for iframe Embeds)中找到更多信息,例如配置属性和所有可用功能。

© www.soinside.com 2019 - 2024. All rights reserved.