AVCapturePhotoCaptureDelegate的didFinishCapturingDeferredPhotoProxy方法未触发,无法获取24MP照片的问题求助
AVCapturePhotoCaptureDelegate的didFinishCapturingDeferredPhotoProxy方法未触发,无法获取24MP照片的问题求助
我最近在iPhone 15 Pro(iOS 18系统)上尝试用AVFoundation拍摄24MP的照片,根据苹果文档提示:
Note: When supported, the 24MP setting (5712, 4284) is only serviced as 24MP when opted-in to autoDeferredPhotoDeliveryEnabled.
我按照文档做了配置,但始终无法触发延迟交付的代理方法,最终拿到的还是12MP的照片。以下是我的具体实现,想请教大家我哪里出错了?
1. AVCapturePhotoOutput的配置
self.photoOutput.isAppleProRAWEnabled = self.photoOutput.isAppleProRAWSupported self.photoOutput.maxPhotoQualityPrioritization = .quality if #available(iOS 17.0, *) { if self.photoOutput.isAutoDeferredPhotoDeliverySupported { self.photoOutput.isAutoDeferredPhotoDeliveryEnabled = true self.autoDeferredDeliveryObserver = self.photoOutput.observe(\.isAutoDeferredPhotoDeliverySupported) { [weak self] photoOutput, change in guard let self = self, let newValue = change.newValue else { return } print("autoDeferredDeliverySupport is now: \(newValue)") } } } self.session.addOutput(self.photoOutput) if let dimensions = videoDevice.activeFormat.supportedMaxPhotoDimensions.last { self.photoOutput.maxPhotoDimensions = dimensions // 调试时显示为(5712, 4284) }
2. AVCapturePhotoSettings的配置
let settings: AVCapturePhotoSettings if format == .heif, photoOutput.availablePhotoCodecTypes.contains(.hevc) { settings = AVCapturePhotoSettings(format: [AVVideoCodecKey: AVVideoCodecType.hevc]) } else { settings = AVCapturePhotoSettings() } if let dimensions = videoDeviceInput?.device.activeFormat.supportedMaxPhotoDimensions.last { settings.maxPhotoDimensions = dimensions // 调试时显示为(5712, 4284) } if let previewType = settings.availablePreviewPhotoPixelFormatTypes.first { settings.previewPhotoFormat = [kCVPixelBufferPixelFormatTypeKey as String: previewType] } return settings
3. 代理方法的情况
我使用了类似AVCam示例项目的PhotoCaptureProcessor来处理照片,普通的捕获方法能正常工作并保存照片,但延迟交付的方法完全没被调用,而且resolvedSettings.deferredPhotoProxyDimensions输出是(0, 0):
func photoOutput(_ output: AVCapturePhotoOutput, didFinishCaptureFor resolvedSettings: AVCaptureResolvedPhotoSettings, error: Error?) { // 能正常工作并保存照片,但只有12MP print(resolvedSettings.deferredPhotoProxyDimensions) // 输出(0, 0) } func photoOutput(_ output: AVCapturePhotoOutput, didFinishCapturingDeferredPhotoProxy deferredPhotoProxy: AVCaptureDeferredPhotoProxy?, error: (any Error)?) { print("not getting called") // 从未执行到这里 }
调试时确认maxPhotoDimensions确实设置成了(5712, 4284),但为什么还是无法触发延迟交付,拿到24MP的照片呢?
内容来源于stack exchange
相关产品推荐
相关产品推荐

