В настоящее время мы разрабатываем веб-сайт, который позволяет пользователям воспроизводить простые аудиометки, связанные с аудиоконтекстом. Нам известны технические проблемы с IOS, такие как воспроизведение, инициированное жестами пользователя. Все отлично работает до IOS12. Теперь, когда вышла IOS13, больше ничего не работает.
Работает на всех десктопах, андроиде и IOS до IOS13.
Есть идеи о том, что происходит?
При отладке с помощью Safari на рабочем столе, подключенном к iphone, в консоли нет сообщений об ошибках.
https://codepen.io/gchad/pen/WNNvzzd
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" dir="ltr">
<body>
<div>
<h1>Play Audio Tag connected to audio context</h1>
<div id="playbutton" style="width:100px; height:100px; background:blue; color:white; margin:auto; text-align: center; font-size: 30px; cursor: pointer;">
Play
</div>
<audio id="myPlayer" crossorigin="anonymous" >
<source src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/858/outfoxing.mp3"/>
<!--http://commondatastorage.googleapis.com/codeskulptor-assets/week7-brrring.m4a-->
</audio>
</div>
<script>
var player = document.getElementById('myPlayer'),
playbutton = document.getElementById('playbutton'),
playStatus = 'paused';
var audioContext = new(window.AudioContext || window.webkitAudioContext)();
var audioSource = audioContext.createMediaElementSource(player);
audioSource.connect(audioContext.destination);
playbutton.addEventListener('click',function(ev){
if( playStatus == 'paused'){
audioContext.resume();
player.play();
playbutton.innerHTML = "Pause";
playStatus = 'isPlaying';
} else {
player.pause();
playbutton.innerHTML = "Play";
playStatus = 'paused';
}
});
</script>
</body>
web-audio-api
ios13
JohnLoyd
источник
источник
audioContext.resume();
Линия должна заботиться о том , что, но я думаю , что следует должно быть в обещание решимости, как это:. AudioContext.resume () , а затем (функция () {player.play () playbutton.innerHTML = «Пауза»; playStatus = 'isPlaying';}src
статический с полным URL. Однако это работает только в том случае, если вы покинете Safari, а затем откроете его снова. Очень странное поведение.Ответы:
К сожалению,
AudioContext.createMediaElementSource
он был поврежден с момента выпуска iOS 13. Сообщалось, что ошибка исправлена в Safari Technology Preview 99 : https://bugs.webkit.org/show_bug.cgi?id=203435 , но в недавнем выпуск iOS, поэтому был подан новый отчет об ошибке, который можно найти здесь: https://bugs.webkit.org/show_bug.cgi?id=211394источник
Эта ошибка была ошибочно сообщена как исправленная в iOS 13.3.1 (28 января 2020 г.). Тем не менее, как любой может прочитать из этого отчета об ошибке WebKit 203435 , проблема все еще существует по состоянию на 7 апреля 2020 года, дата выпуска iOS 13.4.1.
Отчет об ошибке не предоставляет никакой дополнительной информации относительно предполагаемой даты, когда эта ошибка будет исправлена. К сожалению, 80% пользователей iOS (около 14% всего рынка мобильных устройств, по данным Statcounter) по ошибке уже несколько месяцев не могут использовать WebAudio на своих устройствах.
Что еще хуже для нас, разработчиков, так это то, что Safari не сообщает об ошибках. Таким образом, даже попытка представить себе запасной вариант в любом случае невозможна или очень трудна.
источник