在 iOS 中,我使用代码从 AVCaptureStillImageOutput 捕获,因此:
[_captureStillOutput captureStillImageAsynchronouslyFromConnection: _captureConnection completionHandler: asyncCaptureCompletionHandler];
为了简化我的代码,我的 asyncCaptureCompletionHandler 块如下所示:
void(^asyncCaptureCompletionHandler)(CMSampleBufferRef imageDataSampleBuffer, NSError *error) =
^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {
if (CMSampleBufferIsValid(imageDataSampleBuffer)) {
NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];
UIImage *image = [[UIImage alloc] initWithData:imageData];
}
}
我已经通过了我的所有代码并与堆栈溢出交叉引用,并且没有发现任何建议为什么会在没有正确 JPEG 的情况下捕获有效的样本缓冲区。
_captureStillOutput = [[AVCaptureStillImageOutput alloc] init];
_captureStillOutput.outputSettings =
[NSDictionary dictionaryWithObjectsAndKeys:
AVVideoCodecJPEG, AVVideoCodecKey,
nil];
if ([session canAddOutput:_captureStillOutput]) {
[session addOutput:_captureStillOutput];
}
调试器中有补充信息: * 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“* +[AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:] - 不是 jpeg 样本缓冲区。”
在谷歌和堆栈溢出中搜索“不是 jpeg 样本缓冲区”产生的结果为零。我被困住了。呸。