【问题标题】:Safari and Recording Audio — HTML Media Capture / getUserMedia()Safari 和录制音频 - HTML 媒体捕获 / getUserMedia()
【发布时间】:2017-04-26 00:39:17
【问题描述】:

它看起来像 getUserMedia() is now the way to go 用于捕获用户的录音。

但是没有 Safari 和 iOS Safari。

最初我至少计划通过利用 HTML 媒体捕获规范来包含 iOS Safari。从我读过的所有内容来看,这应该是可行的。但从我的测试来看,iOS 只会提供照片/视频选项。我尝试了以下语法,但没有成功:

<input type="file" accept="audio/*;capture=microphone" />
<input type="file" accept="audio/*" capture="microphone">
<input type="file" accept="audio/*" />

但是,捕获图像可以按预期工作,允许用户使用相机:

<input type="file" accept="image/*" />

在需要访问麦克风时,为了让 iOS Safari 与 HTML Media Capture 一起工作,我需要进行哪些更改?

除了我已经尝试做的之外,还有其他适用于 Safari 和 iOS Safari 的选项吗?

【问题讨论】:

标签: javascript html ios safari audio-recording


【解决方案1】:

iOS 6+ 上的 Safari 支持HTML Media Capture spec,但仅适用于视频和照片:

  • &lt;input type="file" accept="image/*" /&gt;
  • &lt;input type="file" accept="video/*" /&gt;

它不支持仅音频捕获,因此以下将不会产生预期的结果:

  • &lt;input type="file" accept="audio/*" /&gt;

Android 支持所有 3(视频、音频、图像)。

因此对 Android 和 iOS 的支持如下:

iOS 10.3 上的 Safari 还支持 capture 布尔属性。它表明直接从网络摄像头捕获是首选。使用时,iOS 10.3+ 上的 Safari 将不会提供选择现有视频或图像的选项:

  • &lt;input type="file" accept="image/*" capture /&gt;

我在https://addpipe.com/blog/correct-syntax-html-media-capture/ 上写了更多关于 HTML 媒体捕获主题的文章

【讨论】:

  • 太好了,感谢您提供的信息。您知道在 Safari 上捕获音频的任何其他方法吗?
  • 暂时没有。我们正在等待今年秋季的 Safari 更新。它很有可能会支持 WebRTC 和 getUserMedia() 。
  • 确认:Safari 和 iOS Safari 确实会在版本 11 中支持 getUserMedia()。目前还没有关于 iOS 11 是否支持音频的 HTML 媒体捕获的消息。
【解决方案2】:

更新:Safari 11.0 (iOS 11) 中的新功能 - 摄像头和麦克风访问。 添加了对媒体捕获 API 的支持。 增加了网站从用户设备访问摄像头和麦克风流的功能(需要用户权限。)

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

【讨论】:

  • 我修复了链接(Apple 将其移至存档,因为 11.0 版不再是当前(最新)版本。请参阅媒体部分。
【解决方案3】:

Safari 仍然不能正确支持getUserMedia。 它失败了:

imgCapture = new ImageCapture(stream.getVideoTracks()[0]);

这适用于 Chrome,但 Safari 不知道 ImageCapture() 是什么。

【讨论】:

  • Image Capture API 是它自己的接口 — 互补,但与 getUserMedia() 无关。
  • 如果您无法从媒体中捕获图像,您可以使用 getUserMedia 做什么?我认为这是它的主要目的。你知道 Safari 什么时候会支持这个吗?
  • MediaDevices API(包括 getUserMedia() 方法)的主要目的是提供对硬件功能以及由该硬件生成的 MediaStream 轨道的访问。这些 MediaStream 通常由其他 API 处理。您可以做的一件事是将视频轨道从 getUserMedia() 流式传输到 HTML
  • MediaStream Image Capture API 似乎几个月前才在 Google Chrome 上可用,所以我不希望它在 Safari 上出现一段时间——Apple 似乎没有急于跟上对渐进式网络应用有用的功能。
猜你喜欢
  • 2013-04-26
  • 2018-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 2013-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多