{
video: {
deviceId: '...',
facingMode: { exact: 'environment' },
advanced: [{ zoom: 1.0 }]
},
audio: false
}
iPhone 15(iOS 18),iOS在测量过程中意外切换在宽,超范围和远摄镜头之间。
这打破了心率检测,它迫使用户在测量的中间移动手指。
问题: 有什么方法是通过getusermedia/webrtc迫使iOS仅使用广角镜头并防止自动透镜开关?我知道,通过Avoundation(Swift),您可以选择.builtinwideanglecamera,但我希望避免构建自定义的本机层,并希望在可能的情况下坚持使用WebView/JavaScript,以节省时间和复杂性。任何建议,解决方法或苹果的更新将不胜感激!
非常感谢!
具有多个后置摄像头(如11PEO)的iPhones即使设置了
facingMode: { exact: "environment" }
getUserMedia
WebView
async function getWideAngleCamera() {
const devices = await navigator.mediaDevices.enumerateDevices();
const backCameras = devices.filter(device => device.kind === "videoinput" && device.label.toLowerCase().includes("back"));
//pick the camera that has 'wide' in the label
const wideCamera = backCameras.find(device => device.label.toLowerCase().includes("wide")) || backCameras[0];
if (!wideCamera) {
console.error("No suitable wide-angle camera found.");
return null;
}
return wideCamera.deviceId;
}
async function startCamera() {
const deviceId = await getWideAngleCamera();
if (!deviceId) return;
const stream = await navigator.mediaDevices.getUserMedia({
video: {
deviceId: { exact: deviceId },
advanced: [{ zoom: 1.0 }]
}
});
document.querySelector("video").srcObject = stream;
}
startCamera();