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

标签 ios avfoundation avassetwriter cvpixelbuffer osstatus

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

当我导出包含 283 张不同持续时间图像的内容时,导出工作正常,但是当我尝试导出 803 张图像中的一张时,我得到了可怕的“操作无法完成”错误(又名“我们不知道只是什么爆炸是因为 AVFoundation 错误报告很糟糕”)。

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

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 header 的 Python 脚本找不到任何内容。它也不是像一些 OSStatus 错误那样的四字符代码(除非我搞砸了检查这个)。

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

这与内存无关(视频导出期间内存使用率保持在 165MB),CPU 占用率接近 3%。

如果它有任何重要性,我会为 6 个图像一遍又一遍地重复使用相同的 6 个 CVPixelBuffer,而不是每次都从 UIImage 创建新的。这似乎有助于提高性能,并且每次将其更改为新的似乎并没有改变任何东西(除了让它在第 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, NSUnderlyingError=0x17ab2050 {Error Domain=NSOSStatusErrorDomain Code=-16364 "(null)"}, NSLocalizedFailureReason=An unknown error occurred (-16364)}

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

关于ios - 使用 AVAssetWriter 时未知的底层 OSStatus 错误 -16364,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424252/

相关文章:

ios - 使用容器 View Controller 和 Storyboard 构建滑出式菜单。我很困惑

ios - 如何从视频 url iOS 获取可用的视频尺寸/质量?

ios - 制作一个真正的慢动作视频,都是慢动作

android - 谷歌地图 api key - 跨平台

ios - 将类类型传递给泛型

ios - 导出时的 AVVideoCompositionCoreAnimationTool 仅发送图像和音频,但不发送视频

ios - 将 UIImages 数组转换为视频时出现黑框

macos - 使用 AVFoundation (OSX) 向视频添加过滤器 - 如何将生成的图像写回 AVWriter?

ios - 为什么 subview Controller 会占据整个屏幕?

ios - AVAssetExportSessionStatusFailed : Video exporting failed with error -16364