2011-02-16 81 views
5

我試圖從視頻中提取一幀作爲圖像。該視頻是使用UIImagePickerController錄製的。UIImagePickerController:從視頻獲取圖像

當視頻被記錄時,我得到它的URL並使用AVURLAsset加載它。然後我創建一個AVAssetReader和AVAssetReaderTrackOutput來獲取各個幀。

當我得到框架作爲CMSampleBufferRef的我把它們傳遞給Apple的imageFromSampleBuffer方法,它應該返回一個UIImage。這種方法工作得很好,當我正在使用AVCaptureSession幀但是當我通過使用記錄的UIImagePickerController視頻那麼這行返回爲0x0:

CVImageBufferRef imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 

哪裏sampleBuffer是我通過CMSampleBufferRed。

我通過調試器檢查了sampleBuffer的值,它看起來很好(不是0x0)。 CMSampleBufferGetImageBuffer會返回0x0嗎?

或者,還有另一種方式從MOV文件中提取單個視頻幀並將其保存爲UIImage?

謝謝。

回答

7

我找到了解決方案。您必須在初始化AVAssetReaderTrackOutput時傳遞的設置中設置像素格式。

我通過以下設置詞典:

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

希望這可以幫助其他人。

相關問題