2011-12-18 125 views
11

如何將CMSampleBufferRef轉換爲NSData?如何將CMSampleBufferRef轉換爲NSData

我已成功地通過關注this thread的Erik Aigner的回答得到了MPMediaItem的數據,但數據的類型爲CMSampleBufferRef

我知道CMSampleBufferRef是一個結構體,在iOS Dev Library的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 2012-01-15 19:24:26

+0

我仍然有點失落,這個東西很noob。什麼是'輸出'定義爲? – jangelo42 2013-02-07 00:25:46

+0

@ jangelo42檢查我在第二行提供的鏈接(它的完整解決方案不只是一個片段),輸出是AVAssetReaderOutput – Daniel 2013-02-07 16:37:55