IOS13 损坏的<audio>标签是否用作连接到音频上下文的音频缓冲区?



我们目前正在开发一个网站,允许用户播放连接到音频上下文的简单音频标签。我们注意到 IOS 存在的技术问题,例如由用户手势启动的播放。在IOS12之前一切正常。 现在IOS13已经出来了,什么都不再有效了。

它适用于所有台式机,安卓和IOS直到IOS13。

知道发生了什么吗?

使用连接到 iPhone 的桌面上的 Safari 进行调试时,控制台中没有错误消息。

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>

此问题被错误地报告为已在 iOS 13.3.1(2020 年 1 月 28 日(中修复。尽管如此,正如任何人都可以从此 WebKit 错误报告中读到的那样,203435,截至 2020 年 4 月 7 日,即 iOS 13.4.1 的发布日期,问题仍然存在。

错误报告没有提供有关修复此错误的预计日期的任何进一步信息。可悲的是,80%的iOS用户(根据Statcounter的数据,约占整个移动市场的14%(已经错误地无法在他们的设备上使用WebAudio几个月了。

对于我们开发人员来说,更糟糕的是Safari没有报告任何错误。因此,无论如何,即使试图想象后备也是不可能的或非常困难的。

不幸的是,自iOS 13发布以来,AudioContext.createMediaElementSource已被破坏。据报道,该错误已在Safari Technology Preview 99:https://bugs.webkit.org/show_bug.cgi?id=203435 中修复,但在最近发布的iOS中仍然被破坏,因此提交了新的错误报告,可以在此处找到:https://bugs.webkit.org/show_bug.cgi?id=211394

最新更新