8

在此处输入图像描述

我有一个正在运行的会话和一个预览层,显示在我的视图中。

我需要在我的应用程序中多次更改 AVCaptureStillImageOutput、AVCaptureMetadataOutput 和 AVCaptureVideoDataOutput 之间的输出,而我的预览应该流畅地显示而不会闪烁。

问题:当我向此会话添加输出时,预览会闪烁(请找到我附加的 gif)。

特定行导致问题:

self.stillImageOutput = AVCaptureStillImageOutput()
self.stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if session.canAddOutput(self.stillImageOutput) {
    session.addOutput(self.stillImageOutput)
}

我的问题:如何避免 AVCaptureVideoPreviewLayer 在将输出添加到正在运行的会话时闪烁?

4

1 回答 1

1

我在本文中找到了适用于 iPhone 6 及更高版本的解决方案,该解决方案描述了如何在视频期间捕获高分辨率静止图像:

适用于 iPhone 6 和 iPhone 6 Plus 的新 AV Foundation 摄像头功能

...

..在不中断预览和重新配置设备的情况下捕获全分辨率静止图像。

解决方案:

我没有添加和删除输出,而是将所有输出添加到会话中。

对于视频捕获,我在会话预设中设置了所需的分辨率 (1280x720):

session.sessionPreset = AVCaptureSessionPreset1280x720

这一行的结果是捕获设备(在我的情况下为后置摄像头)的活动格式发生了变化。

每种格式都有描述高分辨率图像尺寸的 HRSI(高分辨率静止图像)。

此功能默认关闭。要启用它,您调用 AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled:。

为了拍摄高分辨率静止图像,标志 highResolutionStillImageOutputEnabled 应设置为 true:

self.stillImageOutput?.highResolutionStillImageOutputEnabled = true

以 iPhone 6 为例,静止图像分辨率为:3264x1836,并且相机的预览不闪烁。

于 2016-09-22T20:25:10.007 回答