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

时间:2012-11-24 23:12:09

标签: iphone ios xcode ipad cocoa-touch

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

请参阅下面我如何绑定它们,但我无法想象如何延迟它(我不想实时)

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

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

1 个答案:

答案 0 :(得分:0)

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

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

您的UIImage将来自didOutputSampleBuffer方法,使用类似UIImage created from CMSampleBufferRef not displayed in UIImageView?

的内容

现在,您将不得不面对的挑战很少:

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

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