Mobile Safari: аудио + кэш-манифест - PullRequest
6 голосов
/ 23 октября 2011

У меня небольшое веб-приложение, которое воспроизводит очень короткие звуковые биты нажатием нескольких кнопок.Он явно нацелен на мобильное Safari на iOS (iPad).

После прочтения здесь и в другом месте о нескольких «недостатках» звука HTML5 в этом контексте на мобильном Safari и пробуя несколько «хаков» и приемов, язастрял в ситуации, когда Safari кажется просто (из-за отсутствия лучшего слова) сломанной:

Я могу воспроизвести звук A (для его запуска требуется много времени - я предполагаю, что он понижает [снова]?) при нажатии кнопки A. После этого при нажатии кнопки B снова будет воспроизводиться звук A.То же самое для кнопки C. В некоторых случаях он будет воспроизводить другой звук, иногда даже правильный.Но в основном звук А. Используемый формат: .aiff, сейчас .m4a.

После написания нескольких крошечных версий я решил использовать библиотеку Buzz для обработки звука.загрузка / игра / и т.д ..

Как ни странно, их демо-версия включает в себя игру, в которой почти все, что мне нужно, и вызывает то же самое некорректное поведение.Я даже попал в ситуацию, когда любой аудиоплеер в мобильном Safari на любой вкладке будет воспроизводить определенный звук из демо-игры Buzz (!).

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

Кому-нибудь удалось заставить что-то подобное работать как-то? (-Увидев, как Apple справляется с некоторыми вещами, я не ожидаю большого отклика, хотя…)


Обновление 1:

Пример этого ответа вызываеттот же эффект: Как синтезировать аудио с помощью HTML5 / Javascript на iPad


Обновление 2:

Обновление iOS (и т. д. SafariКажется, чтобы решить аудио ошибка.Манифест кэша, похоже, не влияет на звуковые файлы.Эти файлы просто недоступны вообще.

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

1 Ответ

8 голосов
/ 02 ноября 2011

Хотелось бы сказать вам, что есть волшебная формула, чтобы все ваши html5-медиа работали безупречно, но это не так.Мобильная поддержка аудио / видео в формате HTML5 сейчас довольно слабая;намного дальше, чем его настольные предшественники.Что еще хуже, каждая из разных платформ обрабатывает ее по-разному, и большинство из них поддерживают ее только в последних версиях.

Однако есть некоторые приемы, которые можно использовать, чтобы заставить медиафайлы корректно работать на мобильных устройствах.Сафари.Чтобы объяснить их, вам нужно понять некоторые из его недостатков.


1) Вы не можете загрузить несколько аудио / видео файлов

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

Мне нужно было объединить все мои аудиофайлы в один большой аудиофайл.Затем, в зависимости от того, какая звуковая дорожка была запрошена, я бы переместил позицию воспроизведения в соответствующую начальную позицию и воспроизвел эту дорожку.Затем я бы использовал setInterval для проверки воспроизведения каждые несколько миллисекунд, чтобы определить, достигло ли текущая позиция воспроизведения конца дорожки.Как только это произошло, я остановился.Плюс, я давал себе несколько секунд (2-3) между каждой дорожкой, на случай, если процессор телефона был сильно загружен, и проверил подачу немного слишком поздно.

2) Вы не можетеавтоматическое воспроизведение аудио / видео файлов

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

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

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

Лично мне не очень повезло с использованием функции load ().Я бы запустил эту функцию, чтобы загрузить аудио, а затем щелкнуть кнопку воспроизведения, и он просто загрузит его снова.Могло случиться так, что я просто не сделал это правильно, поэтому не стесняйтесь доказать, что я не прав, и заставить это работать.Что я сделал, так это сказал треку проиграть, чтобы он начал загружаться, а затем я использовал setInterval, чтобы посмотреть, увеличилось ли текущее время воспроизведения всего на несколько миллисекунд.Как только я заметил, что он начал воспроизводить трек, я сразу же приостановил его.

3) Тэги аудио / видео поддерживаются только в iOS 4.0 и более поздних версиях

Там нет хитрости, чтобы обойтиэтот.Это просто факты.


Вот несколько сайтов, которые помогли мне, когда я разрабатывал аудио / видео теги:

http://www.w3.org/wiki/HTML/Elements/video
http://dev.w3.org/html5/spec-author-view/video.html#media-elements

Удачи!

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