更改 AVCaptureOutput 时如何避免 AVCaptureVideoPreviewLayer 闪烁
How to avoid AVCaptureVideoPreviewLayer from blinking when changing AVCaptureOutput
我有一个 运行 会话和一个显示在我视图中的预览层。
我需要在我的应用程序中多次更改 AVCaptureStillImageOutput、AVCaptureMetadataOutput 和 AVCaptureVideoDataOutput 的输出,而我的预览应该显示流畅,不会闪烁。
问题:当我向该会话添加输出时,预览会闪烁(请找到我附加的 gif)。
导致问题的具体线路:
self.stillImageOutput = AVCaptureStillImageOutput()
self.stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if session.canAddOutput(self.stillImageOutput) {
session.addOutput(self.stillImageOutput)
}
我的问题:
将输出添加到 运行 会话时如何避免 AVCaptureVideoPreviewLayer 闪烁?
我在这个 article 中找到了 iPhone 6 及更高版本的解决方案,它描述了如何在视频中捕获高分辨率静止图像:
New AV Foundation Camera Features for the iPhone 6 and iPhone 6 Plus
...
..capture full resolution still images without interrupting preview and reconfiguring the device.
解决方法:
我没有添加和删除输出,而是将所有输出添加到会话中。
对于视频捕获,我在会话预设中设置了所需的分辨率 (1280x720):
session.sessionPreset = AVCaptureSessionPreset1280x720
这行的结果是捕获设备(在我的例子中是后置摄像头)的活动格式发生了变化。
每种格式都有 HRSI(高分辨率静止图像),它描述了高分辨率图像的尺寸。
This feature is off by default. To enable it, you call AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled:.
为了拍摄高分辨率静止图像,应将标志 highResolutionStillImageOutputEnabled 设置为 true:
self.stillImageOutput?.highResolutionStillImageOutputEnabled = true
以iPhone6为例,静止图像分辨率为:3264x1836,相机预览不闪烁。
我有一个 运行 会话和一个显示在我视图中的预览层。
我需要在我的应用程序中多次更改 AVCaptureStillImageOutput、AVCaptureMetadataOutput 和 AVCaptureVideoDataOutput 的输出,而我的预览应该显示流畅,不会闪烁。
问题:当我向该会话添加输出时,预览会闪烁(请找到我附加的 gif)。
导致问题的具体线路:
self.stillImageOutput = AVCaptureStillImageOutput()
self.stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if session.canAddOutput(self.stillImageOutput) {
session.addOutput(self.stillImageOutput)
}
我的问题: 将输出添加到 运行 会话时如何避免 AVCaptureVideoPreviewLayer 闪烁?
我在这个 article 中找到了 iPhone 6 及更高版本的解决方案,它描述了如何在视频中捕获高分辨率静止图像:
New AV Foundation Camera Features for the iPhone 6 and iPhone 6 Plus
...
..capture full resolution still images without interrupting preview and reconfiguring the device.
解决方法:
我没有添加和删除输出,而是将所有输出添加到会话中。
对于视频捕获,我在会话预设中设置了所需的分辨率 (1280x720):
session.sessionPreset = AVCaptureSessionPreset1280x720
这行的结果是捕获设备(在我的例子中是后置摄像头)的活动格式发生了变化。
每种格式都有 HRSI(高分辨率静止图像),它描述了高分辨率图像的尺寸。
This feature is off by default. To enable it, you call AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled:.
为了拍摄高分辨率静止图像,应将标志 highResolutionStillImageOutputEnabled 设置为 true:
self.stillImageOutput?.highResolutionStillImageOutputEnabled = true
以iPhone6为例,静止图像分辨率为:3264x1836,相机预览不闪烁。