CameraManager 仅提供 2 个摄像头 ID,但一个设备具有三个物理摄像头。为啥?

Posted

技术标签:

【中文标题】CameraManager 仅提供 2 个摄像头 ID,但一个设备具有三个物理摄像头。为啥?【英文标题】:CameraManager gives only 2 camera ids, but a device has three physical cameras. Why?CameraManager 仅提供 2 个摄像头 ID,但一个设备具有三个物理摄像头。为什么? 【发布时间】:2019-08-01 16:34:49 【问题描述】:

我有三星 Galaxy S9,我看到设备上有两个后置物理摄像头。尽管如此,cameraManager.cameraIdList 只提供了两个摄像头 ID,一个用于正面摄像头,一个用于后置摄像头。第三个摄像头怎么解决?有没有可能?

【问题讨论】:

从硬件的角度来看,您可能会看到第三个镜头,但三星可能会将两个后置镜头的结果组合成一个图像。 @CommonsWare mb 我们可以使用setPhysicalCameraId(cameraId)在物理相机和逻辑相机***.com/a/66569731/7767664之间切换 【参考方案1】:

您可以使用CameraManager#getPhysicalCameraIds() 获取物理相机ID,并将其与setPhysicalCameraId() 一起使用。有关更多信息,请访问此官方文档: https://source.android.com/devices/camera/multi-camera#examples_and_sources

【讨论】:

是的,差不多一年前就已经找到了这个解决方案。尽管如此,对于具有 3 个物理后置摄像头CameraCharacteristics#getPhysicalCameraIds(不是CameraManager)的目标设备(不记得确切是哪个,从那时起已经有一段时间了),它只从一个逻辑后置摄像头返回了两个摄像头。我认为这是 Android OS shell 提供者给出的实现细节。不过,这个答案是最接近解决方案的,所以我会把它标记为接受 @AndreyIlyunin 据我所知,它取决于操作系统。某些设备(例如 Google Pixel 3)有 2 个前置摄像头,您可以同时使用它们。 Samsung S20 api 30。设备有 3 个后置摄像头,报告两个后置逻辑摄像头,但两者都没有物理 ID。看起来这个多摄像头的东西得到了很好的支持。 @SerialSensor 三星将所有摄像头暴露为逻辑摄像头,这不是多摄像头 API 的事情。虽然三星让开发人员更容易做到这一点很棒。对于 Pixel 4、5,它更难,因为它只返回两个逻辑摄像头,您必须使用新的多摄像头 api ***.com/a/66569731/7767664 配置物理 @user924 喜欢写的,3 个后置摄像头,只有两个逻辑摄像头。所以暴露出来的一切都是不真实的。这就是我检查物理 ID 的原因。

以上是关于CameraManager 仅提供 2 个摄像头 ID,但一个设备具有三个物理摄像头。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Android Camera2 开发详解

Android Camera getCameraIdList流程 (androidP)

如何使用 Camera2 获取前置摄像头的 ID?

Android CameraManager 类

类型错误:CameraManager.checkIfRecordAudioPermissionsAreDefined 不是函数

未定义不是对象(评估“CameraManager.Aspect”)