Apakah IOS13 telah merusak tag <audio> yang digunakan sebagai buffer audio yang terhubung ke konteks audio?

9

Saat ini kami sedang mengembangkan situs web yang memungkinkan pengguna untuk memutar tag audio sederhana yang terhubung ke audiocontext. Kami menyadari masalah teknis dengan iOS seperti pemutaran yang dimulai oleh gerakan pengguna. Semuanya berfungsi dengan baik hingga IOS12. Sekarang setelah IOS13 keluar, tidak ada yang berfungsi lagi.

Ini bekerja di semua desktop, android dan iOS hingga iOS13.

Adakah yang tahu apa yang sedang terjadi?

Tidak ada pesan kesalahan di konsol saat debugging dengan Safari di Desktop yang terhubung ke 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
sumber
1
Aplikasi milikku juga sudah rusak. Tapi saya melihat Anda membuat konteks audio sebelum klik, itu tidak diperbolehkan di ios 12 juga.
shukshin.ivan
The audioContext.resume();line harus mengurus itu, tapi saya pikir apa yang berikut harus dalam menyelesaikan janji, seperti ini:. AudioContext.resume () kemudian (function () {player.play () playbutton.innerHTML = "Jeda"; playStatus = 'isPlaying';}
Paulie
Saya sudah menambahkan janji di codepen. Tetapi dengan atau tanpa janji, itu mengubah apa pun.
JohnLoyd
Saya memiliki masalah yang sama. Satu-satunya perbedaan adalah tag audio secara dinamis diberikan dalam aplikasi halaman tunggal. Saya mendapatkannya sebagian dengan membuat srcstatis dengan URL lengkap. Namun, itu hanya berfungsi jika Anda meninggalkan Safari dan kemudian membukanya lagi. Perilaku yang sangat aneh.
Celana

Jawaban:

2

Sayangnya, AudioContext.createMediaElementSourcetelah rusak sejak rilis iOS 13. Bug telah diperbaiki: https://bugs.webkit.org/show_bug.cgi?id=203435 . Ada dalam Safari Technology Preview 99 .

Jordy van Dortmont
sumber
Sepertinya devs dari webkit memperbaikinya beberapa hari yang lalu, namun, saya masih mengalami masalah pada versi iOS terbaru. Apakah akan diperbaiki dengan rilis ios berikutnya atau rilis webkit? Saya bingung.
Payung
0

Masalah ini secara keliru dilaporkan telah diperbaiki di iOS 13.3.1 (28 Januari 2020). Namun demikian, seperti orang dapat membaca dari laporan bug WebKit ini 203435 , masalahnya masih ada pada tanggal 7 April 2020, tanggal rilis iOS 13.4.1.

Laporan bug tidak memberikan informasi lebih lanjut sehubungan dengan perkiraan tanggal bug ini akan diperbaiki. Sayangnya, 80% pengguna iOS (sekitar 14% dari total pasar ponsel, menurut Statcounter) telah secara keliru tidak mampu menggunakan WebAudio pada perangkat mereka selama berbulan-bulan, sekarang.

Yang membuat segalanya lebih buruk bagi kami para pengembang adalah Safari tidak melaporkan kesalahan apa pun. Jadi, bahkan mencoba membayangkan mundur tidak mungkin atau sangat sulit.

Luigi Pulcini
sumber