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可以防止这种特殊情况从舍入到零持续时间,但一般的解决方案是丢弃持续时间舍入为零的帧.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...