在默认照片应用程序中,Apple允许您分享视频到youtube,facebook,vimeo等。我想重现这个功能,但我用1080p录制我的视频,所以它们是非常大的文件。 Apple通过在上传之前压缩视频来解决此问题。我尝试过同样但却失败了。谁能指出我正确的方向?我发现这个问题很有用,但我无法理解为什么它对我不起作用:iPhone:Programmatically compressing recorded video to share?。
以下是我的尝试:
- (void)convertVideoToLowQualityWithInputURL:(NSURL *)inputURL
outputURL:(NSURL *)outputURL
handler:(void (^)(AVAssetExportSession *))handler {
[[NSFileManager defaultManager] removeItemAtURL:outputURL error:nil];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:inputURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:asset presetName:AVAssetExportPresetLowQuality];
exportSession.outputURL = outputURL;
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch ([exportSession status]) {
case AVAssetExportSessionStatusFailed:
NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]);
break;
case AVAssetExportSessionStatusCancelled:
NSLog(@"Export canceled");
break;
default:
break;
}
}];
}
-someMethod{
NSURL *videoURL = [NSURL fileURLWithPath:self.currentVideoURL];
NSArray *videoSplit = [[NSString stringWithFormat:@"%@",videoURL] componentsSeparatedByString: @"."];
NSString *first = [videoSplit firstObject];
NSString *output = [NSString stringWithFormat:@"%@_Low_Qual.%@",first,[videoSplit objectAtIndex:1]];
NSLog(@"VIDEO URL IS: %@",videoURL);
NSLog(@"OUTPUT URL IS: %@",output);
NSURL *outputURL = [NSURL fileURLWithPath:output];
[self convertVideoToLowQualityWithInputURL:videoURL outputURL:outputURL handler: ^(AVAssetExportSession *exportSession)
{
if (exportSession.status == AVAssetExportSessionStatusCompleted) {
printf("completed\n");
}
else {
printf("error\n");
}
}];
}
然而,它让我“导出失败:操作无法完成'每次。视频网址有效,因此我不知道为什么它不会工作。有什么想法吗?
答案 0 :(得分:0)
我不知道这是否是正确答案但是当我将presetName更改为AVAssetExportPreset640X480时,每次运行代码时压缩都会正常工作。