AVAssetExportSession outputfile

匿名 (未验证) 提交于 2019-12-03 03:08:02

问题:

How should the AVAssetExportSession output file look like? I'm trying to compress a video from an ALAsset item and it doesn't work. I'm guessing the output file has something to do with it.

Here's the code i'm using:

NSString *destinationPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/Movie"]; [self convertVideoToLowQualityWithInputURL:asset.defaultRepresentation.url outputURL:[NSURL URLWithString:destinationPath]];  - (void)convertVideoToLowQualityWithInputURL:(NSURL*)inputURL outputURL:(NSURL*)outputURL {      if([[NSFileManager defaultManager] fileExistsAtPath:[NSString stringWithContentsOfURL:outputURL encoding: 0 error:Nil]]) [[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];      AVURLAsset *assetAV = [AVURLAsset URLAssetWithURL:inputURL options:nil];      NSLog(@"url string from asset: %@", assetAV.URL);     NSLog(@"output url: %@", [outputURL absoluteString]);      [[NSFileManager defaultManager] createFileAtPath:[outputURL path] contents:nil attributes:nil];      NSLog(@"duration: %lld", assetAV.duration.value); //it logs a valid value, so it's all good so far      AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:assetAV presetName:AVAssetExportPresetLowQuality];     exportSession.outputURL = outputURL;     exportSession.outputFileType = AVFileTypeQuickTimeMovie;     [exportSession exportAsynchronouslyWithCompletionHandler:^(void) {         if (exportSession.status == AVAssetExportSessionStatusCompleted) {             NSLog(@"success");         } else {             NSLog(@"error: %@", [exportSession error]);             //error: Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed" UserInfo=0x2023b720 {NSLocalizedDescription=The operation could not be completed, NSUnderlyingError=0x2023bb70 "The operation couldn’t be completed. (OSStatus error -12780.)", NSLocalizedFailureReason=An unknown error occurred (-12780)}         }     }]; } 

Can someone please help me?

UPDATE:

Found the solution. As I thought the problem was the output file so here is the code for generating a valid one:

            NSUInteger count = 0;             NSString *filePath = nil;             do {                 NSString *extension = ( NSString *)UTTypeCopyPreferredTagWithClass(( CFStringRef)AVFileTypeQuickTimeMovie, kUTTagClassFilenameExtension);                 NSString *fileNameNoExtension = [[asset.defaultRepresentation.url URLByDeletingPathExtension] lastPathComponent];                 NSString *fileName = [NSString stringWithFormat:@"%@-%@-%u",fileNameNoExtension , AVAssetExportPresetLowQuality, count];                 filePath = NSTemporaryDirectory();                 filePath = [filePath stringByAppendingPathComponent:fileName];                 filePath = [filePath stringByAppendingPathExtension:extension];                 count++;              } while ([[NSFileManager defaultManager] fileExistsAtPath:filePath]);              NSURL *outputURL = [NSURL fileURLWithPath:filePath]; 

回答1:

Your issue is [NSURL URLWithString:destinationPath] and only that. You need to use [NSURL fileURLWithPath:xxx] like you did in your solution. Posting this just to clarify that that is the only problem.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!