2011-10-24 20 views
14

Sto costruendo un video per il mio sito Web con HTML5. Idealmente, avrei solo un file video silenzioso e cinque diverse tracce audio in lingue diverse che si sincronizzeranno con il video.Più tracce audio per video HTML5

Quindi avrei un pulsante che consente agli utenti di passare tra le tracce audio, anche mentre il video è in riproduzione; e la traccia audio corretta diventerebbe realtà (senza la pausa o il riavvio del video o qualcosa del genere, proprio come una selezione di tracce audio DVD).

Posso farlo abbastanza semplicemente in Flash, ma non voglio. Ci deve essere un modo per farlo in puro HTML5 o HTML5 + jQuery. Sto pensando di riprodurre tutti i file audio a volume 0 e di aumentare solo il volume della traccia attiva ... ma non so nemmeno come farlo, per non parlare di gestirlo quando l'utente mette in pausa o riavvolge il video ...

Grazie in anticipo!

risposta

3

Se sei disposto a scaricare tutte e cinque le tracce, perché non inserirle nel video? I video non sono limitati a una singola traccia audio (anche AVI potrebbe fare più tracce audio). Quindi la sincronizzazione dovrebbe essere gestita per te. Dovresti solo abilitare/disabilitare le tracce audio secondo necessità.

+1

Come esattamente dovrei fare per controllarlo con JavaScript, quindi? :) –

+2

@EmphramStavanger: http://www.whatwg.org/specs/web-apps/current-work/multipage/video.html#media-elements fornisce un elemento 'audioTracks', e puoi quindi usare' .enable() 'e' .disable() 'su ogni traccia. Non ho provato questo da solo. – derobert

+0

Fantastico, lo controllerò! –

8

La sincronizzazione tra audio e video è molto più complessa del semplice avvio di audio e video allo stesso tempo. Le schede audio verranno riprodotte a velocità leggermente diverse. (Ciò che è 44,1 kHz per me, potrebbe essere effettivamente 44.095 kHz.)

Spesso il video è sincronizzato con lo streaming audio, ma il lettore è ciò che lo gestisce. Caricando più oggetti per la riproduzione, li stai effettivamente estrapolando dalla sincronizzazione.

L'unico modo in cui questo funzionerà è se riesci a trovare un modo per controllare i diversi flussi audio dal lettore video. Non so se sia possibile.

Invece, propongo di codificare il video più volte, con i diversi flussi. È possibile utilizzare FFMPEG per questo e persino automatizzare il processo, a seconda del flusso di lavoro. Passare da uno stream all'altro diventa un problema, ma la maggior parte dei lettori video è abbastanza robusta da indovinare l'offset del byte nel file, quando viene fornito il bitrate.

Se fossero necessarie solo due lingue, è possibile regolare semplicemente il bilanciamento tra un canale audio stereo sinistro e destro.

+0

Cosa c'è di così difficile per i browser per modificare gli stream al volo in uno solo prima di riprodurli esattamente come fa ffmpeg? – themihai

+0

@themihai Quando si dispone di un file video con una traccia video e più tracce audio, tutte sono sincronizzate con un punto di riferimento comune. Quando hai più file tutti separati, non lo sono. Non puoi semplicemente allineare 8 oggetti audio, dire loro di suonare e aspettarti che suonino simultaneamente poiché hanno tutti la loro decodifica, buffering, ecc.e supponendo che il browser proverà anche a riprodurli tutti contemporaneamente. In realtà, chiami play e il browser fa la sua cosa quando ne ha voglia (in un ragionevole lasso di tempo in modo da sembrare istantaneo). – Brad

+0

@themihai Con FFmpeg, puoi prendere tutte quelle tracce, trasformarle in mux nello stesso file e dare loro quel punto di riferimento comune. In alternativa a qualcuno proposto qui, l'API Web Audio può essere utilizzata per pianificare la riproduzione in modo accurato. Ovvero, tutto l'audio viene decodificato per primo in campioni PCM, che possono quindi essere avviati contemporaneamente. A quel punto il riferimento di clock è il dispositivo di output. – Brad

3

È possibile con API Web Audio.

Parte del mio programma ascolta gli eventi di elementi video e arresta o riavvia le tracce audio create utilizzando l'API audio web. Questo mi dà la possibilità di accendere e spegnere qualsiasi traccia in perfetta sincronia.

Ci sono alcuni svantaggi.

Non è disponibile il supporto dell'API Web Audio in Internet Explorer ad eccezione di Edge.

La tecnica funziona solo con l'audio bufferizzato e ciò è limitante. Ci sono alcuni problemi con file di grandi dimensioni: https://bugs.chromium.org/p/chromium/issues/detail?id=71704

+0

Still - grazie per il suggerimento per 'mediagroup'. Ora ha un supporto un po 'migliore rispetto al momento della tua scrittura;) – SimonSimCity

+0

Sono felice di essere di qualche aiuto. Bello vedere anche queste specifiche che sono state portate in vita :) – Nek

+0

mediagroup è stato deprecato/non smosso (almeno da chrome) – themihai