我正在使用getUserMedia
录制音频,然后允许用户单击一个按钮来收听录制内容或另一个缓冲区。这一切都工作了一年,所以我认为我没有违反任何导致AudioContext被暂停的规则。而且,无论如何,我正在测试AudioContext,以确保它没有在我的按钮处理程序中挂起。
在具有许多浏览器的所有现代系统上,这一切都可以正常工作。但是,这无法在iOS的Safari 13中播放音频。它会从承诺中恢复,就像在播放音频一样,但是直到我再次致电getUserMedia
为止,一切都没有。
作为实验,我将以下行放在按钮处理程序的顶部:
navigator.mediaDevices.getUserMedia({
audio: {
echoCancellation: {ideal: false},
}
});
它有效!
但是,为什么呢?我对该解决方案不满意,因为我不确定浏览器为何要这么做。对我来说,我必须要求麦克风播放任何声音都没有意义。
我唯一的线索是,getUserMedia
结束后,我便在Safari上保持录音打开(之所以这样做,是因为Safari超时-当我请求麦克风时,它会弹出一个对话框用户允许麦克风。有时用户可能需要90秒钟才能按“录制”,如果我不打开麦克风,则会再次弹出对话框。)
任何人都知道发生了什么事吗?而且,我还没有找到关于Safari和音频的任何技术文章。除了标准的MDN,还有什么?
答案 0 :(得分:1)
IOS13也破坏了我们的应用程序之一。多年来一直运行良好。没有引发任何错误,我们也没有违反任何规则。这是我帖子的链接: Has IOS13 broken <audio> tags used as audio buffers connected to the audio context?
尽管api的用法不同,但我相信它是相关的。苹果显然在这个新版本中破坏了一些东西。
答案 1 :(得分:0)
已确认这是Safari 13中的错误,并已在维护版本中修复。我们再也没有收到来自该领域的报告,所以我想它会为每个人自动更新。