2013-06-21 40 views
0

我用來閱讀AVAssetReaderTrackOutput視頻。如何更改AVAssetReaderTrackOutput中的位顏色?

設置「kCVPixelBufferPixelFormatTypeKey」 - 「kCVPixelFormatType_32BGRA」工作!

但我需要一個16位的視頻。

如果設置值「kCVPixelFormatType_16 ....」不起作用。 [asset_reader_output copyNextSampleBuffer] - 總是無=(

這究竟是爲什麼

如何改變了一下顏色

UPD: `代碼:

[videoWriterInput requestMediaDataWhenReadyOnQueue:queueVideo usingBlock:^ 
{ 
    while([videoWriterInput isReadyForMoreMediaData]) 
    { 
     CMSampleBufferRef sampleBuffer=[video_asset_reader_output copyNextSampleBuffer]; 
     if(sampleBuffer) 
     { 
      NSLog(@"write video"); 
      [videoWriterInput appendSampleBuffer:sampleBuffer]; 
      CFRelease(sampleBuffer); 
     } else 
     { 
      [videoWriterInput markAsFinished]; 
      dispatch_release(queueVideo); 
      videoFinished=YES; 
      break; 
     } 
    } 
}]; 

`

回答

0

?核心視頻不支持所有的像素格式,BGRA保證可以正常工作,您必須執行自己的轉換。你用什麼緩衝區?

UPDATE:要訪問像素,使用的是這樣的:

CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer); 
CVPixelBufferLockBaseAddress(pixelBuffer, 0); 

void* bufferAddress = CVPixelBufferGetBaseAddress(pixelBuffer); 
size_t width = CVPixelBufferGetWidth(pixelBuffer); 
size_t height = CVPixelBufferGetHeight(pixelBuffer); 
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(pixelBuffer); 

// Read/modify the pixel data with bufferAddress, height & bytesPerRow 
// For BGRA format, it's 4-byte per pixel in that order 

CVPixelBufferUnlockBaseAddress(pixelBuffer, 0); 
+0

我說有問題的代碼爲您服務。 我需要更改CMSampleBufferRef? – Rinat

+0

我使用代碼段更新了答案,以訪問/修改CMSampleBuffer。我不認爲AVFoundation支持寫入(或讀取)16位視頻幀。你爲什麼要寫16位視頻? –

+0

謝謝! 我需要將視頻發送到服務器。始終是實時的。 如果連接不好,它必須很難壓縮視頻... 16 ... 8 ...黑色和白色。 請告訴我,如何使用它? 「bufferAddress」 – Rinat