Мы хотим сделать основанное на аудио веб-приложение, которое будет иметь много звуковых отрывков. Мы хотим кэшировать эти файлы так, чтобы производительность была хороша и не зависела от скорости сети. Действительно ли HTML5 может кэшировать аудио для режима офлайн?
Мне определенно кажется, что этот должен работать, и я не могу найти никакой документации, в которой говорится, что он не должен работать (либо от W3C, либо от таких поставщиков, как Apple), но размещение аудиофайлов в качестве ресурсов в манифесте кеша просто не работает с Safari, по крайней мере, на iPad и iPhone.
Звуки воспроизводятся нормально, когда приложение находится в сети (хотя кажется, что оно загружает их каждый раз заново, а не кэширует), и оно не жалуется на отсутствие ресурсов в автономном режиме (что происходит немедленно, если вы забудьте включить ресурсы JavaScript, CSS, HTML или изображения).
Вместо того, чтобы жаловаться (или загружать); если у элемента есть элемент управления, этот элемент управления заменяется полем с надписью «Невозможно воспроизвести аудиофайл.». В качестве альтернативы, если это элемент без элемента управления, то есть доступ к нему осуществляется через JavaScript для .play (), тогда он просто не воспроизводится (это не вызывает никаких ошибок, просто нет звука, в противном случае JavaScript продолжает выполняться как обычно).
Я тестировал это с довольно маленькими (<20k) файлами, и результат тот же, так что, похоже, это не связано с размером, просто полный отказ от копирования. Я не уверен, можно ли кодировать звук как ресурс на странице (например,закодировано в base64) так, как вы можете с изображениями, но я собираюсь исследовать этот вариант - я подозреваю, что это было бы возможно. Я пробовал кодировать аудиоданные в виде строк URI данных и даже пробовал генерировать звук на лету - оба работают нормально в Safari на рабочем столе, но не работают в ОС iPhone / iPad (по крайней мере, в версии 3.x - у меня есть не пробовал на iOS 4, но он не выйдет в течение недели и не ожидается для iPad в течение нескольких месяцев, даже если они исправят это).
Я полагаю, что отказ кэшировать звуковые файлы в iOS является ошибкой реализации или предполагаемой ограниченной функциональностью. Это, безусловно, раздражает и является препятствием для многих случаев использования.
Я не уверен, что происходит с другими клиентами HTML5, мне было бы интересно узнать (в частности, на Andriod). Поддержка звука Google также не была звездной, поэтому она может страдать от тех же ограничений.
Вы всегда можете разработать слой декодирования/кодирования, который будет общаться с клиентской SQLlite DB