0

如何使用来自相机的 AVCaptureVideoPreviewLayer 将流延迟到 UIImageview?

请参阅下面我如何绑定它们,但我不知道如何延迟它(我不想要实时)

AVCaptureVideoPreviewLayer* captureVideoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

captureVideoPreviewLayer.frame = self.imageView.bounds;
[self.imageView.layer addSublayer:captureVideoPreviewLayer];
4

1 回答 1

0

首先,您将要删除您现在拥有的预览图层框架,因为没有任何方法可以延迟这些预览框架开箱即用。

您将要创建一个缓冲区。如果我们谈论的是几帧,你可以有一个 NSMutableArray,你在一端用 UIImages 填充它,同时你从另一端提供你的图像视图。

您的 UIImage 将来自 didOutputSampleBuffer 方法,使用类似从 CMSampleBufferRef 创建的 UIImage 不显示在 UIImageView 中?

现在,您将不得不应对几个挑战:

  • 你说的是有几秒的延迟,5秒大约是150帧。在内存中存储 150 个 UIImage 是不会发生的,除非它们非常小并且在最新的设备上
  • 您可以通过将图像保存到磁盘并让您的阵列仅存储这些图像的路径而不是图像本身来解决这个问题。现在你可能会遇到性能问题,因为你要实时进行读/写操作,你的帧率会受到影响
  • 由于糟糕的帧速率,您必须确保录制的提要和实时提要之间没有失去同步,否则您将以 5 秒的延迟开始并以更长的延迟结束

祝你好运,它可以通过一些折衷(较慢的帧速率......)来完成,但它可以完成。(我自己多次做过非常相似的事情,由于IP原因无法共享代码)。

于 2012-11-24T23:46:26.187 回答