Как преобразовать CMSampleBufferRef в NSData

Как вы конвертируете CMSampleBufferRef в NSData?

Мне удалось получить данные для MPMediaItem, выполнив ответ Эрика Эйгнера на этот поток, однако данные имеют тип CMSampleBufferRef.

Я знаю, что CMSampleBufferRef является структурой и определяется в CMSampleBuffer Reference в iOS Dev Library, но я не думаю, что полностью понять, что это такое. Ни одна из функций CMSampleBuffer не является очевидным решением.

Ответ 1

Здесь вы делаете это для буфера звукового образца, к которому вы смотрите, и если вы хотите посмотреть на весь процесс (получение всех аудиоданных из 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];