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图像,因为我打算画一个纯色图像,但我忽略了高比例单色像素的全尺寸。