Автовоспроизведение аудио на мобильном сафари

До того, как я пригорю до смерти, я знаю, что это не работает в настоящее время из-за беспокойства Apple по поводу ужасающей стоимости для их пользователей автоматической загрузки аудиофайла (ничего общего с ними, пытающихся калечить веб-приложения, t получить от них 30%).

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

Ответ 1

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

Но вы можете сделать небольшой взлом, чтобы пользователь не заметил, что он в настоящее время запустил аудио для вашего приложения:

  1. Вам понадобится взаимодействие с пользователем, чтобы начать аудио. Таким образом, ваше приложение или игра может иметь начальный экран или кнопку приветствия, которая требует щелчка, чтобы войти в главное меню или запустить игру. Привязать к пользовательскому событию (допустимые события: "click", "touchend", "doubleclick" и "keydown") и вызвать метод load() для вашего <audio>.

  2. Привязать к событию "canplaythrough" <audio>. Это событие срабатывает, когда ваш источник готов к игре. Здесь вы можете теперь вызвать play(), pause() или дождаться других взаимодействий. Итак, звук готов, но теперь у вас есть полный контроль, когда начинать или останавливать звук.

  3. Я также советую вам использовать аудио спрайты на мобильных клиентах. В iOS (и Android?) реализована внутренняя поддержка аудио через Singleton. Это означает, что вы не можете, как в настольном браузере, иметь 10 аудиоэлементов и воспроизводить разный звук одновременно. Вы можете играть только один файл! Таким образом, изменение источника для разных звуков занимает много времени. С аудио спрайтом вы можете запустить свои спрайты, когда пользователь впервые взаимодействует с вашим сайтом или игрой. Приостановите ваш спрайт, и когда вам нужно воспроизвести звук, вы должны установить currentTime в начало спрайта и приостановить спрайт, когда currentTime вашего файла достигнет конца вашего спрайта. Событие timeupdate, где вы можете проверить currentTime вашего спрайта.

Если вам больше интересно, я могу подготовить для вас мой проигрыватель аудио спрайтов javascript !!

Ответ 2

Единственное решение, которое я видел до сих пор, - это создать приложение оболочки и поместить веб-приложение в UIWebView.

http://flowz.com/2011/03/apple-disabled-audiovideo-playback-in-html5/

UIWebView.allowsInlineMediaPlayback = YES;
UIWebView.mediaPlaybackRequiresUserAction = NO;

Мне также очень хотелось бы знать, как это сделать в простом веб-приложении.

Ответ 3

Я считаю, что просто решил это для своего собственного приложения.

Этапы,

Контроллер загружается,

Затем.... in viewDidLoad

загрузите свой веб-просмотр HTML: loadHTMLString: htmlFile baseURL: [self getBasePath]];

THEN... set mediaPlaybackRequiresUserAction = НЕТ в веб-просмотре.

Если вы установите слишком скоро, я думаю, что загрузка для html сбрасывает его.