如何将 CMSampleBufferRef 转换为 NSData?
MPMediaItem通过遵循 Erik Aigner 在此线程上的回答,我设法获取了数据,但是数据是 type CMSampleBufferRef。
我知道 CMSampleBufferRef 是一个结构,并在 iOS 开发库的CMSampleBuffer 参考中定义,但我认为我并不完全理解它是什么。CMSampleBuffer 函数似乎都不是一个明显的解决方案。
如何将 CMSampleBufferRef 转换为 NSData?
MPMediaItem通过遵循 Erik Aigner 在此线程上的回答,我设法获取了数据,但是数据是 type CMSampleBufferRef。
我知道 CMSampleBufferRef 是一个结构,并在 iOS 开发库的CMSampleBuffer 参考中定义,但我认为我并不完全理解它是什么。CMSampleBuffer 函数似乎都不是一个明显的解决方案。
在这里,这适用于您正在查看的音频样本缓冲区,如果您想查看整个过程(将 MPMediaItem 中的所有音频数据放入文件中,请查看此问题
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];