Javascript HTML5视频,当没有音轨时如何检测?
我正在制作一个chrome应用程序,我想为视频播放定制控件,但我在使用静音按钮时遇到了一些困难。大多数将在应用程序中播放的视频都是无声的,因此我希望能够在没有音轨时禁用该按钮,就像chrome在默认控件中所做的那样 尝试使用音量值,但即使没有音轨,也会返回“1”。检查视频是否静音也不起作用 这是一个例子Javascript HTML5视频,当没有音轨时如何检测?,javascript,html,Javascript,Html,我正在制作一个chrome应用程序,我想为视频播放定制控件,但我在使用静音按钮时遇到了一些困难。大多数将在应用程序中播放的视频都是无声的,因此我希望能够在没有音轨时禁用该按钮,就像chrome在默认控件中所做的那样 尝试使用音量值,但即使没有音轨,也会返回“1”。检查视频是否静音也不起作用 这是一个例子 有什么建议吗?在某个时候,浏览器可能会开始实现。现在,您可以对webkit使用webkitAudioDecodedByteCount,对firefox使用MozasAudio document.
有什么建议吗?在某个时候,浏览器可能会开始实现。现在,您可以对webkit使用
webkitAudioDecodedByteCount
,对firefox使用MozasAudio
document.getElementById("video").addEventListener("loadeddata", function() {
if (typeof this.webkitAudioDecodedByteCount !== "undefined") {
// non-zero if video has audio track
if (this.webkitAudioDecodedByteCount > 0)
console.log("video has audio");
else
console.log("video doesn't have audio");
}
else if (typeof this.mozHasAudio !== "undefined") {
// true if video has audio track
if (this.mozHasAudio)
console.log("video has audio");
else
console.log("video doesn't have audio");
}
else
console.log("can't tell if video has audio");
});
在某个时候,浏览器可能会开始实现。现在,您可以对webkit使用
webkitAudioDecodedByteCount
,对firefox使用MozasAudio
document.getElementById("video").addEventListener("loadeddata", function() {
if (typeof this.webkitAudioDecodedByteCount !== "undefined") {
// non-zero if video has audio track
if (this.webkitAudioDecodedByteCount > 0)
console.log("video has audio");
else
console.log("video doesn't have audio");
}
else if (typeof this.mozHasAudio !== "undefined") {
// true if video has audio track
if (this.mozHasAudio)
console.log("video has audio");
else
console.log("video doesn't have audio");
}
else
console.log("can't tell if video has audio");
});
基于upuoth答案的较短功能,并扩展为支持IE10+
function hasAudio (video) {
return video.mozHasAudio ||
Boolean(video.webkitAudioDecodedByteCount) ||
Boolean(video.audioTracks && video.audioTracks.length);
}
用法:
var video = document.querySelector('video');
if(hasAudio(video)) {
console.log("video has audio");
} else{
console.log("video doesn't have audio");
}
基于upuoth答案的较短功能,并扩展为支持IE10+
function hasAudio (video) {
return video.mozHasAudio ||
Boolean(video.webkitAudioDecodedByteCount) ||
Boolean(video.audioTracks && video.audioTracks.length);
}
用法:
var video = document.querySelector('video');
if(hasAudio(video)) {
console.log("video has audio");
} else{
console.log("video doesn't have audio");
}
出于某种原因,Chrome在某个时候停止了工作——即使在等待“loadeddata”和“loadedmetadata”事件,甚至“canplaythrough”事件之后也是如此。这可能与我正在使用的视频格式(webm)有关。无论如何,我通过短时间播放视频解决了这个问题:
//等待“canplaythrough”事件后:
hasAudio(视频);//假的
video.play();
等待新的承诺(r=>setTimeout(r,1000));
video.pause();
hasAudio(视频);//真的
出于某种原因,Chrome在某个时候停止了工作,即使在等待“loadeddata”和“loadedmetadata”事件,甚至“canplaythrough”事件之后也是如此。这可能与我正在使用的视频格式(webm)有关。无论如何,我通过短时间播放视频解决了这个问题:
//等待“canplaythrough”事件后:
hasAudio(视频);//假的
video.play();
等待新的承诺(r=>setTimeout(r,1000));
video.pause();
hasAudio(视频);//真的
我认为这在目前是不可能的。另外,有多个视频有音频曲目,但始终保持静音。永不说永不:您可以将视频音频输入webAudio API以验证非静音。只能在chrome和FF上工作,我不知道怎么做,但可以做到…@dandavis:那应该可以。我真倒霉@丹达维斯,我会调查的,谢谢。我认为这目前不可能。另外,有多个视频有音频曲目,但始终保持静音。永不说永不:您可以将视频音频输入webAudio API以验证非静音。只能在chrome和FF上工作,我不知道怎么做,但可以做到…@dandavis:那应该可以。我真倒霉@dandavis我会调查的,谢谢。大家不要忘记视频元素上的addEventListener(“loadeddata”)
。我在我的视频元素上为loadeddata
和loadedmetadata
登录了hasAudio(video)
内部事件侦听器,在我的例子中,loadedmetadata
记录了false
,而loadeddata
记录了true
。大家不要忘记视频元素上的addEventListener(“loadeddata”)
。我记录了hasAudio(视频)
我的视频元素上的内部事件侦听器,用于loadeddata
和loadedmetadata
,在我的情况下,loadedmetadata
被记录false
,而loadeddata
被记录true
。这对于音频总是返回0,您知道如何检查音频是否有声音吗?对于音频,这总是返回0,您知道如何检查音频是否有声音吗?