【发布时间】:2020-02-07 07:05:47
【问题描述】:
我正在使用getUserMedia 录制音频,然后允许用户单击一个按钮来收听录音或另一个缓冲区。一年来这一切都很好,所以我认为我没有违反任何导致 AudioContext 被暂停的规则。而且,无论如何,我正在测试 AudioContext 以确保它不会在我的按钮处理程序中暂停。
这在所有具有许多浏览器的现代系统上都运行良好。但是,这不是在 iOS 的 Safari 13 中播放音频。它会从承诺中返回,就好像它正在播放音频一样,但是在我再次调用getUserMedia 之前没有任何声音。
作为一个实验,我将下面一行放在按钮处理程序的顶部:
navigator.mediaDevices.getUserMedia({
audio: {
echoCancellation: {ideal: false},
}
});
而且它有效!
但是,为什么?我对那个解决方案不满意,因为我不确定浏览器为什么想要这样。我必须请求麦克风播放任何声音对我来说没有意义。
我唯一的线索是,一旦我执行getUserMedia,我会在 Safari 上保持录音打开(我这样做是因为 Safari 有一个超时时间 - 当我请求麦克风时,它会向用户弹出一个对话框允许麦克风。有时用户可能需要 90 秒才能按下“录音”,如果我不打开麦克风,它会再次弹出对话框。)
有人知道发生了什么吗?而且,我还没有找到任何关于 Safari 和音频的技术文章。除了标准的 MDN 之外还有什么?
【问题讨论】:
标签: javascript mobile-safari html5-audio web-audio-api