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

关于AVCapturePhotoOutput自定义曝光时长不生效及曝光累积时机的技术咨询

AVCapturePhotoOutput自定义曝光时长不生效及曝光累积时机的技术咨询

各位好,我先明确一下,我的问题和《AVCaptureDevice's exposureDuration and iso not honored by AVCapturePhotoOutput》并不重复。我的场景是拍摄RAW Bayer格式图像,根据苹果官方文档里提到的*“Bayer RAW photos may not be processed by definition”*,isAutoStillImageStabilizationEnabled默认是关闭状态的。

现在我遇到的具体问题是这样的:
在iOS设备上,我通过AVCaptureDevice.setExposureModeCustom(duration: iso:)把其中一个相机的曝光时长设置为1秒,接着调用AVCapturePhotoOutput.capturePhoto(with:, delegate:)来拍摄照片。当照片捕获完成后,AVCapturePhotoCaptureDelegate.photoOutput(_ output:, didFinishProcessingPhoto:, error:)代理方法会被调用返回捕获的照片。

但诡异的是,尽管我明明设置了1秒的曝光时长,从调用capturePhoto()请求拍摄到回调返回照片的间隔居然只有大约50毫秒——这显然不可能在这么短的时间内完成1秒的光线累积。我真正想要实现的效果是:调用capturePhoto()之后,AVFoundation立刻开始累积1秒的光线,等曝光完成后再触发回调返回包含这段时间累积光线的照片。

现在我明显对iOS上的曝光工作机制理解不到位,因为如果连续调用两次capturePhoto(),总耗时也只是几十毫秒,完全不是预期的2秒(两次1秒曝光的总和)。另外我翻遍了官方文档,也找不到任何说明:调用capturePhoto()之后,相机到底什么时候开始、什么时候停止累积光线的时间戳信息,看起来像是有一个环形缓冲区在持续不断地累积光线?

我把当前实际发生的时间线和期望实现的时间线整理了出来,方便大家理解:

当前实际发生的时间线(单位:毫秒)

|--------------------> 时间轴 [ms]
^ ^ ^
| | |
| | |
| | |
| +----------- [t2 = 86 ms] AVCapturePhotoCaptureDelegate.photoOutput() 回调触发
| +------------------ [t1 = 23 ms] 调用 capturePhoto()
+--------------------- [t0 = 10 ms] 设置曝光时长为1秒

期望实现的时间线(单位:毫秒)

|--------------------> 时间轴 [ms]
^ ^ ^
| | |
| | |
| | |
| +---- [t2 = 1023 ms] AVCapturePhotoCaptureDelegate.photoOutput() 回调触发
| +------------------- [t1 = 23 ms] 调用 capturePhoto()
+---------------------- [t0 = 10 ms] 设置曝光时长为1秒

想请教大家:有没有关于iOS曝光工作机制的更深入的技术文档?实际的曝光流程到底是怎样的?我该如何调整代码,确保曝光时长被正确执行,让相机在调用capturePhoto()后真正进行1秒的光线累积?

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 13:29:37