2011-12-18 6 views
11

CMSampleBufferRef를 NSData로 어떻게 변환합니까?CMSampleBufferRef를 NSData로 변환하는 방법

나는 this thread의 Erik Aigner의 답변에 따라 MPMediaItem의 데이터를 가져 왔지만 데이터는 CMSampleBufferRef입니다.

CMSampleBufferRef가 struct이고 iOS Dev Library의 CMSampleBuffer Reference에 정의되어 있지만 이것이 무엇인지 완전히 이해하고 있다고 생각하지 않습니다. 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