【问题标题】:AVAssetExportSession Cannot create file Error -12115AVAssetExportSession 无法创建文件错误 -12115
【发布时间】:2016-02-28 17:57:24
【问题描述】:

由于某种原因,我总是收到此错误:

错误域=NSURLErrorDomain 代码=-3000 "无法创建文件" UserInfo={NSLocalizedDescription=无法创建文件, NSUnderlyingError=0x1321dd730 {错误域=NSOSStatusErrorDomain 代码=-12115 "(null)"}}

尝试将 AVSession 导出到 m4a 时。这在我的同事设备上运行良好,但在我的 iPad Air 2 (iOS 9.1) 以及我们的 QA iPad Mini 3 上每次都失败。

- (void)processSourceVideoFile:(NSURL *)mediaURL completion:(void (^)(BOOL success))completion {
    [self showProgressOverlay];

    NSString *outputFileType = AVFileTypeMPEG4;

    __block NSString *videoID = nil;
    if (self.videoAttachment == nil) {
        [MagicalRecord saveUsingEditContextWithBlockAndWait:^(NSManagedObjectContext *localContext) {
            self.videoAttachment = [SPXAttachment MR_createEntityInContext:localContext];
            self.videoAttachment.uuid = [NSString uuid];
            self.videoAttachment.clientCreatedAt = [NSDate date];
            videoID = self.videoAttachment.uuid;
        }];
    } else {
        videoID = self.videoAttachment.uuid;
    }

    self.videoAttachment = [SPXAttachment MR_findFirstByAttribute:@"uuid" withValue:videoID];

    NSString *targetPath = self.videoAttachment.filePath;
    DDLogVerbose(@"Exporting Video to %@", targetPath);
    if ([[NSFileManager defaultManager] fileExistsAtPath:targetPath]) {
        [[NSFileManager defaultManager] removeItemAtPath:targetPath error:nil];
    }

    AVAsset *video = [AVAsset assetWithURL:mediaURL];

    self.exportSession = [AVAssetExportSession exportSessionWithAsset:video presetName:AVAssetExportPreset640x480];
    self.exportSession.outputFileType = outputFileType;
    self.exportSession.outputURL = [NSURL fileURLWithPath:targetPath];

    [self.exportSession exportAsynchronouslyWithCompletionHandler:^{

        dispatch_async(dispatch_get_main_queue(), ^{
            [self hideProgressOverlay];
        });

        switch (self.exportSession.status) {
            case AVAssetExportSessionStatusFailed:
                DDLogError(@"Video Export Failed: %@", self.exportSession.error);
                completion(NO);
                break;
            case AVAssetExportSessionStatusCancelled:
                DDLogVerbose(@"Video Export Cancelled");
                break;
            case AVAssetExportSessionStatusCompleted: {
                DDLogVerbose(@"Video Export Complete for %@", targetPath);
                BOOL dir;
                if ([[NSFileManager defaultManager] fileExistsAtPath:targetPath isDirectory:&dir]) {
                    DDLogVerbose(@"FILE IS THERE MOFO!!");
                }
                completion(YES);
            }
                break;
            default:
                break;
        }
    }];
}

来源网址:file:///private/var/mobile/Containers/Data/Application/BD85BA54-5B3D-4533-A142-C2A30F373814/tmp/capture-T0x12fe1e8e0.tmp.CbksL4/capturedvideo.MOV

输出网址:file:///var/mobile/Containers/Data/Application/BD85BA54-5B3D-4533-A142-C2A30F373814/Library/Files/59124681-ba1a-4453-8078-9ca6ac3088bf/attachments/454dd782-6b14 -44cd-9f4e-84664908388b

我尝试将文件扩展名 (.mp4) 添加到输出 URL,但没有帮助。我四处搜寻与这种情况完全匹配的东西。

任何帮助表示赞赏!

【问题讨论】:

  • 你解决了吗?
  • 确保您的输出 URL 具有 .mp4 文件扩展名。
  • 在 Mac 上,请确保您有权写入文件,例如 via(沙盒可能不允许写入访问): BOOL isWritable = [[NSFileManager defaultManager] isWritableFileAtPath:outputURL.path]; NSLog(@"可写: %@",@(isWritable));

标签: ios avfoundation avassetexportsession m4a avasset


【解决方案1】:

文件名中的日期可能带有正斜杠。 正斜杠适用于目录名称,但不适用于 AVAssetExportSession 中的文件名。

【讨论】:

    【解决方案2】:

    确保您的输出 URL 的路径末尾有 .mp4 文件扩展名。

    【讨论】:

      猜你喜欢
      • 2017-04-27
      • 2011-08-27
      • 2012-08-22
      • 1970-01-01
      • 2021-07-06
      • 2013-07-10
      • 2016-03-20
      • 2015-05-27
      • 1970-01-01
      相关资源
      最近更新 更多