我正在使用AVFoundation
开发支持静止图像和视频捕获的应用。捕获它们需要不同的AVCaptureSession
预设。我检查canSetSessionPreset()
,使用beginConfiguration()
开始更改,使用sessionPreset
设置所需的预设,然后使用commitConfiguration()
结束。
我发现如果我在更改预设后立即使用AVCaptureStillImageOutput
捕获静态图像,则不会返回任何错误,但有时会产生黑色或非常暗的图像。
如果我在更改预设后立即开始使用AVCaptureMovieFileOutput
立即捕捉视频,则生成的文件中的前几帧有时也是黑色或非常暗。
更改预设后,屏幕可能会因相机调整曝光而闪烁。因此,在更改预设相机后立即开始从非常快的快门速度开始测量曝光,这会导致黑/暗帧。
如果我在更改预设和开始捕捉之间插入0.1秒的延迟,这两个问题都会消失,但这很难看,没有人能保证它会在所有设备上一直有效。
这个问题有一个干净的解决方案吗?
答案 0 :(得分:0)
我曾经并且仍然遇到同样的问题。
经过几个小时的搜索,我发现了一个有趣的事情,即将观察者添加到" adjustExposure"关键,但由于我不了解的上下文参数,我无法使其发挥作用。
camera!.addObserver(self, forKeyPath: "adjustingExposure", options: NSKeyValueObservingOptions.new, context: context)
我的解决方法是使用像你这样的短计时器,但那确实很麻烦......
答案 1 :(得分:0)
这是给未来的用户...
当我将 sessionPreset
设置为 high
时发生了这种情况,并且在我开始录制时,我正在更改视频输出连接并设置焦点,然后我在设置时移到相机和它的工作!