11

如何将 CMSampleBufferRef 转换为 NSData?

MPMediaItem通过遵循 Erik Aigner 在此线程上的回答,我设法获取了数据,但是数据是 type CMSampleBufferRef

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

4

1 回答 1

10

在这里,这适用于您正在查看的音频样本缓冲区,如果您想查看整个过程(将 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];
于 2011-12-18T23:52:33.513 回答