2011-12-18 4 views
11

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

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

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

ответ

10

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

Спасибо большое Даниэль! Работал как шарм :) – RyanM

+0

Я все еще немного потерялся и очень нуб на этом материале. Что означает «выход»? – jangelo42

+0

@ jangelo42 Проверьте ссылку, которую я предоставляю во второй строке (ее полное решение не просто фрагмент), выход AVAssetReaderOutput – Daniel