我用来读取AVAssetReaderTrackOutput视频。
设置“kCVPixelBufferPixelFormatTypeKey” - “kCVPixelFormatType_32BGRA”工作!
但我需要一个16位视频。
如果设置设置值“kCVPixelFormatType_16 ....”不起作用。
[asset_reader_output copyNextSampleBuffer]
- 总是nil =(
为什么会这样?
如何更改位颜色?
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 :(得分:0)
核心视频不支持所有像素格式。 BGRA保证可以工作。您必须执行自己的转换。你在使用什么缓冲区?
更新:要访问像素,请使用以下内容:
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);