AVAssetExportSession 无法创建文件错误 -12115
Posted
技术标签:
【中文标题】AVAssetExportSession 无法创建文件错误 -12115【英文标题】:AVAssetExportSession Cannot create file Error -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)); 【参考方案1】:文件名中的日期可能带有正斜杠。 正斜杠适用于目录名称,但不适用于 AVAssetExportSession 中的文件名。
【讨论】:
【参考方案2】:确保您的输出 URL 的路径末尾有 .mp4 文件扩展名。
【讨论】:
以上是关于AVAssetExportSession 无法创建文件错误 -12115的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 AVAssetExportSession 导出 AVMutableComposition
无法使用 AVAssetExportSession 修剪音频文件
AVAssetExportSession AVFoundationErrorDomain Code -11800 操作无法完成,NSOSStatusErrorDomain Code=-12780 &q