如何将 CMSampleBufferRef 转换为 NSData?
我已经设法获取数据MPMediaItem
通过遵循 Erik Aigner 的回答这个线程,但是数据的类型CMSampleBufferRef
.
我知道 CMSampleBufferRef 是一个结构体,在CMSampleBuffer 参考在 iOS 开发库中,但我认为我不完全理解它是什么。 CMSampleBuffer 函数似乎都不是明显的解决方案。
在这里,这适用于您正在查看的音频样本缓冲区,如果您想查看整个过程(将 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];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)