某些文件的AVAssetExport失败

Kan*_*sad 16 objective-c ios avassetexportsession

我试图从iPod-Library导出音频文件.我的目标是使用此iPod-Library文件在应用程序文档文件夹中创建新文件.它无法仅为某些项目创建文件.以下是我的代码段.

AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL: url options:nil];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentsDirectory = [paths objectAtIndex:0];

AVAssetExportSession *exporter = [[AVAssetExportSession alloc]
                                  initWithAsset: songAsset
                                  presetName: AVAssetExportPresetAppleM4A];

exporter.outputFileType = @"com.apple.m4a-audio";

NSString *songName  =   [filename stringByAppendingString:@".m4a"];

NSString *musicfilepath  = [documentsDirectory stringByAppendingPathComponent:@"musics/"];

[[NSFileManager defaultManager] createDirectoryAtPath:musicfilepath withIntermediateDirectories:YES attributes:nil error:nil];

NSString *exportFile = [musicfilepath stringByAppendingPathComponent:songName];



NSError *error1;

if([[NSFileManager defaultManager] fileExistsAtPath:exportFile]) 
{

    [[NSFileManager defaultManager] removeItemAtPath:exportFile error:&error1];

}

NSURL* exportURL = [[NSURL fileURLWithPath:exportFile] retain];

exporter.outputURL = exportURL; 
Run Code Online (Sandbox Code Playgroud)

尝试使用错误处理程序块时,如下所示出现错误:

    [exporter exportAsynchronouslyWithCompletionHandler:^{

    int exportStatus = exporter.status;

    switch (exportStatus) {

        case AVAssetExportSessionStatusFailed: {

            NSError *exportError = exporter.error;

            NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError);

            break;
        }
  }
 }];
Run Code Online (Sandbox Code Playgroud)

AVAssetExportSessionStatusFailed:Error Domain = AVFoundationErrorDomain Code = -11800"操作无法完成"UserInfo = 0x214f20 {NSLocalizedFailureReason =发生未知错误(-12124),NSUnderlyingError = 0x218270"操作无法完成.(OSStatus error -12124 .)",NSLocalizedDescription =操作无法完成}

JAD*_*909 0

如果您打开了 iTunes 匹配并且文件未下载到设备,则可能会发生这种情况。您能检查一下您是否属于这种情况吗?如果是这样,我可以提供代码来检测它。

+ (BOOL)isDownloadedFromiCloud:(MPMediaItem *)item {
    if ([item valueForProperty:MPMediaItemPropertyAssetURL] != nil) {
        AVURLAsset *asset = [AVURLAsset assetWithURL:[item valueForProperty:MPMediaItemPropertyAssetURL]];
        if (asset.exportable)
            return YES;
    }

    return NO;
}
Run Code Online (Sandbox Code Playgroud)