使用avfoundation捕获图像,但无法捕获太快

时间:2011-08-11 10:27:34

标签: iphone avfoundation capture

我使用avfoundation捕获图像,但我无法捕获太快(我将间隔时间设置为0.1秒)。它说“NULL sample buffer”。问题是什么?谢谢。

[stillImageOutput captureStillImageAsynchronouslyFromConnection:videoConnection completionHandler: ^(CMSampleBufferRef imageSampleBuffer, NSError *error)
 {
     CFDictionaryRef exifAttachments = CMGetAttachment( imageSampleBuffer, kCGImagePropertyExifDictionary, NULL);
     if (exifAttachments)
     {
         // Do something with the attachments.
         // NSLog(@"attachements: %@", exifAttachments);
     }
     else
         NSLog(@"no attachments");

     NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageSampleBuffer];
     UIImage *image = [[UIImage alloc] initWithData:imageData];
    //use the image
 }]; 

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* + [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:] - NULL样本缓冲区。'

2 个答案:

答案 0 :(得分:2)

它在文档中说:

  

如果jpegSampleBuffer为NULL或者不是JPEG格式,则此方法抛出NSInvalidArgumentException。

因此,要么检查imageSampleBuffer NULL或我做了什么,我将整个事情包装在if语句中检查:CMSampleBufferIsValid(imageSampleBuffer)但是不知道是不是正确的电话。文档有点稀疏。

答案 1 :(得分:0)

现在帮助我的是

[helper captureImage];

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.3 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
        [scheduledTimer invalidate];
        [helper stopRunningSession];


        imageView.image = helper.imageToReturn;
    });

这里我使用辅助类来运行会话,使用计时器来获取图像帧。因此,首先我调用我的捕获图像功能,并在0.3秒的延迟后。我使计时器无效并停止AVCaptureSession