天天看點

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]就不會報錯了,具體細節還需要花些時間去看,但這真是個令人蛋疼的問題