Используются ли в IOS13 поврежденные теги <audio> в качестве аудио-буферов, связанных с аудио-контекстом?

9

В настоящее время мы разрабатываем веб-сайт, который позволяет пользователям воспроизводить простые аудиометки, связанные с аудиоконтекстом. Нам известны технические проблемы с 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>

JohnLoyd
источник
1
Мое приложение было сломано. Но я вижу, что вы создаете аудио-контекст до щелчка, это было запрещено в ios 12.
shukshin.ivan
audioContext.resume();Линия должна заботиться о том , что, но я думаю , что следует должно быть в обещание решимости, как это:. AudioContext.resume () , а затем (функция () {player.play () playbutton.innerHTML = «Пауза»; playStatus = 'isPlaying';}
Поли
Я уже добавил обещание в коде. Но с обещанием или без него это что-то меняет.
ДжонЛойд
У меня такая же проблема. Разница лишь в том, что аудио-тег динамически отображается в одностраничном приложении. Я получил это частично работая, сделав srcстатический с полным URL. Однако это работает только в том случае, если вы покинете Safari, а затем откроете его снова. Очень странное поведение.
Брюки

Ответы:

2

К сожалению, 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

Джорди ван Дортмонт
источник
Похоже, разработчики из webkit исправили это несколько дней назад, однако, я все еще испытываю проблему в последней версии iOS. Это будет исправлено в следующем выпуске ios или webkit? Я смущен.
зонтик
@Umbrella Я отредактировал свой ответ с последними обновлениями.
Джорди ван Дортмонт
0

Эта ошибка была ошибочно сообщена как исправленная в iOS 13.3.1 (28 января 2020 г.). Тем не менее, как любой может прочитать из этого отчета об ошибке WebKit 203435 , проблема все еще существует по состоянию на 7 апреля 2020 года, дата выпуска iOS 13.4.1.

Отчет об ошибке не предоставляет никакой дополнительной информации относительно предполагаемой даты, когда эта ошибка будет исправлена. К сожалению, 80% пользователей iOS (около 14% всего рынка мобильных устройств, по данным Statcounter) по ошибке уже несколько месяцев не могут использовать WebAudio на своих устройствах.

Что еще хуже для нас, разработчиков, так это то, что Safari не сообщает об ошибках. Таким образом, даже попытка представить себе запасной вариант в любом случае невозможна или очень трудна.

Луиджи Пульчини
источник