Я записываю аудио, используя getUserMedia
, затем позволяю пользователю нажать кнопку, чтобы прослушать запись или другой буфер. Все это прекрасно работало в течение года, поэтому я не думаю, что нарушаю какое-либо из правил, приводящих к приостановке AudioContext. И, в любом случае, я тестирую AudioContext, чтобы убедиться, что он не приостановлен в моем обработчике кнопок.
Все это прекрасно работает во всех современных системах со многими браузерами. Однако это не воспроизводит звук в Safari 13 в iOS. Он вернется из обещаний, как если бы он воспроизводил звук, но ничего не звучит, пока я снова не позвоню getUserMedia
.
В качестве эксперимента я поместил следующую строку в верхней части моего обработчика кнопок:
navigator.mediaDevices.getUserMedia({
audio: {
echoCancellation: {ideal: false},
}
});
И это работает!
Но почему? Мне не нравится это решение, потому что я не уверен, почему браузер этого хочет. Для меня не имеет смысла просить микрофон воспроизводить любой звук.
Единственная подсказка, которую я имею, это то, что как только я выполняю getUserMedia
, я сохраняю запись открытой в Safari (Я делаю это потому, что у Safari есть тайм-аут - когда я запрашиваю микрофон, он открывает диалоговое окно, чтобы разрешить микрофон. Иногда пользователю может потребоваться 90 секунд, чтобы обойти нажатие кнопки «запись», и если я нене оставляйте микрофон открытым, снова появляется диалоговое окно.)
У кого-нибудь есть идеи, что происходит? И я не смог найти никакого технического описания Safari и аудио. Есть ли что-нибудь кроме стандартного MDN?