如何在iOS上使用getUserMedia更改维度?

qlckcl4x  于 2023-06-25  发布在  iOS
关注(0)|答案(1)|浏览(194)

自从Apple的iOS 11 webRTCgetUserMedia引入以来,我能够将相机的输入获取到<video>元素,但不能使用常规方法设置其尺寸(heightwidth)。
这个方法的作用是:

var constraints = {
    audio: false,
    video: { facingMode: 'user' }
};

navigator.mediaDevices.getUserMedia(constraints).then(
    function success(stream) {
         video.srcObject = stream;
    }
);

这不起作用(在iOS上),并且不显示图像:

var constraints = {
    audio: false,
    video: { facingMode: 'user', width: 306, height: 180 }
};

navigator.mediaDevices.getUserMedia(constraints).then(
    function success(stream) {
         video.srcObject = stream;
    }
);

来自catch的错误消息:
无效约束

**失败尝试:**设置mandatoryidealminHeight

这是一个bug吗?是否有已知的替代方案?

j8yoct9x

j8yoct9x1#

这看起来像是Safari中的一个bug。像width: 306这样的裸值应该表示ideal,但Safari似乎将它们视为exact,并且失败并显示错误,除非它与用户相机提供的驱动程序分辨率完全匹配。
除此之外,Safari似乎与Firefox和Edge等其他浏览器一样工作,其目标是找到相机提供的最佳匹配的原生分辨率。
所以坚持使用范围,直到Safari修复这个问题。

navigator.mediaDevices.getUserMedia({video: {width: {min: 320, max: 640}}})

...或使用通用值与后备策略:

try {
  await navigator.mediaDevices.getUserMedia({video: {width: 320}})
} catch(e) {
  await navigator.mediaDevices.getUserMedia({video: {width: 640}})
}

相关问题