我正在网页上为 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。在我的测试中,可能需要长达 256 毫秒才能填充非零值,因此我添加了一个超时以继续检查(一段时间)。
可能有更好的方法来做到这一点,尽管使用常规方法相当简单javascript
for webkit
or mozilla
启用的浏览器。webkit
利用this.audioTracks
and mozilla
uses 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");
});
<video id="video" width="320" height="240" controls>
<source src="http://media.w3.org/2010/05/video/movie_300.mp4" type="video/mp4">
</video>
There's also a function this.webkitAudioDecodedByteCount
, however, I've never had any luck making it work.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)