Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何使用摄像机中的AVCaptureVideoPreviewLayer将流延迟到UIImageview?_Iphone_Ios_Xcode_Ipad_Cocoa Touch - Fatal编程技术网

Iphone 如何使用摄像机中的AVCaptureVideoPreviewLayer将流延迟到UIImageview?

Iphone 如何使用摄像机中的AVCaptureVideoPreviewLayer将流延迟到UIImageview?,iphone,ios,xcode,ipad,cocoa-touch,Iphone,Ios,Xcode,Ipad,Cocoa Touch,如何使用摄像机中的AVCaptureVideoPreviewLayer将流延迟到UIImageview 请看下面我是如何绑定它们的,但我就是想不出如何延迟它(我不希望它是实时的) 首先,您需要删除当前的预览层帧,因为没有方法延迟这些预览帧 您需要创建一个缓冲区。如果我们讨论的是几帧,那么您可能会有一个NSMutableArray,在一端填充UIImages,同时从另一端输入图像视图 您的UIImage将来自didOutputSampleBuffer方法,请使用如下内容 现在,您需要应对的挑战很少

如何使用摄像机中的AVCaptureVideoPreviewLayer将流延迟到UIImageview

请看下面我是如何绑定它们的,但我就是想不出如何延迟它(我不希望它是实时的)


首先,您需要删除当前的预览层帧,因为没有方法延迟这些预览帧

您需要创建一个缓冲区。如果我们讨论的是几帧,那么您可能会有一个NSMutableArray,在一端填充UIImages,同时从另一端输入图像视图

您的UIImage将来自didOutputSampleBuffer方法,请使用如下内容

现在,您需要应对的挑战很少:

  • 你说的是有多秒的延迟,5秒大约是150帧。将图像存储在内存中是不可能的,除非它们非常小,而且是在最新的设备上
  • 您可以通过将映像保存到磁盘并让阵列仅存储这些映像的路径而不是映像本身来解决此问题。现在,您可能会遇到性能问题,因为您将实时执行读/写操作,您的帧速率将受到影响
  • 由于帧速率太低,您必须确保录制的提要和实时提要之间没有失去同步,否则您将以5秒的延迟开始,并以更长的延迟结束
祝你好运,这是可以做一些权衡(较慢的帧速率…),但它可以做到。(我自己做过多次类似的事情,由于IP原因无法共享代码)

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

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