Iphone 有没有办法通过AVCaptureStillImageOutput改善拍摄间隔时间?

Iphone 有没有办法通过AVCaptureStillImageOutput改善拍摄间隔时间?,iphone,objective-c,ios,avfoundation,Iphone,Objective C,Ios,Avfoundation,我目前使用以下代码拍摄一系列图像: - (void)shootSeries:(int)photos { if(photos == 0) { [self mergeImages]; } else { [output captureStillImageAsynchronouslyFromConnection:connection completionHandler: ^(CMSampleBufferRef imageDataSa

我目前使用以下代码拍摄一系列图像:

- (void)shootSeries:(int)photos {
    if(photos == 0) {
        [self mergeImages];
    } else {
        [output captureStillImageAsynchronouslyFromConnection:connection completionHandler:
            ^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
                NSLog(@"Shot picture %d.", 7 - photos);
                [self shootSeries:(photos - 1)];

                CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);

                CVPixelBufferLockBaseAddress(pixelBuffer, 0);
                int dataSize = CVPixelBufferGetDataSize(pixelBuffer);
                CFDataRef data = CFDataCreate(NULL, (const UInt8 *)CVPixelBufferGetBaseAddress(pixelBuffer), dataSize);
                CVPixelBufferUnlockBaseAddress(pixelBuffer, 0);

                CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData(data);
                CFRelease(data);

                CGImageRef image = CGImageCreate(CVPixelBufferGetWidth(pixelBuffer),
                                                 CVPixelBufferGetHeight(pixelBuffer),
                                                 8, 32,
                                                 CVPixelBufferGetBytesPerRow(pixelBuffer),
                                                 colorspace,
                                                 kCGImageAlphaNoneSkipFirst | kCGBitmapByteOrder32Little,
                                                 dataProvider, NULL, true, kCGRenderingIntentDefault);
                CFRelease(dataProvider);

                CFArrayAppendValue(shotPictures, image);
                CFRelease(image);
            }];
    }
}

虽然这种方法效果相当好,但速度非常慢。为什么像ClearCam这样的应用程序可以以比这快得多的速度连续拍摄照片?我怎么也可以这样做呢?

在拍摄完图像后,将样本缓冲区存储在CFArray中,一旦您拍摄完所有手机,然后将其转换为图像或CGImageRefs。

在拍摄完图像后,将样本缓冲区存储在CFArray中,一旦你拿走了所有的手机,然后把它们转换成图像,或者在你的例子中是CGImageRefs。

你明白了吗?如果是这样的话,如果你能给出答案,我将不胜感激。我尝试了很多技术,比如创建多个输入和输出并在它们之间循环,或者在每次拍摄后添加/删除输入/输出。我的问题是,如果允许用户快速拍照,最终会出现NULL CMSampleBuffers和AVFoundation内存不足错误。最终的结果是一些照片丢失了,这显然比强迫他们慢拍更糟糕。你明白了吗?如果是这样的话,如果你能给出答案,我将不胜感激。我尝试了很多技术,比如创建多个输入和输出并在它们之间循环,或者在每次拍摄后添加/删除输入/输出。我的问题是,如果允许用户快速拍照,最终会出现NULL CMSampleBuffers和AVFoundation内存不足错误。最终的结果是一些照片丢失了,这显然比强迫他们以更慢的速度拍照更糟糕。我现在已经尝试了好几个小时来保存到CFMutableArray并在转换为UIImages后保存,但我就是无法让它工作。你有没有这方面的示例代码?我现在已经尝试了很多小时来保存到CFMutableArray,并在转换为UIImages后保存,但我就是无法让它工作。你有这方面的示例代码吗?