使用AVCaptureMultiCamSession实现iPhone 15 Pro双后置摄像头同时调用可行性咨询
iPhone 15 Pro双后置摄像头同时调用(AVCaptureMultiCamSession)支持情况
iPhone 15 Pro完全支持通过AVCaptureMultiCamSession同时调用双后置摄像头(广角+超广角),这一点和你之前使用的iPhone 12 Pro的硬件限制存在本质区别。
核心原因说明
iPhone 12 Pro的硬件架构无法为双后置摄像头提供并发数据流支持,这是你之前无法实现广角+超广角同时调用的根本原因;而iPhone 15 Pro更新了摄像头硬件模块与系统驱动,配合iOS 17及以上系统,开放了双后置摄像头的并发访问权限。
实现注意要点
- 确保设备运行iOS 17或更高版本(iPhone 15 Pro出厂预装iOS 17,满足要求)。
- 配置
AVCaptureMultiCamSession时,分别获取后置广角(AVCaptureDevice.DeviceType.builtInWideAngleCamera)和后置超广角(AVCaptureDevice.DeviceType.builtInUltraWideCamera)的设备实例,位置参数设为.back。 - 为两个摄像头选择兼容的媒体格式:避免同时使用高分辨率或冲突的编码格式,可通过
AVCaptureDevice.formats筛选支持并发的格式组合。 - 核心代码流程示例:
let multiCamSession = AVCaptureMultiCamSession() // 获取后置广角摄像头输入 guard let wideAngleDevice = AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back), let wideAngleInput = try? AVCaptureDeviceInput(device: wideAngleDevice) else { return } // 获取后置超广角摄像头输入 guard let ultraWideDevice = AVCaptureDevice.default(.builtInUltraWideCamera, for: .video, position: .back), let ultraWideInput = try? AVCaptureDeviceInput(device: ultraWideDevice) else { return } // 添加输入到会话 if multiCamSession.canAddInput(wideAngleInput) { multiCamSession.addInput(wideAngleInput) } if multiCamSession.canAddInput(ultraWideInput) { multiCamSession.addInput(ultraWideInput) } // 添加输出并配置回调 let videoOutput = AVCaptureMultiCamVideoDataOutput() videoOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "multiCamQueue")) if multiCamSession.canAddOutput(videoOutput) { multiCamSession.addOutput(videoOutput) } // 启动会话 try? multiCamSession.startRunning()
额外提示
- 双摄像头同时工作会增加设备功耗,长时间运行可能触发降频,测试时注意关注设备散热状态。
- 确保在
Info.plist中添加NSCameraUsageDescription权限描述,避免权限访问失败。
内容的提问来源于stack exchange,提问作者pocketkai
相关产品推荐
相关产品推荐

