You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 12:12:58