我正在为网页上的MP4视频创建自定义控制器。控制器包括音量滑块。一些要播放的视频没有音轨。最好禁用这些视频的音量滑块,这样在更改音量滑块的位置时用户不会感到困惑。
是否存在用于检查MP4文件是否具有音轨的属性或技巧? (jQuery是一个选项)。
编辑:使用@dandavis的建议,我现在有了Chrome的这个解决方案(以及Opera上的.ogg):
var video = document.getElementById("video")
var volume = document.getElementById("volume-slider")
function initializeVolume() {
var enableVolume = true
var delay = 1
if (video.webkitAudioDecodedByteCount !== undefined) {
// On Chrome, we can check if there is audio. Disable the volume
// control by default, and reenable it as soon as a non-zero value
// for webkitAudioDecodedByteCount is detected.
enableVolume = false
startTimeout()
function startTimeout () {
if (!!video.webkitAudioDecodedByteCount) {
enableVolume = true
toggleVolumeEnabled(enableVolume)
} else {
// Keep trying for 2 seconds
if (delay < 2048) {
setTimeout(startTimeout, delay)
delay = delay * 2
}
}
}
}
toggleVolumeEnabled(enableVolume)
}
function toggleVolumeEnabled(enableVolume) {
volume.disabled = !enableVolume
}
video.webkitAudioDecodedByteCount值最初为0.在我的测试中,最多可能需要256ms来填充非零值,所以我已经包含了一个超时来继续检查(暂时)。
答案 0 :(得分:0)
可能有更好的方法可以做到这一点,尽管只需使用常规javascript
启用webkit
或mozilla
的浏览器即可。 webkit
分别使用this.audioTracks
和mozilla
使用this.mozHasAudio
:
document.getElementById("video").addEventListener("loadeddata", function() {
if ('WebkitAppearance' in document.documentElement.style)
var hasAudioTrack = this.audioTracks.length;
else if (this.mozHasAudio)
var hasAudioTrack = 1;
if (hasAudioTrack > 0)
alert("audio track detected");
else
alert("audio track not detected");
});
&#13;
<video id="video" width="320" height="240" controls>
<source src="http://media.w3.org/2010/05/video/movie_300.mp4" type="video/mp4">
</video>
&#13;
还有一个功能this.webkitAudioDecodedByteCount
,但是,我从来没有运气好。