Czy IOS13 zepsute tagi <audio> są używane jako bufory audio podłączone do kontekstu audio?

9

Obecnie tworzymy stronę internetową, która pozwala użytkownikom odtwarzać proste tagi audio podłączone do audiokontekstu. Zdajemy sobie sprawę z problemów technicznych związanych z IOS, takich jak odtwarzanie inicjowane gestami użytkownika. Wszystko działa dobrze do IOS12. Teraz, gdy IOS13 jest niedostępny, nic już nie działa.

Działa na wszystkich komputerach stacjonarnych, Androidzie i iOS do IOS13.

Masz pomysł na to, co się dzieje?

Podczas debugowania za pomocą Safari na komputerze stacjonarnym podłączonym do iPhone'a nie ma żadnych komunikatów o błędach.

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
źródło
1
Moja aplikacja również została zepsuta. Ale widzę, że tworzysz kontekst audio przed kliknięciem, nie było to również dozwolone w iOS 12.
shukshin.ivan
audioContext.resume();Linia powinna zadbać o to, ale myślę, że co za tym idzie powinna być w postanowieniu obietnicy, tak:. AudioContext.resume (), a następnie (function () {player.play () playbutton.innerHTML = „Pauza”; playStatus = „isPlaying”;}
Paulie,
Dodałem już obietnicę w codepen. Ale z obietnicą lub bez, wszystko to zmienia.
JohnLoyd,
Mam ten sam problem. Jedyną różnicą jest to, że tag audio jest dynamicznie renderowany w aplikacji na jednej stronie. Częściowo działam, tworząc srcstatyczny pełny adres URL. Działa to jednak tylko wtedy, gdy opuścisz Safari, a następnie otworzysz go ponownie. Bardzo dziwne zachowanie.
Spodnie

Odpowiedzi:

2

Niestety, AudioContext.createMediaElementSourcezostał zepsuty od czasu wydania iOS 13. Błąd został naprawiony: https://bugs.webkit.org/show_bug.cgi?id=203435 . Jest w przeglądarce Safari Technology Preview 99 .

Jordy van Dortmont
źródło
Wygląda na to, że deweloperzy z webkit naprawili go kilka dni temu, jednak wciąż mam problem z najnowszą wersją iOS. Czy zostanie to naprawione w następnej wersji iOS lub Webkit? Jestem zmieszany.
Parasol
0

Ten problem został błędnie zgłoszony jako naprawiony w iOS 13.3.1 (28 stycznia 2020 r.). Niemniej jednak, jak każdy może przeczytać w tym raporcie o błędach WebKit 203435 , problem nadal występuje od 7 kwietnia 2020 r., Daty wydania iOS 13.4.1.

Raport o błędzie nie zawiera żadnych dalszych informacji dotyczących szacowanej daty, w której błąd zostanie naprawiony. Niestety, 80% użytkowników iOS (około 14% całego rynku mobilnego, według Statcounter) było błędnie niezdolnych do używania WebAudio na swoich urządzeniach od miesięcy.

Co gorsza dla nas, programistów, Safari nie zgłasza żadnego błędu. Zatem nawet próba wyobrażenia sobie powrotu do stanu rzeczy nie jest ani możliwa, ani bardzo trudna.

Luigi Pulcini
źródło