IOS13 tag <audio> non funzionanti sono stati usati come buffer audio collegati al contesto audio?


9

Attualmente stiamo sviluppando un sito Web che consente agli utenti di riprodurre semplici tag audio collegati al contenuto audio. Siamo a conoscenza di problemi tecnici con IOS come la riproduzione avviata dai gesti degli utenti. Tutto funziona bene fino a IOS12. Ora che IOS13 è fuori, non funziona più nulla.

Funziona su tutti i desktop, Android e IOS fino a IOS13.

Qualche idea su cosa sta succedendo?

Non ci sono messaggi di errore nella console durante il debug con Safari sul desktop collegato all'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>


1
Anche la mia app è stata rotta. Ma vedo che crei un contesto audio prima del clic, non è stato consentito anche in iOS 12.
shukshin.ivan,

La audioContext.resume();linea dovrebbe occuparsene, ma penso che ciò che segue dovrebbe essere nella risoluzione della promessa, in questo modo: audioContext.resume (). Then (function () {player.play () playbutton.innerHTML = "Pause"; playStatus = 'isPlaying';}
Paulie,

Ho già aggiunto la promessa nel codice. Ma con o senza promessa, cambia nulla.
JohnLoyd,

Ho lo stesso problema. L'unica differenza è che il tag audio viene visualizzato dinamicamente in un'app a pagina singola. L'ho parzialmente funzionato rendendo srcstatico con un URL completo. Tuttavia, funziona solo se lasci Safari e lo riapri. Comportamento molto strano.
Pantaloni

Risposte:



0

Questo problema è stato erroneamente segnalato come risolto in iOS 13.3.1 (28 gennaio 2020). Tuttavia, come chiunque può leggere da questo bug report di WebKit 203435 , il problema è ancora presente dal 7 aprile 2020, data di rilascio di iOS 13.4.1.

La segnalazione di bug non fornisce ulteriori informazioni in merito alla data prevista per la correzione del bug. Purtroppo, l'80% degli utenti iOS (circa il 14% del mercato mobile totale, secondo Statcounter) è stato erroneamente incapace di utilizzare WebAudio sui propri dispositivi per mesi.

Ciò che peggiora le cose per noi sviluppatori è che Safari non segnala alcun errore. Pertanto, anche solo tentare di immaginare un fallback non è possibile o molto difficile.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.