HTML5 Local Storage источника аудиоэлемента - возможно ли это? - PullRequest
28 голосов
/ 23 октября 2009

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

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

Я попробовал следующее с помощью WebKit:

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

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

  3. Я пытался использовать данные uri и base64, чтобы использовать html в качестве аудиопередачи, которую можно кэшировать, но опять же размер файла делает это запретительным. Также аудиоэлемент, кажется, не нравится в WebKit (отлично работает в Mozilla)

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

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

Ответы [ 6 ]

7 голосов
/ 02 декабря 2010

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

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

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

6 голосов
/ 14 июня 2010

Я пытался сделать это сам, на 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 (которая должна выйти на следующей неделе).

5 голосов
/ 16 января 2011

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

Здесь описан обходной путь: http://dougx.net/plunder/index.php#code

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

2 голосов
/ 27 октября 2009

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

Возможно, вы захотите взглянуть на JAI (JavaScript Audio Interface) («первый в мире интерфейс javascript для веб <audio>»). Или свяжитесь с Аластером Макдональдом , который написал это.

Если этого не сделать, Доктор HTML5 может оказать помощь.

2 голосов
/ 23 октября 2009

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

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

1 голос
/ 18 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...