16

我正在构建一个应用程序,允许用户使用 iPhone 相机拍摄照片,并在可用时使用 AVFoundation (iOS4),因此用户可以使用点击对焦功能,即使使用自定义叠加。

我遇到的问题是captureStillImageAsynchronouslyFromConnection需要几秒钟才能完成,在此期间我想冻结主视频提要,因此视频仍在运行时不会出现令人困惑的状态,但用户已捕捉到照片(并且相机快门声音已关闭)。

我曾尝试在请求静态图像捕获后立即调用 [session stopRunning],但这会导致不可预知的结果;在这种情况下,静止图像完成块通常不会被触发。

关于如何在按下快门后立即让视频预览层“暂停”的任何想法?

4

4 回答 4

21

你只需要设置你的captureVideoPreviewLayer.connection.enabled = NO;

有关详细信息,请在此处查看我的答案:

AVCaptureSession 暂停?

于 2013-04-15T12:00:28.127 回答
5

我正在尝试同样的事情。虽然在我的情况下captureStillImageAsynchronouslyFromConnection需要 0.5 秒才能返回,所以也许您正在完成处理程序中进行一些处理?

如果是这种情况,我想出了 2 个选项,这两个选项对我来说都不够,但可能对你有用

我想出的是:
* 在调用完成处理程序时(再次,在我的情况下为 0.5 秒),在捕获会话上调用stopRunning,然后在再次处理调用startRunning之后。
* 在叠加层顶部有一个 UIImageView,并在您进行处理时存储最后一张拍摄的照片,无论是来自相机还是视频流中的图像视图。

让我对这两种解决方案感到沮丧的是,它们都为该过程增加了几秒钟的时间。但我希望它有所帮助,或者给出一个方向。

干杯,奥德。

于 2010-08-22T16:05:22.967 回答
4

简单的定格给用户的印象是屏幕上的图像已经被拍摄,这是错误的——至少,我会显示一个暗淡的图像。Camera.app 通过关闭“快门”来解决这个问题。

您可以将 AVCaptureVideoPreviewLayer alpha 更改为 0.5 以给人一种暗淡图像的印象,即使它仍在运行。

另一种选择是使用 AVCaptureVideoDataOutput 和一些图像处理来获取静止图像。不幸的是,似乎不可能同时使用 AVCaptureVideoDataOutput 和 AVCaptureStillImageOutput;一种解决方法是通过抓取下一个视频帧来实现“拍照”功能(当然,这受您的视频分辨率的限制,但如果您只想对帧进行图像处理就可以了)。

于 2010-08-19T00:33:40.190 回答
0

旧答案,但这里是好奇的更新:在 iOS5 中,您可以同时使用 AVCaptureStillImageOutput 和 AVCaptureVideoDataOutput。我在捕捉下一个视频帧和静止图像的同时取得了一些不错的成功。我使用一个简单的淡出动画来隐藏 UI,然后在我从 AVCaptureVideoDataOutput 取回图像时淡入。这个过程比通过 AVCaptureStillImageOutput 等待静止图像快得多,这captureStillImageAsynchronouslyFromConnection:completionHandler:很可能是因为 AVCaptureVideoDataOutput 输出的图像更小且质量更低。

于 2012-02-27T20:43:14.910 回答