Pregunta

Últimamente he estado experimentando con las funciones de audio y almacenamiento local de html5 y me he encontrado con algo que me ha dejado perplejo.

Me gustaría poder almacenar en caché o almacenar la fuente del elemento de audio localmente para permitir una reproducción más rápida y sin conexión.El problema es que no veo cómo esto es posible con la implementación actual.

He probado lo siguiente usando WebKit:

  1. Se está creando un archivo de manifiesto para configurar el almacenamiento en caché local, pero el archivo de audio parece no ser un elemento almacenable en caché, tal vez debido a la forma en que se transmite o algo así.

  2. También intenté usar javascript para colocar un objeto de audio en el almacenamiento local, pero el tamaño del mp3 lo hace imposible debido a problemas de memoria (creo).

  3. Intenté usar el uri de datos y base64 para usar el html como transporte de audio que se puede almacenar en caché, pero nuevamente el tamaño del archivo lo hace prohibitivo.Además, al elemento de audio no parece gustarle esto en WebKit (funciona bien en Mozilla)

  4. Probé varios métodos para colocar los datos en el almacén de bases de datos local.Nuevamente sufriendo los mismos problemas que los otros casos.

Me encantaría escuchar otras ideas que alguien pueda tener sobre cómo podría lograr mi objetivo de reproducción sin conexión utilizando el almacenamiento en caché/local en WebKit.

¿Fue útil?

Solución

Así que ha pasado un tiempo desde que hice esta pregunta y pensé que daría información sobre cómo lo resolvimos. Básicamente codificamos los datos en PNG utilizando una técnica similar a esta:

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

Luego almacenó en caché la imagen en el dispositivo móvil usando el almacenamiento local html5 y accedió a ella según fue necesario. Los PNG eran bastante grandes, pero esto funcionó para nosotros.

Otros consejos

He intentado hacer esto yo mismo, en iOS (para iPhone / iPad), pero se niega a almacenar en caché los archivos de audio sin conexión, incluso si se encuentra en el Cache Manifest.

No produce errores, sino que simplemente finge haber reproducido el elemento de audio si se invoca a través de JavaScript sin control. Si está incrustado con un control, muestra un control alternativo que dice & Quot; No se puede reproducir el archivo de audio. & Quot ;. Funciona bien si la aplicación puede conectarse en línea.

Parece no almacenar en caché el audio, reproducir otro recurso de sonido parece hacer que borre el recurso anterior de la memoria; esta es una funcionalidad bastante inútil incluso cuando está en línea.

He experimentado con la base64 que codifica el audio como URI de datos. Esto funciona en Safari en el escritorio (al menos para muestras bastante cortas de alrededor de 20-30k que he estado usando) pero parece que no es compatible en absoluto con iOS; silenciosamente no hace nada, lo cual es muy molesto.

No sé acerca de otros proveedores: Google Chrome no solía admitir URI de datos para audio, pero tal vez lo arreglaron ..., aunque parece que por ahora no es posible.

Actualización: discrepancia menor con iPhone OS 3.x (probado con 3.1.2): si se especifica un elemento de audio en una aplicación web fuera de línea pero no tiene un control, muestra un control no interactivo con un spinner no animado en él (que definitivamente no debería hacer). Supongo que esto se soluciona en iOS 4.x (que debería salir la próxima semana).

Pasé un tiempo tratando de hacer esto para un juego que estoy haciendo, y como pude ver, los navegadores (Firefox y Chrome) todavía no admiten el almacenamiento en caché de elementos de audio, pensé que publicaría la solución Encontré.

Aquí se describe una solución alternativa: http://dougx.net/plunder/index.php #code

Puedo confirmar que funciona bastante bien, pero probablemente sea más adecuado para archivos más pequeños. Como él describe aquí ( http://dougx.net/plunder/GameSounds.txt ), usted codifica el audio como cadenas base64 y dales un dato: audio / ogg; encabezado base64 (o cualquier formato de audio compatible), que el audio HTML5 puede leer. Debido a que esto es solo una cadena, el navegador lo almacenará en caché.

Supongo que sería preferible que funcione el enfoque del manifiesto, ya que parece el mecanismo más relevante para almacenar en caché localmente el archivo.

¿Qué sucede si modifica los encabezados HTTP del archivo de audio, p. Content-Type y Expires?¿El navegador hace algo diferente si se cambia la extensión del archivo?

Veo que no has tenido suerte hasta ahora.

Es posible que desee echar un vistazo a JAI (Interfaz de audio JavaScript) (" la primera interfaz javascript del mundo para web <audio> "). O póngase en contacto con Alastair MacDonald , quien lo escribió.

En su defecto, el HTML5 Doctor puede ayudarlo.

Agregar archivos de video y audio al almacenamiento local funciona con iOS 4.3.

Acabo de agregar un video y un archivo de audio para manifestar y ambos se descargaron al almacenamiento sin conexión en iPad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top