Подтвердить что ты не робот

HTML5 Локальное хранилище источника аудиоисточника - возможно ли это?

Я экспериментировал с аудио и локальными функциями хранения html5 в последнее время и столкнулся с чем-то, что меня озадачило.

Я хотел бы иметь возможность кэшировать или хранить источник аудиоэлемента локально, чтобы обеспечить более быстрое и автономное воспроизведение. Проблема в том, что я не вижу, как это возможно с текущей реализацией.

Я попробовал использовать WebKit:

  • Создание файла манифеста для настройки локального кэширования, но аудиофайл не является кэшируемым элементом, возможно, из-за того, что он является потоком или чем-то.

  • Я также попытался использовать javascript для размещения аудио объекта в локальном хранилище, но размер mp3 делает это невозможным из-за проблем с памятью (я думаю).

  • Я попытался использовать данные uri и base64 для использования html в качестве аудио транспорта, который можно кэшировать, но опять-таки размер файла делает это непозволительным. Кроме того, аудио-элемент, похоже, не нравится в WebKit (отлично работает в mozilla)

  • Я пробовал несколько методов размещения данных в локальном хранилище баз данных. Снова страдают те же проблемы, что и другие случаи.

Мне бы хотелось услышать любые другие идеи, которые могут возникнуть у меня, о том, как я мог бы достичь своей цели автономного воспроизведения, используя кеширование/локальное хранилище в WebKit.

4b9b3361

Ответ 1

Итак, прошло некоторое время с тех пор, как я задал этот вопрос, и я подумал, что дам некоторую информацию о том, как мы его решили. В основном мы закодировали данные в PNG, используя аналогичную технику:

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

Затем кэшировал изображение на мобильном устройстве, используя локальное хранилище html5, и обратился к нему по мере необходимости. PNG были довольно большими, но это сработало для нас.

Ответ 2

Я пытался сделать это сам, на iOS (для iPhone/iPad), но он отказывается кэшировать аудиофайлы в автономном режиме, даже если в Cache Manifest.

Это не ошибка, а вместо этого просто притворяется, что сыграл аудио-элемент, если он вызван с помощью JavaScript без элемента управления. Если он встроен в элемент управления, он отображает альтернативный элемент управления, в котором говорится: "Невозможно воспроизвести аудиофайл". Он отлично работает, если приложение может подключиться к сети.

Кажется, что не кеширование звука, воспроизведение другого звукового ресурса, по-видимому, заставляет его очищать предыдущий ресурс из памяти - это довольно бесполезная функциональность даже в Интернете.

Я экспериментировал с base64, кодирующим аудио как URI данных. Это работает в Safari на рабочем столе (по крайней мере, для довольно коротких образцов около 20-30 тыс., Которые я использовал), но, похоже, не поддерживается вообще на iOS - он молча ничего не делает, что очень раздражает.

Я не знаю о других производителях - Google Chrome не поддерживал URI данных для аудио, но, возможно, они исправили его... - похоже, пока это невозможно.

Обновление: незначительное несоответствие с iPhone OS 3.x(проверено с помощью 3.1.2): если аудио-элемент указан в автономном веб-приложении, но у него нет элемента управления, он отображает неинтерактивный элемент управления с неанимированный прядильщик на нем (чего определенно не следует делать). Я предполагаю, что это исправлено в iOS 4.x(который должен появиться на следующей неделе).

Ответ 3

Я потратил некоторое время, пытаясь сделать это для игры, которую я делаю, и поскольку, насколько я могу судить, браузеры (Firefox и Chrome) все еще не поддерживают кеширование аудио-элементов, я думал, что опубликую решение Я нашел.

Существует обходное решение, описанное здесь: http://dougx.net/plunder/index.php#code

Я могу подтвердить, что он работает очень хорошо, но, вероятно, лучше подходит для небольших файлов. Как он описывает здесь (http://dougx.net/plunder/GameSounds.txt), вы кодируете аудио как строки base64 и даете им данные: audio/ogg; base64 (или любой совместимый аудиоформат), который может читать HTML5-аудио. Поскольку это всего лишь строка, браузер будет кэшировать ее.

Ответ 4

Я предполагаю, что было бы предпочтительнее использовать манифестный подход, поскольку это похоже на наиболее подходящий механизм локального кэширования файла.

Что произойдет, если вы измените заголовки HTTP аудиофайлов, например. Content-Type и Expires? Разве браузер делает что-то другое, если расширение файла изменено?

Ответ 5

Я вижу, вам пока не повезло.

Возможно, вам стоит взглянуть на JAI (JavaScript Audio Interface) ( "первый в мире интерфейс javascript для web <audio>" ). Или свяжитесь с Alastair MacDonald, который написал это.

В противном случае HTML5 Doctor может помочь.

Ответ 6

Добавление видео и аудио файлов в локальное хранилище работает с iOS 4.3.

Я просто добавил видео и аудиофайлы, чтобы они были показаны, и оба они были загружены в автономное хранилище на iPad.