2011-12-18 15 views
11

कैसे परिवर्तित करें CMSampleBufferRef को NSData में कैसे परिवर्तित करें?CMSampleBufferRef को NSData

मैंने this thread पर एरिक एग्नेर के उत्तर का पालन करके MPMediaItem के लिए डेटा प्राप्त करने में कामयाब रहा है, हालांकि डेटा CMSampleBufferRef प्रकार का है।

मुझे पता है कि CMSampleBufferRef एक संरचना है और आईओएस देव लाइब्रेरी में CMSampleBuffer Reference में परिभाषित किया गया है, लेकिन मुझे नहीं लगता कि मैं पूरी तरह समझता हूं कि यह क्या है। CMSampleBuffer फ़ंक्शंस में से कोई भी एक स्पष्ट समाधान प्रतीत नहीं होता है।

उत्तर

10

यहाँ आप इस ऑडियो नमूना बफर के लिए काम करता है, जो है क्या आप देख रहे हैं जाने के लिए और अगर आप (एक फ़ाइल में MPMediaItem से सभी ऑडियो डेटा प्राप्त पूरी प्रक्रिया को देखने के लिए चाहते हैं this प्रश्न की जाँच

CMSampleBufferRef ref=[output copyNextSampleBuffer]; 
     // NSLog(@"%@",ref); 
     if(ref==NULL) 
      break; 
     //copy data to file 
     //read next one 
     AudioBufferList audioBufferList; 
     NSMutableData *data=[[NSMutableData alloc] init]; 
     CMBlockBufferRef blockBuffer; 
     CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(ref, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer); 
     // NSLog(@"%@",blockBuffer); 



     for(int y=0; y<audioBufferList.mNumberBuffers; y++) 
     { 
      AudioBuffer audioBuffer = audioBufferList.mBuffers[y]; 
      Float32 *frame = (Float32*)audioBuffer.mData; 


      [data appendBytes:frame length:audioBuffer.mDataByteSize]; 



     } 


     CFRelease(blockBuffer); 
     CFRelease(ref); 
     ref=NULL; 
     blockBuffer=NULL; 
     [data release]; 
+0

धन्यवाद बहुत डैनियल! एक आकर्षण की तरह काम किया :) – RyanM

+0

मैं अभी भी थोड़ा सा खो गया हूं और इस सामान पर बहुत कुछ नहीं हूं। 'आउटपुट' क्या परिभाषित किया गया है? – jangelo42

+0

@ jangelo42 मैं जिस लिंक को दूसरी पंक्ति में प्रदान करता हूं उसे चेक करें (इसका एक पूर्ण समाधान न सिर्फ एक टुकड़ा है), आउटपुट AVAssetReaderOutput है – Daniel

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