Domanda

Di recente ho sperimentato le funzionalità di archiviazione audio e locale di html5 e mi sono imbattuto in qualcosa che mi ha lasciato perplesso.

Mi piacerebbe essere in grado di memorizzare nella cache o memorizzare la fonte dell'elemento audio localmente per consentire una riproduzione più rapida e offline. Il problema è che non riesco a vedere come ciò sia possibile con l'implementazione corrente.

Ho provato quanto segue usando WebKit:

  1. Creazione di un file manifest per impostare la memorizzazione nella cache locale ma il file audio sembra non essere un elemento memorizzabile nella cache, forse a causa del modo in cui è streaming o qualcosa del genere

  2. Ho anche tentato di usare javascript per mettere un oggetto audio nella memoria locale ma la dimensione dell'mp3 lo rende impossibile a causa di problemi di memoria (credo).

  3. Ho provato a usare i dati uri e base64 per usare l'html come un trasporto audio che può essere memorizzato nella cache ma, di nuovo, la dimensione del file lo rende proibitivo. Anche l'elemento audio non sembra gradire questo in WebKit (funziona bene in Mozilla)

  4. Ho provato diversi metodi per inserire i dati nell'archivio database locale. Ancora una volta soffrono gli stessi problemi degli altri casi.

Mi piacerebbe sentire qualsiasi altra idea che chiunque possa avere su come raggiungere il mio obiettivo di riproduzione offline usando la memorizzazione nella cache / archiviazione locale in WebKit.

È stato utile?

Soluzione

Quindi è passato un po 'di tempo da quando ho posto questa domanda e ho pensato di dare alcune informazioni su come l'abbiamo risolto. Fondamentalmente abbiamo codificato i dati in PNG usando una tecnica simile a questa:

http://audioscene.org/scene-files/yury /pngencoding/sample.html

Quindi memorizza nella cache l'immagine sul dispositivo mobile usando l'archiviazione locale html5 e accedendola secondo necessità. I PNG erano piuttosto grandi ma questo ha funzionato per noi.

Altri suggerimenti

Ho provato a farlo da solo, su iOS (per iPhone / iPad) ma si rifiuta di memorizzare nella cache i file audio offline, anche se in Cache Manifest.

Non sbaglia, ma finge semplicemente di aver riprodotto l'elemento audio se invocato tramite JavaScript senza controllo. Se è incorporato con un controllo, visualizza un controllo alternativo che dice & Quot; Impossibile riprodurre il file audio. & Quot ;. Funziona bene se l'applicazione è in grado di andare online.

Sembra non memorizzare nella cache l'audio, la riproduzione di un'altra risorsa audio sembra indurla a cancellare dalla memoria la risorsa precedente - questa è una funzionalità piuttosto inutile anche quando si è online.

Ho sperimentato la codifica base64 dell'audio come URI di dati. Funziona su Safari sul desktop (almeno per campioni abbastanza brevi di circa 20-30k che sto usando) ma sembra non essere supportato affatto su iOS - non fa nulla in silenzio, il che è molto fastidioso.

Non conosco altri fornitori - Google Chrome non supportava gli URI di dati per l'audio, ma forse l'hanno risolto ... - sembra che non sia possibile per ora.

Aggiornamento: discrepanza minore con iPhone OS 3.x (testato con 3.1.2): se un elemento audio è specificato in un'app Web offline ma non ha un controllo, viene visualizzato un controllo non interattivo con un spinner non animato (che sicuramente non dovrebbe fare). Presumo che questo problema sia stato risolto in iOS 4.x (che dovrebbe uscire la prossima settimana).

Ho trascorso un po 'di tempo a provare a farlo per un gioco che sto realizzando, e dal momento che per quanto ne sapevo, i browser (Firefox e Chrome) non supportano ancora la memorizzazione nella cache degli elementi audio e ho pensato di pubblicare la soluzione Ho trovato.

C'è una soluzione alternativa qui descritta: http://dougx.net/plunder/index.php #code

Posso confermare che funziona abbastanza bene, ma probabilmente è più adatto a file più piccoli. Come descrive qui ( http://dougx.net/plunder/GameSounds.txt ), tu codifica l'audio come stringhe base64 e fornisci loro un'intestazione data: audio / ogg; base64 (o qualsiasi formato audio compatibile), che l'audio HTML5 può quindi leggere. Poiché si tratta solo di una stringa, il browser la memorizzerà nella cache.

Immagino che sarebbe preferibile far funzionare l'approccio manifest, poiché sembra il meccanismo più rilevante per la memorizzazione nella cache locale del file.

Cosa succede se si modificano le intestazioni HTTP del file audio, ad es. Content-Type e Expires? Il browser fa qualcosa di diverso se l'estensione del file viene modificata?

Vedo che finora non hai avuto fortuna.

Potresti dare un'occhiata a JAI (JavaScript Audio Interface) (" la prima interfaccia javascript al mondo per il web <audio> "). Oppure contatta Alastair MacDonald , che l'ha scritto.

In caso contrario, il HTML5 Doctor potrebbe essere in grado di fornire assistenza.

L'aggiunta di file audio e video alla memoria locale funziona con iOS 4.3.

Ho appena aggiunto un video e un file audio per manifest ed entrambi sono stati scaricati nello spazio di archiviazione offline su iPad.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top