Пока это было настоящим приключением… Мне удалось настроить удалённую отладку между Chrome на моём компьютере с Ubuntu и Safari на iOS на iPhone, несмотря на множество трудностей. Однако, что раздражает, вкладка «Network» (Сеть) остаётся пустой, хотя именно она для этой задачи наиболее важна.
Я обнаружил, что установка атрибута preload="metadata" позволяет аудио воспроизводиться при первом нажатии в Safari на iOS, тогда как при preload="none" требуется последовательность «Воспроизвести > Пауза > Воспроизвести», чтобы аудио действительно началось.
Я проверил это на теге video, и похоже, что здесь возникает аналогичная проблема.
Переход на preload="none" был сделан из-за вашего сообщения об ошибке здесь: Secure media uploads expire. Сейчас мы находимся в некой неприятной серой зоне: если вернуть preload к значению metadata, вышеописанная проблема вернётся. Недавно мы увеличили срок действия подписанных URL до 5 минут (FIX: Increase time of DOWNLOAD_URL_EXPIRES_AFTER_SECONDS to 5 minutes by martin-brennan · Pull Request #10160 · discourse/discourse · GitHub), поэтому исходная ошибка станет менее актуальной… но всё ещё останется проблемой.
Я всё ещё обдумываю это и экспериментирую с настройками… Не уверен, что сможем получить лучшее из обоих миров. Для защищённых медиафайлов требование нескольких нажатий для просмотра — не идеальный опыт.
Редактирование: мне удалось заставить вкладку «Network» в отладчике работать. Пример на нашем внутреннем экземпляре Discourse для тега audio с preload="none":
-
Нажать «Воспроизвести»: GET /secure-media-uploads/dev/original/4X/6/1/8/618a6b19a07de18205cc9889cb604e414b30372b.mp3, статус — Finished (Завершено).
-
Нажать «Пауза».
-
Нажать «Воспроизвести»: GET presigned_url_here, статус — 206 Partial Content, аудио загружается корректно.
Странность в том, что с preload=“metadata” мы получаем точно такую же последовательность запросов, но при одном нажатии «Воспроизвести». Получается, что Safari сначала загружает метаданные при первом нажатии «Воспроизвести», а затем требует паузу и повторное нажатие «Воспроизвести», чтобы начать воспроизведение аудио.
Не уверен, происходит ли это на других устройствах, например, на Android? У меня нет устройства для тестирования там.