AVAssetExportSession Unable to create file Error -12115

For some reason, I always get this error:

Domain Error = NSURLErrorDomain Code = -3000 "Unable to create file" UserInfo = {NSLocalizedDescription = Unable to create file, NSUnderlyingError = 0x1321dd730 {Domain Error = NSOSStatusErrorDomain Code = -12115 "(null)"}}

when trying to export AVSession to m4a. This works fine on my mobile device, however it fails every time on my iPad Air 2 (iOS 9.1), as well as on our iPad Qa iPad 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; } }]; } 

Source URL: file: ///private/var/mobile/Containers/Data/Application/BD85BA54-5B3D-4533-A142-C2A30F373814/tmp/capture-T0x12fe1e8e0.tmp.CbksL4/capturedvideo.MOV

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

I tried adding the file extension (.mp4) to the output url, and that did not help. I searched around for nothing quite matches this scenario.

Any help appreciated!

+5
source share
1 answer

Make sure your output URL has a .mp4 file extension at the end.

0
source

Source: https://habr.com/ru/post/1236845/


All Articles