当前位置:  开发笔记 > IOS > 正文

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

如何解决《使用AVAssetWriter时,未知的底层OSStatus错误-16364》经验,为你挑选了1个好方法。

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

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

当我尝试使用my AVAssetWriterInputPixelBufferAdaptor,return appendPixelBuffer:withPresentationTime:返回第754帧(总是第754帧)时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说没有这样的东西,这个用于搜索SDK标题的Python脚本什么也没发现.它也不是像一些OSStatus错误那样的四字符代码(除非我搞砸了这个).

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

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

如果它具有任何重要性,我会对CVPixelBuffer6个图像反复重复使用相同的6 秒,而不是UIImage每次都从s 创建新的图像.这似乎有助于性能,并且每次都将其更改为新的并不会改变任何东西(除了让它在第753帧上失败),但谁知道.

有谁知道这可能是什么?



1> Linuxios..:

好.终于搞清楚了.

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

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有