iOS Swift开发iPhone7 Plus调用深度相机获取depthData为nil如何解决
iOS捕获深度数据为nil排查方案
核心故障原因
- 未开启AVCapturePhotoOutput的全局深度交付开关:即便会话配置正确,未给photoOutput单独开启深度交付也无法拿到数据
- 捕获设备选型错误:iPhone 7 Plus仅后置双摄像头支持深度输出,前置摄像头、单摄拍摄模式均无法生成深度数据
- 拍摄参数未配置深度交付:调用
capturePhoto方法时传入的AVCapturePhotoSettings未单独开启深度交付选项 - 拍摄场景不符合要求:双摄深度计算有有效范围,过近(<20cm)、过远(>3m)、光线过暗、纹理过少的场景都会导致深度计算失败,返回nil
正确配置步骤
1. 提前开启photoOutput的深度交付能力
// 配置捕获会话阶段开启深度支持 guard photoOutput.isDepthDataDeliverySupported else { // 当前设备/摄像头不支持深度输出,做兼容处理 return } photoOutput.isDepthDataDeliveryEnabled = true
2. 拍摄参数显式开启深度交付
let photoSettings = AVCapturePhotoSettings() // 需判断当前输出格式是否兼容深度交付 if photoSettings.isDepthDataDeliverySupported { photoSettings.isDepthDataDeliveryEnabled = true } // 传入配置执行拍摄 photoOutput.capturePhoto(with: photoSettings, delegate: self)
3. 回调中兼容处理
func photoOutput(_ output: AVCapturePhotoOutput, didFinishProcessingPhoto photo: AVCapturePhoto, error: Error?) { if let error = error { print("拍摄错误: \(error)") return } guard let depthData = photo.depthData else { print("深度数据生成失败,检查拍摄场景是否符合要求") return } // 后续深度数据处理逻辑 }
额外注意点
- 拍摄时不要开启数码变焦,数码变焦会触发单摄像头工作,无法输出深度数据
- 如果需要深度数据嵌入到导出的照片文件中,需额外开启
photoOutput.isEmbeddedDepthDataDeliveryEnabled = true配置
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

