Может ли HTML5 в браузере воспроизводить непрерывный звук на экране блокировки iOS? - PullRequest
0 голосов
/ 31 января 2019

Я пытался отследить это, и, похоже, нет однозначного ответа.Если у меня есть веб-сайт, который пытается воспроизвести несколько песен подряд (например, список воспроизведения) с помощью аудиоэлемента HTML 5, может ли он продолжать работать на экране блокировки iOS?

Для некоторого фона этоответ , кажется, указывает, что это возможно.Но тогда эта статья предполагает, что это не так.

Я попытался следовать наиболее близкому примеру того, что Apple рекомендует, так как находится здесь , чтобы повторить это.Я использую простой, ванильный JavaScript и HTML, ничего особенного.Я точно скопировал их пример и просто заменил аудио-тег на видео, выбрав две случайные mp3-песни.Все, что он делает - это ждет окончания одной песни, затем переключает src, загружает и воспроизводит следующий трек.

Когда я нажимаю кнопку «Воспроизвести» на веб-сайте, я блокирую iPhone.Будет воспроизведена первая песня, затем остановитесь.Это не продолжается до следующей песни.

Если веб-сайт открыт для страницы, он правильно перейдет к следующей песне.На Android будет продолжена следующая песня, даже если телефон заблокирован.

Я пробовал это с iOS 11 и 12. Ни одна из них не работала.Я прочитал много разных ответов о том, как остановить javascript, когда веб-сайт не находится на переднем плане, и как iOS требует взаимодействия с пользователем для воспроизведения аудио (даже при переходе от одной песни к другой).Так что не похоже, что это сработает.Но тогда другие ответы там, кажется, указывают, что это возможно.

Есть определенное да или нет?Я что-то здесь не так делаю?Или это просто невозможно?

1 Ответ

0 голосов
/ 29 июня 2019

Есть несколько проблем, которые вызывают некоторую путаницу.

Первый трек воспроизводится, второй не из-за разрешения пользователя

Если первый трек был запущен с разрешения пользователя, тоединственный способ, которым вы можете переключиться на новый трек с помощью скрипта, - по рекомендации Apple.Обработайте событие ended и замените его новым src и вызовите .play() до завершения обратного вызова.В противном случае ваш код не будет иметь разрешения на запуск нового аудио.

Невозможно перейти к событию ended из-за ограниченного по времени источника (#t=5,10)

Скажем, у вас есть 30-второй аудиофайл, и вы говорите браузеру загружать только секунды с 5 по 10 через что-то вроде #t=5,10 в конце URL.Когда вы достигнете 10, сработает событие paused, а не ended.Следовательно, невозможно перейти к следующему треку в обычном режиме, поскольку Apple не «благословляет» это событие, чтобы оно считалось релеем предыдущего взаимодействия с пользователем.

Я справился с этим, имеяJavaScript проверяет currentTime несколько раз, и когда он пересекает порог, ищите его до duration (конец) файла самостоятельно.Это позволяет ended нормально запускаться.

iOS не позволяет запускать сценарии после блокировки экрана или использования других приложений

Это реальная проблема для отладки, так какэто не появляется ни в одном из симуляторов.В любом случае, вы правы, ваш JavaScript будет приостановлен, поэтому даже если вы будете следовать рекомендациям Apple, вам не повезет.Или вы?

Взломать ... настроить ScriptProcessorNode в контексте Web Audio.Установите размер буфера как 512 сэмплов или что-то в этом роде.Затем, в процессе сценария, вызовите событие timeupdate для вашего аудиоэлемента.Это удерживает твой JavaScript там.ScriptProcessorNode должен иметь здесь особые привилегии по своей природе.

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

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