使用Safari和HTML5在iPhone上进行录音

我正在开发一个简单的Web应用程序,只logging麦克风的声音,但我有一些麻烦。

HTML5语音录制function在Chrome和Firefox桌面或Android上运行良好。 但是在iPhone上使用移动浏览器,甚至是Chrome和Firefox都不行。

我试了recorder.js,结果没有改变。

是否有可能在safari上录制声音,或者是safari或iOS的function缺失?

就我所知,即使在最新的iOS(iOS 10)上,使用HTML5在iOS上录制语音也是不可能的。 由于iOS上的所有浏览器仅限于使用iOS上使用的UIWebView,因此iOS上的Chrome无法支持任何可用于媒体录制的API。
例如,您使用的recorder.jsbuild立在Media Capture API上。 如果你检查caniuse.com ,你会发现iOS不支持这个API。 ( 这里也检查问题)。
MediaRecorder API也是一个有前途的API,但仍然不被苹果的浏览器所支持 。

查看下面的答案以获取更多信息
1. 使用HTML5从iPhone录制语音
2. 在iOS上录音html5

自iOS11以来,Safari现在支持Media Capture API:

Safari 11.0中的新function – 摄像头和麦克风访问。

增加了对媒体捕获API的支持。 增加网站从用户设备访问摄像头和麦克风stream的能力(需要用户权限)。

https://developer.apple.com/library/content/releasenotes/General/WhatsNewInSafari/Safari_11_0/Safari_11_0.html

因此recorder.js现在可以工作。

现在可以在Safari上“iOS11”上“轻松”了! mediaStream API现在受支持。 mediaRecorder API却不是。 这会导致现有的任何示例无法正常工作。 因此,您必须通过将媒体stream连接到webkitAudioContext ScriptProcessorNode来实现自己的mediaRecorderfunction,并在节点的onaudioprocess事件上收集stream缓冲区。 然后,您可以收集iOS麦克风的stream媒体audio数据,并根据需要进行处理,最有可能将其合并到上传/下载的wav文件中。 这适用于任何支持媒体streamAPI的浏览器。

两个陷阱:
– iOS Safari喜欢取消分配主线程(在水龙头上)未创build的任何AudioContext,因此您无法在设备媒体访问接受的callback中对其进行初始化。
– scriptProccessorNode不会触发任何audioprocessed事件,除非inputAND输出由于某种原因连接。

Safari 11在iOS 11中不支持使audio(仅)录制成为可能(并易于实现)的两个标准:

  • 用于audio的HTML媒体捕捉 ( 规范 , 正确的语法 ) – audiologging应传递给本机应用程序,应用程序将结果传回给浏览器进行上传(适用于video和图片)
  • MediaStream Recording API ( spec , demo ) – 允许您直接在浏览器中logging到blob。 录音可以下载或上传到networking服务器。
Interesting Posts