Creating CMSampleBufferRef from the data
I am trying to create a CMSampleBuffer Ref from the data and trying to feed it to AVAssetWriter. But as开发者_开发知识库set writer is failing to create the movie from the data. Following is the code to create the CMSampleBufferRef.
CVImageBufferRef cvimgRef = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress(cvimgRef,0);
uint8_t *buf=(uint8_t *)CVPixelBufferGetBaseAddress(cvimgRef);
int width = 480;
int height = 360;
int bitmapBytesPerRow = width*4;
int bitmapByteCount = bitmapBytesPerRow*height;
CVPixelBufferRef pixelBufRef = NULL;
CMSampleBufferRef newSampleBuffer = NULL;
CMSampleTimingInfo timimgInfo = kCMTimingInfoInvalid;
CMSampleBufferGetSampleTimingInfo(sampleBuffer, 0, &timimgInfo);
OSStatus result = 0;
OSType pixFmt = CVPixelBufferGetPixelFormatType(cvimgRef);
CVPixelBufferCreateWithBytes(kCFAllocatorDefault, width, height, pixFmt, buf, bitmapBytesPerRow, NULL, NULL, NULL, &pixelBufRef);
CMVideoFormatDescriptionRef videoInfo = NULL;
result = CMVideoFormatDescriptionCreateForImageBuffer(NULL, pixelBufRef, &videoInfo);
CMSampleBufferCreateForImageBuffer(kCFAllocatorDefault, pixelBufRef, true, NULL, NULL, videoInfo, &timimgInfo, &newSampleBuffer);
Movie creation works fine when we use the original CMSampleBufferRef obtained from the AVFoundation data output callback method.
But the same fails when I try to create the movie using the custom CMSampleBufferRef. Asset writer throws the following error:
The operation couldn’t be completed. (AVFoundationErrorDomain error -11800.)
Please help me out in resolving this issue.
You should look into AVAssetWriterInputPixelBufferAdaptor - it accepts CVPixelBuffers so you don't need to convert the CVPixelBuffer in a CMSampleBuffer.
here is a link to a thread about it on the apple dev forum -> https://devforums.apple.com/thread/70258?tstart=0
Also - any chance you could post your project file or sample code of the capture movie working -- I am using the default CMSampleBuffer from the AVFoundation data output callback method - but when I save it to camera roll it is all black except the last 5 frames which I have to manually scrub to :S
any help in regards to my issue would be greatly appreciated.
Cheers,
Michael
The operation couldn’t be completed. (AVFoundationErrorDomain error -11800.)
For this error, it always occur when timingInfo
is invalid. it need set it to valid values with PTS
and Duration
.
CMSampleTimingInfo timingInfo = kCMTimingInfoInvalid;
timingInfo.presentationTimeStamp = pts;
timingInfo.duration = duration;
精彩评论