iPhone 13 Pro用Swift+AVFoundation开发如何开启builtInTripleCamera自动切换
问题解决
你已经正确选择了.builtInTripleCamera虚拟三摄设备作为采集源,这个虚拟设备本身就封装了自动切换物理摄像头的能力,你缺少的是自动切换功能的启用配置,修正步骤如下:
- 核心配置项为
isAutoSwitchingDeviceEnabled,在设备支持该特性的前提下开启即可触发原生的自动切换逻辑:微距自动切超广角、中距离切广角、远景切长焦 - 可选配置:如果需要感知摄像头切换事件,可以对
AVCaptureDevice的selectedDevice属性添加KVO监听,切换时会收到回调 - 注意事项:不要给虚拟三摄设备设置固定的、超出自动切换阈值的缩放倍率,否则会打断自动切换逻辑
修正后代码示例
// 发现会话直接指定后置位置,省去后续遍历判断 let session = AVCaptureDevice.DiscoverySession( deviceTypes: [.builtInTripleCamera], mediaType: .video, position: .back ) guard let rearTripleCamera = session.devices.first else { // 此处可添加设备不支持三摄时的降级逻辑,比如 fallback 到广角单摄 return } self.rearCamera = rearTripleCamera do { try rearCamera.lockForConfiguration() // 首先判断设备是否支持自动切换,再开启配置 if rearCamera.isAutoSwitchingDeviceSupported { rearCamera.isAutoSwitchingDeviceEnabled = true } rearCamera.exposureMode = .continuousAutoExposure rearCamera.focusMode = .continuousAutoFocus rearCamera.unlockForConfiguration() } catch { print("摄像头配置失败:\(error.localizedDescription)") }
额外说明
如果你的应用需要支持手动固定使用某一个物理摄像头,不要在虚拟三摄设备上修改配置,直接单独选择.builtInUltraWideCamera(超广角)、.builtInWideAngleCamera(广角)、.builtInTelephotoCamera(长焦)对应的单摄设备作为采集源即可。
内容的提问来源于stack exchange,提问作者Mourad
相关产品推荐
相关产品推荐

