作者:兄弟连教育 | 来源:互联网 | 2023-01-17 11:48
在最近添加支持后,我试图通过iOS11上的Safari上的麦克风进行音频捕获
但是,onaudioprocess
永远不会调用回调.这是一个示例页面:
在大多数平台上,当onaudioprocess
调用回调时,您将看到要添加到消息列表中的项目.但是,在iOS上,永远不会调用此回调.
我还应该做些什么来尝试在iOS 11上使用Safari调用它?
1> Nathan Fried..:
有两个问题.主要的一点是,iOS 11上的Safari似乎会自动挂起AudioContext
不是为响应点击而创建的新游戏.你可以resume()
,但只是为了回应.
(更新:Chrome移动设备也可以执行此操作,Chrome桌面将从版本70/2018年12月开始具有相同的限制.)
因此,您必须在获得之前创建它MediaStream
,或者让用户稍后再次点击.
您的代码的另一个问题AudioContext
是webkitAudioContext
在Safari中加上前缀.
这是一个工作版本:
(您可以onaudioprocess
更快地设置回调,但在用户批准麦克风访问之前,您将获得空缓冲区.)
哦,还有另外一个需要注意的iOS漏洞:iPod touch上的Safari(从iOS 12.1.1开始)报告说它没有麦克风(确实如此).所以,Error: Invalid constraint
如果你在那里要求音频,getUserMedia会拒绝.
仅供参考:我在npm上维护麦克风流包,为您完成此操作,并以Node.js风格的ReadableStream提供音频.我刚刚使用此修复程序更新了它,如果您或其他任何人更愿意使用原始代码.
即使作为对用户操作的响应,我将audioContext置于挂起状态,并且必须在创建后立即添加audioContext.resume(),即11.0.3