2011-12-18 43 views
11

Làm cách nào để chuyển đổi CMSampleBufferRef thành NSData?Làm thế nào để chuyển đổi CMSampleBufferRef thành NSData

Tôi đã quản lý để nhận dữ liệu cho một số MPMediaItem bằng cách làm theo câu trả lời của Erik Aigner trên this thread, tuy nhiên dữ liệu thuộc loại CMSampleBufferRef.

Tôi biết CMSampleBufferRef là cấu trúc và được xác định trong CMSampleBuffer Reference trong Thư viện Dev của iOS, nhưng tôi không nghĩ rằng tôi hoàn toàn hiểu nó là gì. Không có hàm CMSampleBuffer nào có vẻ là một giải pháp rõ ràng.

Trả lời

10

Ở đây bạn đi làm việc này cho đệm mẫu âm thanh đó là những gì bạn đang nhìn, và nếu bạn muốn xem xét toàn bộ quá trình (nhận được tất cả dữ liệu âm thanh từ MPMediaItem vào một tập tin kiểm tra this câu hỏi

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

Cảm ơn rất nhiều Daniel! Làm việc như một sự quyến rũ :) – RyanM

+0

Tôi vẫn còn một chút mất và rất noob về công cụ này. 'Đầu ra' được định nghĩa là gì? – jangelo42

+0

@ jangelo42 Kiểm tra liên kết tôi cung cấp trong dòng thứ hai (giải pháp đầy đủ của nó không chỉ là một đoạn), đầu ra là AVAssetReaderOutput – Daniel

Các vấn đề liên quan