AssetWriter Error -12915 错误解决办法

原文转载自:https://diablo4ever.wordpress.com/2017/05/16/avassetwriter报的那些错

最近项目中用到了视频压缩的地方,查找到用AVFoundation的AVAssetReader等类可以解决视频压缩的码率等问题,当我使用之后,一切都没问题,但是一旦在压缩的途中退出页面,我没有执行AVAssetWriter finishWritingWithCompletionHandler:这个方法超过3次以上,那么拼接缓冲区视频的方法[AVAssetWriterInput appendSampleBuffer:sampleBuffer];就会返回NO,无法拼接缓冲区视频,这就代表无法继续压缩视频。

而且这个问题只有退出APP重新进入才可以解决,从内存中销毁AVAssetWriter对象,重新创建都无法解决这个问题,我打印出来AssetWriter这个类的error属性,里面是一堆中英混杂的错误信息,我真是看的一脸懵逼,:
 

AssetWriter Error -12915

Error Domain=AVFoundationErrorDomain Code=-11840 “无法编码” 
UserInfo={NSUnderlyingError=0x170846330 {Error Domain=NSOSStatusErrorDomain Code=-12915 “(null)”}, 
NSLocalizedFailureReason=此媒体所需的编码器正忙。
(The encoder required for this media is busy.), 
NSLocalizedRecoverySuggestion=停止其他所有对媒体加密的操作,然后再试一次。
(stop any other actions that encode media and try again.),
 NSLocalizedDescription=无法编码}

直到遇到上面的大牛的Blog,里面说明了遇到问题的情况,我才解决这个问题:

把AVAssetWriter设置为全局变量,确保在你退出页面,或者任何奇奇怪怪操作的时候,首先执行AVAssetWriter 的finishWritingWithCompletionHandler方法!这样再次执行[AVAssetWriterInput appendSampleBuffer:sampleBuffer]就不会报错了,具体细节还需要花些时间去看,但这真是个令人蛋疼的问题

猜你喜欢

转载自blog.csdn.net/u013583789/article/details/86250012