如何将CMSampleBufferRef转换为NSData

你如何将CMSampleBufferRef转换为NSData?

我已经成功地获得了一个MPMediaItem的数据,通过在这个线程上的Erik Aigner的回答,但是数据的types是CMSampleBufferRef

我知道CMSampleBufferRef是一个结构,并在iOS开发库中的CMSampleBuffer参考中定义,但我不认为我完全理解它是什么。 没有一个CMSampleBuffer函数似乎是一个明显的解决scheme。

在这里,你去这个audio采样缓冲区,你正在看什么,如果你想看看整个过程(从MPMediaItem获取所有audio数据到一个文件检查出这个问题

 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];