使用javascript检测MP4视频是否有音轨

时间:2015-06-02 19:15:44

标签: javascript video

我正在为网页上的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来填充非零值,所以我已经包含了一个超时来继续检查(暂时)。

1 个答案:

答案 0 :(得分:0)

可能有更好的方法可以做到这一点,尽管只需使用常规javascript启用webkitmozilla的浏览器即可。 webkit分别使用this.audioTracksmozilla使用this.mozHasAudio

&#13;
&#13;
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;
&#13;
&#13;

还有一个功能this.webkitAudioDecodedByteCount,但是,我从来没有运气好。