我正在为网页上的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
}
Run Code Online (Sandbox Code Playgroud)
video.webkitAudioDecodedByteCount值最初为0.在我的测试中,最多可能需要256ms来填充非零值,所以我已经包含了一个超时来继续检查(暂时).
可能有更好的方法来做到这一点,尽管仅使用常规浏览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");
});Run Code Online (Sandbox Code Playgroud)
<video id="video" width="320" height="240" controls>
<source src="http://media.w3.org/2010/05/video/movie_300.mp4" type="video/mp4">
</video>Run Code Online (Sandbox Code Playgroud)
还有一个功能this.webkitAudioDecodedByteCount,但是,我从来没有运气让它工作。
| 归档时间: |
|
| 查看次数: |
2548 次 |
| 最近记录: |