Use javascript to detect if an MP4 video has a sound track -


i creating custom controller mp4 video on web page. controller includes volume slider. of videos played have no sound track. disable volume slider these videos, user not confused when changing position of volume slider has no effect.

is there property or trick checking if mp4 file has audio track? (jquery option).

edit: using @dandavis's suggestion, have solution chrome (and .ogg on opera):

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, can check if there audio. disable volume     // control default, , reenable non-zero value     // webkitaudiodecodedbytecount detected.     enablevolume = false      starttimeout()      function starttimeout () {       if (!!video.webkitaudiodecodedbytecount) {         enablevolume = true         togglevolumeenabled(enablevolume)       } else {         // keep trying 2 seconds         if (delay < 2048) {           settimeout(starttimeout, delay)           delay = delay * 2         }       }     }   }    togglevolumeenabled(enablevolume) }   function togglevolumeenabled(enablevolume) {   volume.disabled = !enablevolume } 

the video.webkitaudiodecodedbytecount value 0. in tests, may take 256ms populated non-zero value, have included timeout keep checking (for while).

there might better way of doing this, although it's simple using regular javascript webkit or mozilla enabled browsers. webkit utilizes this.audiotracks , mozilla uses this.mozhasaudio respectively:

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 function this.webkitaudiodecodedbytecount, however, i've never had luck making work.


Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -