2011-02-16 12 views
5

मैं एक छवि के रूप में एक वीडियो से एक फ्रेम निकालने के लिए कोशिश कर रहा हूँ से छवि पर कब्जा हो रही है। वीडियो UIImagePickerController का उपयोग करके रिकॉर्ड किया गया है।UIImagePickerController: वीडियो

जब वीडियो रिकॉर्ड किया गया है मैं अपने URL प्राप्त और AVURLAsset का उपयोग कर इसे लोड। फिर मैं व्यक्तिगत फ्रेम प्राप्त करने के लिए एक AVAssetReader और AVAssetReaderTrackOutput बना देता हूं।

जब मैं मैं उन्हें एप्पल के imageFromSampleBuffer विधि को पारित CMSampleBufferRef के रूप में फ्रेम जो एक 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]; 

आशा इस किसी और में मदद करता है:

मैं निम्नलिखित सेटिंग्स शब्दकोश पारित कर दिया।

संबंधित मुद्दे