CameraConfig
描述
底层摄像头传感器,包括:
- 相机 ID
- 是否会使用深度传感器(如果有)
- 摄像头的朝向:
<ph type="x-smartling-placeholder">
- </ph>
- 前置(自拍)
- 后置(全球)
- FPS(每秒帧数)范围
- CPU 图片尺寸
- GPU 纹理维度
- 系统是否会使用设备的立体声多摄像头(如果有)
创建新的 ARCore 会话时,ARCore 会使用
setCameraConfig
,用于设置相机配置
最符合
getSupportedCameraConfigs(CameraConfigFilter)
。
您的应用可以使用 CameraConfigFilter
可在运行时缩小指定设备的可用摄像头配置范围,具体方法是:
根据应用需求进行过滤
常见的过滤用例包括:
将相机拍摄帧速率限制为 30 fps。在支持此功能的设备上 60 fps,ARCore 将优先支持支持该帧速率的摄像头配置 帧速率如需过滤掉支持 60 fps 的所有相机配置, 应用过滤条件
setTargetFps
使用TargetFps.TARGET_FPS_30
。Java
// Return only camera configs that target 30 FPS camera capture frame rate. filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30));
Kotlin
// Return only camera configs that target 30 FPS camera capture frame rate. filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)
禁止 ARCore 使用深度传感器。在安装了 支持深度传感器,ARCore 会优先考虑使用深度的摄像头配置 传感器。要过滤掉使用深度传感器的所有相机配置,请将
setDepthSensorUsage
使用DepthSensorUsage.DO_NOT_USE
过滤。Java
// Return only camera configs that will not use the depth sensor. filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE));
Kotlin
// Return only camera configs that will not use the depth sensor. filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)
选择替代 GPU 纹理分辨率。已开启 支持的设备,ARCore 可以提供 更高的 GPU 纹理分辨率。选择分辨率较低的 GPU 纹理 可能有助于通过减少 GPU 负载和降低内存来提升应用性能 但无法保证一定能提高 所有情况。
使用相机配置过滤器
请按照以下步骤让应用过滤相机配置。
Java
// Create a camera config filter for the session. CameraConfigFilter filter = new CameraConfigFilter(session); // Return only camera configs that target 30 fps camera capture frame rate. filter.setTargetFps(EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30)); // Return only camera configs that will not use the depth sensor. filter.setDepthSensorUsage(EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE)); // Get list of configs that match filter settings. // In this case, this list is guaranteed to contain at least one element, // because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE // are supported on all ARCore supported devices. List<CameraConfig> cameraConfigList = session.getSupportedCameraConfigs(filter); // Use element 0 from the list of returned camera configs. This is because // it contains the camera config that best matches the specified filter // settings. session.setCameraConfig(cameraConfigList.get(0));
Kotlin
// Create a camera config filter for the session. val filter = CameraConfigFilter(session) // Return only camera configs that target 30 fps camera capture frame rate. filter.targetFps = EnumSet.of(CameraConfig.TargetFps.TARGET_FPS_30) // Return only camera configs that will not use the depth sensor. filter.depthSensorUsage = EnumSet.of(CameraConfig.DepthSensorUsage.DO_NOT_USE) // Get list of configs that match filter settings. // In this case, this list is guaranteed to contain at least one element, // because both TargetFps.TARGET_FPS_30 and DepthSensorUsage.DO_NOT_USE // are supported on all ARCore supported devices. val cameraConfigList = session.getSupportedCameraConfigs(filter) // Use element 0 from the list of returned camera configs. This is because // it contains the camera config that best matches the specified filter // settings. session.cameraConfig = cameraConfigList[0]
专注模式
您还可以在会话配置中设置专注模式。固定焦距通常更适合跟踪(并且在大多数设备上是 ARCore 的默认设置)。 无论是录制、摄影、摄像,还是在需要对焦附近的对象时,都需要使用自动对焦功能。
请参阅 Config.FocusMode
了解详情。