AVAssetWriter 未知错误

Posted

技术标签:

【中文标题】AVAssetWriter 未知错误【英文标题】:AVAssetWriter unknown error 【发布时间】:2013-02-25 16:17:43 【问题描述】:

我正在尝试使用 AVAssetWriter 从图像创建视频。实现的代码大部分时间都可以正常工作,但在随机时刻,编写器会出现问题

AVAssetWriter *videoWriter;
...
[videoWriter finishWriting];
NSLog(@"videoWriter error %@",videoWriter.error);

收到的错误是:

Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" 
UserInfo=0x1f839cd0 NSLocalizedDescription=The operation could not be completed,
 NSUnderlyingError=0x1e59efb0 "The operation couldn’t be completed. (OSStatus error -12633.)", 
NSLocalizedFailureReason=An unknown error occurred (-12633)

写图片:

-(void)writeFrame:(WriteableFrame*)wF

    if([writerInput isReadyForMoreMediaData])
    
        CMTime presentTime = CMTimeMake(wF.frameTime, 1000);
        CGImageRef tmpImgRef = [wF.currentImage CGImage];
        buffer = [self pixelBufferFromCGImage:tmpImgRef];
        if(buffer)
        
            [adaptor appendPixelBuffer:buffer withPresentationTime:presentTime];
            CVPixelBufferRelease(buffer);
        
    
    else
    
        NSLog(@"error");
    

有人遇到过这样的问题吗?

【问题讨论】:

你能贴出你从文件中加载资产的代码吗? 我没有从文件中加载资产,我正在编写实时数据,更新了附加图像的方法。 【参考方案1】:

我发现了问题,它是在同一帧时间放置两帧。

【讨论】:

你能详细说明一下吗?我收到此错误,无法弄清楚。非常令人沮丧。 有时我会在完全相同的当前时间附加两个不同的图像。你可以记录presentTime,看看你是否有同样的情况。 [适配器 appendPixelBuffer:buffer withPresentationTime:presentTime]; 我想我遇到了同样的问题。这真的有帮助!如果只是错误更具体...我正在使用finishWritingWithCompletionHandler,发现在这种情况下甚至没有执行完成处理程序,这使得调试更加困难。 你是怎么解决的,能不能给我sn-p的代码【参考方案2】:

直接来自 DTS

错误 -12633 是无效时间戳

【讨论】:

什么是DTS,能否提供相关页面的链接? @StanJames Apple 的开发者技术支持,我通过电子邮件联系了该支持。作为注册的 ios/Mac 开发人员,您的订阅中包含 2 次免费事件,否则它是付费支持。【参考方案3】:

如果推送的帧有问题,也可能发生这种情况

【讨论】:

是否有任何文档说明您不能乱序附加缓冲区? 无。我已经通过实践弄清楚了。但这很合乎逻辑,因为数据应该按顺序流动。 我问是因为我成功地附加了一些无序的缓冲区,并且在一段时间后我才收到写入错误(不是第一个或第二个无序缓冲区,更像是第 10 个或 20 日)。当我踏入这个领域时,我正在处理许多未记录的错误,OSStatus -12717 就是其中之一。我不能完全确定这是否是由于缓冲区乱序造成的,但我正在调试。 可能只有在时间戳有显着差异的情况下才会出现此问题。如文档中所述,导出器尝试在流中交错视频和音频,因此在我看来,帮助他们解决这个问题是个好主意。【参考方案4】:

如果你给AVAssetWriter一个sampleBuffer,然后销毁关联的AVAssetReader,未来的AVAssetReaders可能会在AVAssetWriter完成之前尝试重用sampleBuffer。这与AVAssetWriterInput.h 中的AVAssetWriter 文档相矛盾,据我所知,在您收到finishWritingWithCompletionHandler 中的回调之前,无法确定AVAssetWriter 是否完成,但这可能会导致OSStatus 错误 -12633。

@method appendSampleBuffer:

接收器将保留 CMSampleBuffer 直到它完成,然后释放它。将 CMSampleBuffer 或其内容传递给此方法后,请勿对其进行修改。

【讨论】:

【参考方案5】:

当我的像素缓冲区中的图像与输入像素缓冲区适配器根据您将 sourcePixelBufferAttributes 设置为 for(kCVPixelBufferWidthKey, kCVPixelBufferHeightKey) 所期望的宽度/高度尺寸不同时,我遇到了同样的错误。确保像素缓冲区具有相同的尺寸。就我而言,我的应用程序有时会绘制 1x1 图像,因为我打算绘制纯色图像,但我忽略了将单色像素放大到全尺寸。

【讨论】:

以上是关于AVAssetWriter 未知错误的主要内容,如果未能解决你的问题,请参考以下文章

获得 95% 发出未命名的兼容插件错误:未知:未知错误,打开

VS2010 打开时出现未知错误

aria2下载ftp未知错误

[提问]:“读取数据源出现未知错误:Serialization错误”?

给出未知错误的未知 Keydown 事件[关闭]

Appium 未知错误:处理命令时发生未知的服务器端错误。原始错误:重新安装需要“应用程序”选项