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

前端之家收集整理的这篇文章主要介绍了ios – 使用AVAssetWriter时,未知的底层OSStatus错误-16364前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为我的某个应用构建视频导出功能.从本质上讲,视频是一系列六种不同图像中的一种,持续时间不同(短).

当我导出包含283个不同持续时间的图像的东西时导出工作正常,但是当我尝试导出803中的一个时,我得到了可怕的“操作无法完成”错误(AKA“我们不知道是什么爆炸因为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个CVPixelBuffers,而不是每次都从UIImages创建新的图像.这似乎有助于性能,并且每次都将其更改为新的并不会改变任何东西(除了让它在753帧上失败),但是谁知道.

有谁知道这可能是什么?

解决方法

好.终于搞清楚了.

由于舍入(将小持续时间值舍入到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,NSLocalizedFailureReason=An unknown error occurred (-16364)}

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

猜你在找的iOS相关文章