Sto creando un controller personalizzato per video MP4 su una pagina web. Il controller include un cursore del volume. Alcuni dei video che devono essere riprodotti non hanno traccia audio. Sarebbe bene disabilitare il cursore del volume per questi video, in modo che l'utente non sia confuso quando la modifica della posizione del cursore del volume non ha alcun effetto.Usa javascript per rilevare se un video MP4 ha una colonna sonora
Esiste una proprietà o un trucco per verificare se un file MP4 ha una traccia audio? (jQuery è un'opzione).
Edit: utilizzando @ suggerimento di dandavis, ora ho questa soluzione per Chrome (e .ogg su 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, 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
}
Il valore video.webkitAudioDecodedByteCount è inizialmente 0. Nel mio test, potrebbero essere necessari fino a 256 ms per essere popolato con un valore diverso da zero, quindi ho incluso un timeout per continuare a controllare (per un po ').
Dipende, una soluzione che utilizza l'API Web Audio funziona, che è supportata solo nei browser più recenti e, per quanto ne so, non funziona affatto in IE. – adeneo
Nei browser che lo supportano (non IE), è possibile utilizzare il video come fonte per [API audio Web] (https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API) e controlla l'audio con un 'OfflineAudioContext'. Tuttavia, non conosco abbastanza i dettagli dell'API per creare una soluzione. – apsillers
[Web Audio API] (https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API) suona come una soluzione per molti utenti, sì. –