UIImagePickerController:从video获取图像

我试图从video中提取一个帧作为图像。 该video是使用UIImagePickerController录制的。

当video被logging时,我得到它的URL并使用AVURLAsset加载它。 然后我创build一个AVAssetReader和AVAssetReaderTrackOutput来获取单个帧。

当我得到框架作为CMSampleBufferRef的我传递给苹果的imageFromSampleBuffer方法,它应该返回一个UIImage。 当我使用AVCaptureSession获取帧时,此方法工作正常,但是当我使用通过UIImagePickerController录制的video时,此行将返回0x0:

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

其中sampleBuffer是我通过的CMSampleBufferRed。

我通过debugging器检查了sampleBuffer的值,它看起来不错(不是0x0)。 有什么理由为什么CMSampleBufferGetImageBuffer会返回0x0?

或者,还有另一种方法从MOV文件中提取单个video帧并将其保存为UIImage?

谢谢。

我find了解决scheme。 您必须在初始化AVAssetReaderTrackOutput时传递的设置中设置像素格式。

我通过了以下设置字典:

 NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA]; NSDictionary* videoSettings = [NSDictionary dictionaryWithObject:value forKey:key]; 

希望这可以帮助别人。