我正在使用AVCaptureVideoDataOutput
并希望转换CMSampleBufferRef
为UIImage
. 很多答案都是一样的,比如这个从 CMSampleBufferRef 创建的 UIImage 没有显示在 UIImageView 中?和具有多个预览的 AVCaptureSession
如果我将 VideoDataOutput 颜色空间设置为 BGRA,它工作正常(归功于此答案CGBitmapContextCreateImage 错误)
NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key];
[dataOutput setVideoSettings:videoSettings];
如果没有上述 videoSettings,我将收到以下错误
CGBitmapContextCreate: invalid data bytes/row: should be at least 2560 for 8 integer bits/component, 3 components, kCGImageAlphaPremultipliedFirst.
<Error>: CGBitmapContextCreateImage: invalid context 0x0
使用 BGRA 不是一个好的选择,因为从 YUV(默认 AVCaptureSession 颜色空间)到 BGRA 存在转换开销,正如 Brad 和 Codo 在How to get the Y component from CMSampleBuffer from the AVCaptureSession 中所述?
那么有没有办法转换CMSampleBufferRef
和UIImage
使用 YUV 颜色空间?