アラのアラアラしい日記

こっそりかいてます

AVFoundationを使ったビデオの処理で「Cannot Complete Export」エラーが出た(iOS9.2~)

こんばんわ!
平日の睡眠不足から、休日に22時間ぶっ通しで寝てしまったところ一時的に精神状態が鬱になった人です。
睡眠の取り過ぎも良くないようですね。

今日はiOS9.2になってからぶつかったバグについてのログです。
Apple先輩徐々に色々厳しくなってますね。

AVFoundationを使ったビデオのexportは映像と音声を分けて定義するのですが、
OSをiOS9.2にしてから今まで成功していたexportで以下のようなエラーが発生しました。

AVAssetExportSession Error -11820 Cannot Complete Export

エラー内容の通り、exportが出来なくなっていたんです。
調査してみると以下のコードに問題があることが分かりました。

AVMutableComposition* composition = [AVMutableComposition composition];
AVMutableCompositionTrack * composedAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio
                                                                              preferredTrackID:kCMPersistentTrackID_Invalid];
[composedAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, kCMTimeZero)
                                                       ofTrack:[[video0 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]
                                                        atTime:kCMTimeZero
                                                            error:nil];

ユーザが音声をミュートに設定していた場合、AVMediaTypeAudioを呼び出していたにも関わらず 音声の再生時間をゼロ秒からゼロ秒に設定していたのが原因でした。

iOS9.2から、定義して使用しないようなコードを書くとexportエラーが起こるようです。
全くおっしゃる通りです!使わないものを定義してどうするんでしょうね!

という訳でミュート設定の場合のみ定義AVMediaTypeAudioの定義をするようにしたら無事にエラーが起こらなくなりました。
非常に初歩的なことですが、こういう細かいところが大切ですしチェックされるようになったのだなと思いました。

綺麗なコードを書いていきたいですね。。
あとバージョンアップ毎に入念なチェックをしなければいけませんね!反省しました!!それでは!!