AVAssetWriter 未知错误
Posted
技术标签:
【中文标题】AVAssetWriter 未知错误【英文标题】:AVAssetWriter unknown error 【发布时间】:2013-02-25 16:17:43 【问题描述】:我正在尝试使用 AVAssetWriter
从图像创建视频。实现的代码大部分时间都可以正常工作,但在随机时刻,编写器会出现问题
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");
有人遇到过这样的问题吗?
【问题讨论】:
你能贴出你从文件中加载资产的代码吗? 我没有从文件中加载资产,我正在编写实时数据,更新了附加图像的方法。 【参考方案1】:我发现了问题,它是在同一帧时间放置两帧。
【讨论】:
你能详细说明一下吗?我收到此错误,无法弄清楚。非常令人沮丧。 有时我会在完全相同的当前时间附加两个不同的图像。你可以记录presentTime,看看你是否有同样的情况。 [适配器 appendPixelBuffer:buffer withPresentationTime:presentTime]; 我想我遇到了同样的问题。这真的有帮助!如果只是错误更具体...我正在使用finishWritingWithCompletionHandler
,发现在这种情况下甚至没有执行完成处理程序,这使得调试更加困难。
你是怎么解决的,能不能给我sn-p的代码【参考方案2】:
直接来自 DTS
错误 -12633 是无效时间戳
【讨论】:
什么是DTS,能否提供相关页面的链接? @StanJames Apple 的开发者技术支持,我通过电子邮件联系了该支持。作为注册的 ios/Mac 开发人员,您的订阅中包含 2 次免费事件,否则它是付费支持。【参考方案3】:如果推送的帧有问题,也可能发生这种情况
【讨论】:
是否有任何文档说明您不能乱序附加缓冲区? 无。我已经通过实践弄清楚了。但这很合乎逻辑,因为数据应该按顺序流动。 我问是因为我成功地附加了一些无序的缓冲区,并且在一段时间后我才收到写入错误(不是第一个或第二个无序缓冲区,更像是第 10 个或 20 日)。当我踏入这个领域时,我正在处理许多未记录的错误,OSStatus -12717 就是其中之一。我不能完全确定这是否是由于缓冲区乱序造成的,但我正在调试。 可能只有在时间戳有显着差异的情况下才会出现此问题。如文档中所述,导出器尝试在流中交错视频和音频,因此在我看来,帮助他们解决这个问题是个好主意。【参考方案4】:如果你给AVAssetWriter
一个sampleBuffer
,然后销毁关联的AVAssetReader
,未来的AVAssetReaders可能会在AVAssetWriter
完成之前尝试重用sampleBuffer
。这与AVAssetWriterInput.h
中的AVAssetWriter
文档相矛盾,据我所知,在您收到finishWritingWithCompletionHandler
中的回调之前,无法确定AVAssetWriter
是否完成,但这可能会导致OSStatus 错误 -12633。
@method appendSampleBuffer:
接收器将保留 CMSampleBuffer 直到它完成,然后释放它。将 CMSampleBuffer 或其内容传递给此方法后,请勿对其进行修改。
【讨论】:
【参考方案5】:当我的像素缓冲区中的图像与输入像素缓冲区适配器根据您将 sourcePixelBufferAttributes 设置为 for(kCVPixelBufferWidthKey, kCVPixelBufferHeightKey) 所期望的宽度/高度尺寸不同时,我遇到了同样的错误。确保像素缓冲区具有相同的尺寸。就我而言,我的应用程序有时会绘制 1x1 图像,因为我打算绘制纯色图像,但我忽略了将单色像素放大到全尺寸。
【讨论】:
以上是关于AVAssetWriter 未知错误的主要内容,如果未能解决你的问题,请参考以下文章
获得 95% 发出未命名的兼容插件错误:未知:未知错误,打开