问题描述
我似乎已经注意到iOS 14 Safari中getUserMedia的回归。复制步骤如下:
- 在iOS 14 Safari上转到https://webrtc.github.io/samples/src/content/getusermedia/gum/
- 点击“打开相机”并接受相机权限;您应该看到本地摄像机的视频。
- 单击电源按钮并锁定手机;让手机进入睡眠状态
- 解锁/唤醒电话;本地摄像机视频不见了。
在运行iOS 13的设备上不会发生这种情况。
我的问题是:
- 其他人可以在其设备上确认吗?到目前为止,我只在iPhone 11上进行过测试。
- 有人找到解决方案了吗?
解决方法
这里也是!
我在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 })