先看错误
Error Domain=AVFoundationErrorDomain Code=-11800 "这项操作无法完成" UserInfo={NSLocalizedFailureReason=发生未知错误(-12780), NSLocalizedDescription=这项操作无法完成, NSUnderlyingError=0x2836c4090 {Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"}}
_exporter.outputFileType = AVFileTypeQuickTimeMovie;
在使用 AVAssetExportSession 导出视频时会出现上面-11800报错,详细错误信息和错误码可能会有所不同,倒是描述的都是让人摸不到头脑,下面是我在遇到此问题时找到的解决方案和我自己解决问题的流程
错误原因总结及【解决链接】
1、生成URL的方法错误
错误的使用 [NSURL URLWithString:@"http://haha."];
使用本地资源应该使用 [NSURL fileURLWithPath:@""];
2、文件路径错误
文件路径错误
另一个路径错误的
2、视频内容错误(这个不清楚具体原因)解决方法
使用AVMutableComposition 重新合并视频轨道和音频轨道
AVAssetExportSession导出MP4视频失败
3、这个错误是由于append buffer前后的时间差必须大于等于所设置的1/timescle(或者大于1.0/600?),不知道是不是由于timescale引起的,反正判断了一下前后两帧的时间差如果小于1.0/timescale这一帧我就丢掉了,结果没有错误发生,合成完成!
buffer设置错误
4、没有音轨有问题
视频没有音轨
5、这个是我遇到的问题也是下面我要描述的问题
问题描述 我们自己iOSapp 拍摄的视频上传到服务器添加水印后加载后使用AVAssetExportSession导出会随机出现上面的错误。安卓上传视频也会导出失败。在上传后台之前的视频时可以使用AVAssetExportSession导出的。设置视频质量只有low质量的可以导出,middle和heigh质量都会出现问题
解决问题思路
1、AVAssetExportSession 最基础的方式导出,不添加其他对音轨视频轨道的操作直接导出。结果导出失败。
2、查看视频信息
在对比网上视频拼接代码时发现抛弃音轨可以对视频导出
视频编码设置有不同 音频声道和时间有不同
我去掉了对原视频音轨的添加,只添背景音。发现可以导出。(此处猜测时音频问题)
在测试代码时无意间添加如下代码
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
仅仅是添加不需要对compositionAudioTrack做别的操作
视频可成功导出
导出成功的视频信息与上面的不是同一个视频(声道是2声道了)