HTML5 Локальное хранилище источника аудиоисточника - возможно ли это?
Я экспериментировал с аудио и локальными функциями хранения html5 в последнее время и столкнулся с чем-то, что меня озадачило.
Я хотел бы иметь возможность кэшировать или хранить источник аудиоэлемента локально, чтобы обеспечить более быстрое и автономное воспроизведение. Проблема в том, что я не вижу, как это возможно с текущей реализацией.
Я попробовал использовать WebKit:
-
Создание файла манифеста для настройки локального кэширования, но аудиофайл не является кэшируемым элементом, возможно, из-за того, что он является потоком или чем-то.
-
Я также попытался использовать javascript для размещения аудио объекта в локальном хранилище, но размер mp3 делает это невозможным из-за проблем с памятью (я думаю).
-
Я попытался использовать данные uri и base64 для использования html в качестве аудио транспорта, который можно кэшировать, но опять-таки размер файла делает это непозволительным. Кроме того, аудио-элемент, похоже, не нравится в WebKit (отлично работает в mozilla)
-
Я пробовал несколько методов размещения данных в локальном хранилище баз данных. Снова страдают те же проблемы, что и другие случаи.
Мне бы хотелось услышать любые другие идеи, которые могут возникнуть у меня, о том, как я мог бы достичь своей цели автономного воспроизведения, используя кеширование/локальное хранилище в WebKit.
Ответы
Ответ 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.