I am trying to create a CMSampleBuffer Ref from data and trying to pass it to AVAssetWriter. But the owner of the resource cannot create a movie from the data. Below 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);
Making a movie works great when we use the original CMSampleBufferRef obtained from the AVFoundation output callback method.
But the same thing fails when I try to create a movie using a custom CMSampleBufferRef. The script generates the following error:
The operation couldn't be completed. (AVFoundationErrorDomain error -11800.)
Please help me in solving this problem.
iphone avfoundation
Subhash
source share