问题
我想知道嵌入在我网站中的<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>
音频检测,而相关问题询问所有音频检测。
除非API允许,否则。出于安全原因,您不能。
这可能无法通过标题回答您的问题(我什至认为这是不可能的),但是它可以解决您的根本问题。您可以使用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)中找到更多信息,例如配置属性和所有可用功能。