使用AVAssetWriter时,未知的底层OSStatus错误-16364

时间:2015-12-22 20:53:21

标签: ios avfoundation avassetwriter cvpixelbuffer osstatus

我正在为我的某个应用构建视频导出功能。从本质上讲,视频是一系列六种不同图像中的一种,持续时间不同(短)。

当我导出包含283个不同持续时间的图像的东西时,导出工作正常,但是当我尝试导出803中的一个时,我得到了可怕的"操作无法完成"错误(A.K.A。"我们不知道是什么爆炸因为AVFoundation错误报告很糟糕")。

当我尝试使用AVAssetWriterInputPixelBufferAdaptor添加第754帧(始终是第754帧),appendPixelBuffer:withPresentationTime:返回NO时,AVAssetWriter的状态为失败,错误是这样的:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)}

我不能为我的生活弄清楚底层错误(OSStatus -16364)是什么。 www.osstatus.com不知道,macerror表示不存在此类内容,this用于搜索SDK标头的Python脚本一无所获。它也不是像一些OSStatus错误那样的四字符代码(除非我搞砸了这个)。

我已经排除了"操作无法完成的所有常见原因"我发现的错误。它与文件系统权限或覆盖无关,appendPixelBuffer的两次调用没有相同的显示时间。

它不是内存(视频导出时内存使用率保持在165MB),CPU保持在3%左右。

如果它有任何重要性,我会反复为6张图片重复使用相同的6 CVPixelBuffer s,而不是每次都从UIImage创建新的__init__ s。这似乎有助于提高性能,并且每次都不会将其改为新的状态似乎没有改变任何东西(除了让它在第753帧上失败),但是谁知道。

有谁知道这可能是什么?

1 个答案:

答案 0 :(得分:17)

行。终于搞清楚了。

由于四舍五入(将小持续时间值舍入到30 FPS的时间刻度,导致它们变为0/30),在特定情况下appendPixelBuffer:withPresentationTime:被调用两次presentationTime。 AVFoundation在7帧之后没有注意到问题,当它抛出错误时:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo={NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)}

使用60 FPS代替30 FPS可以防止这种特殊情况四舍五入到零持续时间,但一般解决方案是丢弃持续时间舍入为零的帧。