我在资产导出会话失败的背后问题上遇到了困难。这个问题只出现在一个视频中,我认为问题出在它的音轨上,因为我已经成功地导出了没有音轨(只有视频轨道)的资产。
视频轨道使用AVAssetReader解码,并在被重写成新的视频轨道之前进行样本缓冲区处理;音轨则不经过解码或任何中间处理直接传递。然而,即使没有处理视频样本缓冲区,仍然出现了相同的故障。
我还尝试了另一种方式——只使用音频而没有视频轨道——其他视频正常工作,但是这个特定的视频失败了。我想这个视频的音轨本身存在问题,但我无法推断出问题所在,因此无法解决。以下是我的代码:
AVAssetExportSession* assetExport = [[AVAssetExportSession alloc] initWithAsset:composition
presetName:AVAssetExportPresetHighestQuality];
assetExport.outputFileType = @"com.apple.quicktime-movie";
assetExport.outputURL = [NSURL fileURLWithPath:path];
__weak typeof(self) weakSelf = self;
[assetExport exportAsynchronouslyWithCompletionHandler:^{
switch (assetExport.status) {
case AVAssetExportSessionStatusCompleted: NSLog(@"Asset combined");
break;
case AVAssetExportSessionStatusFailed: NSLog(@"Asset combination failed");
break;
default: NSLog(@"Asset combination completed with unknown status: %@", @(assetExport.status));
break;
}
}];
问题应该出现在资产导出会话中。向AVMutableComposition插入轨道的操作运行良好。以下是AVAssetExportSession的错误消息:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed"
UserInfo={NSUnderlyingError=0x6040001338d0 {Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"},
NSLocalizedFailureReason=An unknown error occurred (-12780), NSLocalizedDescription=The operation could not be completed}