iOS 14 Safari中的WebRTC / getUserMedia问题和手机睡眠/解锁

问题描述

我似乎已经注意到iOS 14 Safari中getUserMedia的回归。复制步骤如下:

  1. 在iOS 14 Safari上转到https://webrtc.github.io/samples/src/content/getusermedia/gum/
  2. 点击“打开相机”并接受相机权限;您应该看到本地摄像机的视频。
  3. 单击电源按钮并锁定手机;让手机进入睡眠状态
  4. 解锁/唤醒电话;本地摄像机视频不见了。

在运行iOS 13的设备上不会发生这种情况。

我的问题是:

  1. 其他人可以在其设备上确认吗?到目前为止,我只在iPhone 11上进行过测试。
  2. 有人找到解决方案了吗?

解决方法

这里也是!

我在iOS的Browserstack中检查了此行为:

  • 12.x:✓
  • 13.x:✓
  • 14.x:✗

尝试一下:

navigator.mediaDevices.getUserMedia({ audio: true,video: true })
 .then(stream => {
   const videoTracks = stream.getVideoTracks();
   console.log(videoTracks[0].enabled);
   document.querySelector('video').srcObject = stream;
 });

// Output
true <-- ?

然后,如果您再次尝试获取摄像头,但是替换以前的MediaStream上的视频轨道即可。

有时如果您将视频约束与facingMode: 'user'一起使用也可以,为什么?我不知道。

我仍然找不到一致的解决方案。

,

是的,我在iOS 14.2和getUserMedia中遇到类似的奇怪问题,我只能得到 /dev/video*上班 如果我将其更改为: navigator.mediaDevices.getUserMedia({video: true }) 它会失败。 当我在Safari MacOS,Chrome for MacOS,Linux Firefox上测试我的项目时,代码没有问题。

作为临时解决方案,这样我就可以继续我的生活:

navigator.mediaDevices.getUserMedia({ audio: true,video: true })