首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免AVCaptureVideoPreviewLayer在更改AVCaptureOutput时闪烁

如何避免AVCaptureVideoPreviewLayer在更改AVCaptureOutput时闪烁
EN

Stack Overflow用户
提问于 2016-09-15 05:57:27
回答 1查看 1.2K关注 0票数 8

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

我需要在AVCaptureStillImageOutput、AVCaptureMetadataOutput和AVCaptureVideoDataOutput中多次更改我的应用程序中的输出,而我的预览应该在不闪烁的情况下顺利地显示出来。

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

具体的线条造成了问题:

代码语言:javascript
复制
self.stillImageOutput = AVCaptureStillImageOutput()
self.stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG]
if session.canAddOutput(self.stillImageOutput) {
    session.addOutput(self.stillImageOutput)
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-22 20:25:10

我在这个iPhone 6和更高版本的文章中找到了一个解决方案,它描述了如何在视频中捕获高分辨率静止图像:

用于iPhone 6和iPhone 6 Plus的新AV基础摄像机特性 ..。 ..capture完全分辨率仍然是图像,而不中断预览和重新配置设备。

解决办法:

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

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

代码语言:javascript
复制
session.sessionPreset = AVCaptureSessionPreset1280x720

这一行的结果是捕获设备的活动格式(在我的例子中是后摄像头)改变了。

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

默认情况下,此功能是关闭的。要启用它,您可以调用AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled:。

为了获取高分辨率静止图像,highResolutionStillImageOutputEnabled标志应该设置为true:

代码语言:javascript
复制
self.stillImageOutput?.highResolutionStillImageOutputEnabled = true

例如,对于iPhone 6,静止图像分辨率是: 3264x1836,而摄像机的预览不闪烁。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39504005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档