我使用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样本缓冲区。'
答案 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
。