在 iPhone 上的 iOS Safari 中访问相机

Accessing the camera in iOS Safari on an iPhone

我有 Single Page Webapp (SPA) 验证 用户作为注册过程的一部分。验证的一部分是捕获用户的 selfie。为此,我实现了以下代码的一个版本,以将 camera 输入到网页上的 video 元素中,然后我可以从中 样本 图像到 canvas.

navigator.mediaDevices.getUserMedia({ video: true, audio: false })
    .then(localMediaStream => {
      if ('srcObject' in video) {
        video.srcObject = localMediaStream;
      } else {
        video.src = window.URL.createObjectURL(localMediaStream);
      }
      video.play();
    })
    .catch(err => {
      console.error(`Not available!!!!`, err);
    });

此代码基于 Wes Bos 的示例,来自他的 JavaScript30 课程(#19 Unreal Webcam Fun)。你可以试试here.

这段代码似乎在大多数浏览器上都能正常工作,major Apple Safari 在 iOS iPhone(示例:iPhone 12 Pro,iOS 14.7.1)。在 iPhone 上,我捕获了相机图像的第一帧,之后,video 元素显示了一个黑色方块。

奇怪的是,它在 iPad 上运行良好(示例:iPad Pro(11 英寸),iOS 14.7.1),但在任何 iPhone 我试过了。

我在 Whosebug 和其他地方看到了很多描述类似问题的讨论,但我还没有找到明确的答案,或者更好的是,找到解决方案。

有人知道吗?

干杯,S t u a r t。

我在其他服务上 post 编辑了这个问题,最终通过一个单独的 Discord 收到了一个名为 Ravavyr 的用户的回复渠道。回复将我指向这篇提供答案的文章。

https://leemartin.dev/hello-webrtc-on-safari-11-e8bcb5335295

似乎 iOS Safari 需要更多配置才能正常工作。

从原始 post 链接的 CodePen 已经更新,包括使其工作的更改。

// Fix for iOS Safari from https://leemartin.dev/hello-webrtc-on-safari-11-e8bcb5335295
video.setAttribute('autoplay', '');
video.setAttribute('muted', '');
video.setAttribute('playsinline', '')

我希望这对未来的读者有所帮助。