AVAssetWriter未知错误
我正尝试使用AVAssetWriter
从图像创buildvideo。 大部分时间,实现的代码都能正常工作,但是在随机时刻,作者有问题
AVAssetWriter *videoWriter; ... [videoWriter finishWriting]; NSLog(@"videoWriter error %@",videoWriter.error);
收到的错误是:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x1f839cd0 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x1e59efb0 "The operation couldn't be completed. (OSStatus error -12633.)", NSLocalizedFailureReason=An unknown error occurred (-12633)}
写图片:
-(void)writeFrame:(WriteableFrame*)wF { if([writerInput isReadyForMoreMediaData]) { CMTime presentTime = CMTimeMake(wF.frameTime, 1000); CGImageRef tmpImgRef = [wF.currentImage CGImage]; buffer = [self pixelBufferFromCGImage:tmpImgRef]; if(buffer) { [adaptor appendPixelBuffer:buffer withPresentationTime:presentTime]; CVPixelBufferRelease(buffer); } } else { NSLog(@"error"); } }
有没有像这样的问题的人?
我发现这个问题,它是在相同的帧时间放两帧。
直接从DTS
错误-12633是一个InvalidTimestamp
如果您将一个sampleBuffer
AVAssetWriter
,然后销毁关联的AVAssetReader
,未来的AVAssetReaders可能会尝试在AVAssetWriter
完成之前重新使用sampleBuffer
。 这与AVAssetWriter
中的AVAssetWriter
文档是矛盾的,据我所知,没有办法确保AVAssetWriter
完成,直到在finishWritingWithCompletionHandler
获得callback,但这可能导致OSStatus错误-12633。
@method appendSampleBuffer:
接收器将保留CMSampleBuffer直到完成它,然后释放它。 传递给此方法后,不要修改CMSampleBuffer或其内容。
如果推送的帧不合格,也可能发生这种情况
当像素缓冲区中的图像与input像素缓冲区适配器期望的宽度/高度尺寸不同时,我得到的错误是基于您为sourcePixelBufferAttributes设置的(kCVPixelBufferWidthKey,kCVPixelBufferHeightKey)。 确保像素缓冲区具有相同的尺寸。 在我的情况下,我的应用程序有时绘制1×1图像,因为我打算画一个纯色图像,但我忽略了高比例单色像素的全尺寸。