2011-10-22 3 views
6

Ho una piccola app Web, che riproduce bit audio molto brevi al clic di più pulsanti. Si rivolge esplicitamente a Safari mobile su iOS (iPad).Safari mobile: manifest di cache + audio

Dopo aver letto qui e altrove le numerose "carenze" di audio HTML5 in questo contesto su Safari mobile e provare alcuni "hack" e trucchi, sono bloccato con una situazione in cui Safari sembra semplicemente (per la mancanza di una parola migliore) interrotta:

Posso riprodurre il suono A (è necessario molto tempo per avviarlo - Suppongo che stia scaricando [di nuovo]?) sul clic del pulsante A. Dopo di ciò, facendo clic sul pulsante B riprodurrà immediatamente il suono A. Lo stesso per il pulsante C. In alcuni casi riprodurrà un suono diverso, a volte anche quello giusto. Ma soprattutto il suono A. Il formato in uso era .aiff, ora è .m4a.

Dopo aver scritto alcune versioni minuscoli me stesso, ho deciso di andare con la libreria Buzz per gestire il suono di carico/riproduzione/ecc ..

Stranamente, il loro demo include un gioco, che fa più o meno esattamente quello che Ho bisogno di e attiva lo stesso comportamento difettoso. Sono persino finito in una situazione in cui qualsiasi riproduttore audio di Safari mobile in qualsiasi scheda riproducesse un determinato suono dal gioco demo di Buzz (!).

Speravo che un manifest di cache potesse aiutare a superare i limiti di pre-caricamento di Apples e forzare l'applicazione a riprodurre l'audio subito dopo aver premuto il pulsante in modalità offline. Ma dopo aver verificato che l'intera app è stata memorizzata nella cache, non riesco a riprodurre/ascoltare alcun suono in modalità offline.

Qualcuno è riuscito a far funzionare qualcosa del genere in qualche modo? (- Dopo aver visto come Apple gestisce certe cose, io' non aspettatevi molto di risposta, anche se ...)


Update 1:

L'esempio in questa risposta provoca lo stesso effetto: How to synthesize audio using HTML5/Javascript on iPad


Aggiornamento 2:

L'aggiornamento di iOS (e quindi di Safari) sembra risolvere il problema audio. Tuttavia, il manifest della cache non sembra avere effetto sui file audio. Questi file non sono affatto disponibili.

Dopo aver rimosso il manifest della cache, l'app funziona correttamente, ma aggiungendola alla "schermata principale" e ricaricandola impedisce anche la riproduzione dell'audio.

risposta

7

Vorrei poterti dire che c'è una formula magica per far funzionare perfettamente tutti i tuoi supporti html5, ma non c'è. Il supporto mobile per audio/video HTML5 è piuttosto scadente in questo momento; molto più indietro rispetto ai suoi predecessori desktop. A peggiorare le cose, ognuna delle diverse piattaforme lo gestisce in modo diverso e la maggior parte di esse lo supporta solo nelle versioni semi-recenti.

Tuttavia, ci sono alcuni trucchi che è possibile utilizzare per far funzionare correttamente i file multimediali in Safari mobile. Per spiegarli, dovrai comprendere alcune delle sue carenze.


1) Non è possibile caricare più file audio/video

Il suo stato la mia esperienza che il browser sarà solo caricare un file alla volta. Se riproduci un file, vai a riprodurne un altro, quindi torna indietro e caricherà nuovamente quel file. E anche se non l'ho provato da solo, non credo che un manifest di cache ti possa aiutare.

Quello che dovevo fare è combinare tutti i miei file audio in un unico file audio. Quindi, a seconda della traccia audio richiesta, sposterei la posizione di riproduzione nella posizione iniziale appropriata e riprodurò quella traccia. Quindi, userei un setInterval per esaminare la riproduzione ogni pochi millisecondi per determinare se la posizione di riproduzione corrente ha colpito la fine della traccia. Una volta fatto, lo interruppi. Pluis, mi sono concesso alcuni secondi (2-3) tra ogni traccia, nel caso in cui la CPU del telefono fosse molto carico e controllasse il feed un po 'troppo tardi.

2) Non è possibile auto-riprodurre i file audio/video

Apple integrato in loro tecnologia tag supporti HTML5 la limitazione che queste tracce sarebbero solo carico e giocare in risposta a un evento utente clic. In questo modo, gli sviluppatori non sono stati in grado di riprodurre automaticamente brani fastidiosi quando si visitavano i loro siti web.

Quando stavo usando tag audio/video, stavo cercando di creare un annuncio multimediale. Così ho collegato il mio audio/tracce caricando all'evento click del banner, quando fai clic su un banner ed espandi l'annuncio.

Quello che suggerirei di fare è avere un piccolo pop-up lightbox in arrivo, chiedendo all'utente se vuole attivare/disattivare l'audio. Puoi allegare le tue funzioni di caricamento all'evento click di quella finestra popup, indipendentemente se l'utente attiva o disattiva l'audio.

Personalmente, non ho avuto molta fortuna ad usare la funzione load(). Avrei eseguito quella funzione per caricare l'audio e quindi fare clic su Play e lo ricaricherebbe di nuovo. Avrebbe potuto sempre essere che non lo facevo nel modo giusto, quindi sentiti libero di dimostrarmi in errore e farlo funzionare. Ciò che è stato detto è che la traccia è stata riprodotta, quindi in quel modo avrebbe iniziato a caricare, quindi avrei usato un setInterval per vedere se il tempo di riproduzione corrente aumentava di pochi millisecondi. Una volta che ho notato che ha iniziato a suonare la traccia, l'avrei immediatamente messa in pausa.

3) i tag audio/video sono supportati solo in iOS 4.0 e versioni successive

non c'è trucco per ottenere intorno a questo. Sono solo i fatti.


Ecco alcuni siti che hanno contribuito a quando quando stavo sviluppando con i tag audio/video:

http://www.w3.org/wiki/HTML/Elements/video
http://dev.w3.org/html5/spec-author-view/video.html#media-elements

Buona fortuna!

+0

Grazie mille! C'è un sacco di ottimi consigli qui sembra. Proverò sicuramente alcune cose. – polarblau

+0

Un'altra cosa da sapere è che è impossibile memorizzare nella cache audio o video su iOS. Anche con appcache. – idbehold

+0

puoi dare un esempio di codice per - spostare la posizione di riproduzione nella posizione di partenza appropriata. Inoltre se vuoi suonare la traccia per 3 secondi come la interrompi? – Jon