我有以下限制,这些限制在桌面版Chrome(模拟移动分辨率)上可以很好地工作
const constraints = {
audio: false,
video: {
width: screen.width,
height: screen.height
}
};
navigator.mediaDevices.getUserMedia(constraints).then(stream => {})
但是,当在iPhone / Safari上实际尝试使用此功能时,相机根本不尊重它,并且变得非常小或变形-从约束条件中删除宽度/高度可以使其具有更好的比例,但根本无法全屏显示,而只是集中显示。
我也尝试过最小/最大约束,但并不幸运。
有什么办法可以在iPhone上使用它吗?
答案 0 :(得分:2)
我建立了一些移动优先的AR网站。当您请求解决方案时,Web浏览器会查看该解决方案是否存在,如果不存在,则决定是否为您模拟提要。并非所有浏览器都可以进行仿真(即使它是规范的一部分)。这就是为什么它可以在某些浏览器而不是其他浏览器中工作的原因。 Safari不会使用您选择的摄像头(我想是前置摄像头)来模拟您要求的分辨率。
您可以在此处了解更多信息(不同的问题,但提供了更深入的说明):Why the difference in native camera resolution -vs- getUserMedia on iPad / iOS?
解决方案
我解决这个问题的方法是:
这将为您提供所需的效果。类似产品的生产示例。
P.s。当我有时间时,我可以编写一个示例,这个星期的时间很短。
答案 1 :(得分:0)
您需要了解有关移动gUM()的一些怪癖。
首先,如果设备为纵向,则工作异常。您需要交换宽度和高度。因此,假设您使用的是480x640的设备(这些设备是否存在?谁在乎?这是一个示例)。要获得合适尺寸的视频,您需要
const constraints = {
audio: false,
video: {
width: screen.height,
height: screen.width
}
};
我不知道为什么会这样。但它是。在iOS和Android设备上。
第二,很难使相机提供与设备屏幕尺寸完全相同的分辨率。我调整宽度和高度,使它们可以被八整除,然后得到不错的结果。
第三,我通过在CSS的小型Web应用程序中放置一个<video ...>
标签来确定所需的大小,该标签使CSS填满了浏览器屏幕,然后使用
const rect = videoElement.getBoundingClientRect()
const width = rect.width > rect.height ? rect.width : rect.height
const height = rect.width > rect.height ? rect.height : rect.width
这使移动浏览器可以确定您实际需要的大小,并且可以很好地适应浏览器的各种工具栏。