2011-01-21 7 views
13

Sto sviluppando un server locale che trasmetterà in streaming i file audio di un utente in modo che possano accedervi tramite browser Web utilizzando l'oggetto audio HTML5. Poiché questi file si trovano sul computer dell'utente, mi aspetto che i file vengano caricati completamente nel buffer quando vengono caricati, ma per alcuni file di grandi dimensioni, i brani vengono bufferizzati in parte, quindi si fermano e riprendono il buffering un po 'di tempo dopo.Come posso forzare un elemento audio HTML5 a bufferare un'intera canzone?

La mia domanda è: come posso forzare l'oggetto audio a memorizzare l'intero brano in una volta? Posso farlo da javascript, devo impostare un attributo sull'oggetto audio, o c'è qualcos'altro che posso fare?

risposta

6

La soluzione che ho trovato è stato questo:

function load() { 
    a.play(); 
    setTimeout("a.pause()", 10); 
} 

Gioca il file ed eseguire una pausa che 10ms dopo, quindi il browser tamponare l'intera canzone.

+7

setTimeout (a.pause, 10) è meglio karma –

+1

che funziona quando il tuo non passando la funzione di tutte le variabili, certo. Ma perché preoccuparsi di passare avanti e indietro tra due metodi? –

+11

@DrJokepu In realtà, non funzionerebbe, dal momento che si perderebbe il contesto della funzione. Meglio: 'setTimeout (a.pause.bind (a), 10)' – nickf

3

È possibile utilizzare il metodo load(). Questo fondamentalmente forza preload="auto". Ma probabilmente non bufferizzerà il tutto.

Avevo il problema che l'audio non era precaricato su dispositivi mobili (anche con preload=auto), ma questo metodo ha funzionato.

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#dfnReturnLink-2

Un'altra opzione è quella di caricare i dati tramite un XMLHttpRequest come blob binario e impostare l'attributo dell'elemento <audio>src al blob URI.

(io personalmente non piace molto il gioco/pausa mod.)

Problemi correlati