Vidéo HTML5, comment détecter s'il n'y a pas de piste audio?

Je fais une application chrome et j'aimerais avoir des contrôles personnalisés pour la lecture vidéo, mais j'ai du mal avec le bouton mute. La plupart des vidéos qui seront jouées dans l'application sont silencieuses, donc je souhaite pouvoir désactiver le bouton lorsqu'il n'y a pas de piste audio comme Chrome fonctionne avec les commandes par défaut.

Essayé d'utiliser la valeur de volume mais il renvoie "1" même s'il n'y a pas de piste audio. Vérifier si la vidéo est coupée n'a pas fonctionné non plus.

Voici un extrait .

Aucune suggestion?

À un moment donné, les navigateurs pourraient commencer à implémenter la propriété audioTracks . Pour l'instant, vous pouvez utiliser webkitAudioDecodedByteCount pour webkitAudioDecodedByteCount , et mozHasAudio pour Firefox.

 document.getElementById("video").addEventListener("loadeddata", function() { if (typeof this.webkitAudioDecodedByteCount !== "undefined") { // non-zero if video has audio track if (this.webkitAudioDecodedByteCount > 0) console.log("video has audio"); else console.log("video doesn't have audio"); } else if (typeof this.mozHasAudio !== "undefined") { // true if video has audio track if (this.mozHasAudio) console.log("video has audio"); else console.log("video doesn't have audio"); } else console.log("can't tell if video has audio"); }); 

Fonction plus courte basée sur la réponse de Upuoth et étendue pour supporter IE10 +

 function hasAudio (video) { return video.mozHasAudio || Boolean(video.webkitAudioDecodedByteCount) || Boolean(video.audioTracks && video.audioTracks.length); } 

Usage:

 var video = document.querySelector('video'); if(hasAudio(video)) { console.log("video has audio"); } else{ console.log("video doesn't have audio"); }