整体思路:拿到视频资源,先转为mp4,写进沙盒,然后上传,上传成功后要记得删除沙盒中的文件。
压缩导出视频
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
//视频转换为MP4 //转码操作... _hud.mode = MBProgressHUDModeIndeterminate; _hud.labelText = @ "转码中..." ; AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:_filePathURL options:nil]; NSDateFormatter* formater = [[NSDateFormatter alloc] init]; [formater setDateFormat:@ "yyyyMMddHHmmss" ]; _fileName = [NSString stringWithFormat:@ "output-%@.mp4" ,[formater stringFromDate:[NSDate date]]]; _outfilePath = [NSHomeDirectory() stringByAppendingFormat:@ "/Documents/%@" , _fileName]; NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset]; if ([compatiblePresets containsObject:AVAssetExportPresetMediumQuality]) { MyLog(@ "outPath = %@" ,_outfilePath); AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality]; exportSession.outputURL = [NSURL fileURLWithPath:_outfilePath]; exportSession.outputFileType = AVFileTypeMPEG4; [exportSession exportAsynchronouslyWithCompletionHandler:^{ if ([exportSession status] == AVAssetExportSessionStatusCompleted) { MyLog(@ "AVAssetExportSessionStatusCompleted---转换成功" ); _filePath = _outfilePath; MyLog(@ "转换完成_filePath = %@\\n_filePathURL = %@" ,_filePath,_filePathURL); //获取大小和长度 [self SetViewText]; [self uploadNetWorkWithParam:@{@ "contenttype" :@ "application/octet-stream" ,@ "discription" :description}]; } else { MyLog(@ "转换失败,值为:%li,可能的原因:%@" ,( long )[exportSession status],[[exportSession error] localizedDescription]); [_hud hide:YES]; [MyHelper showAlertWith:nil txt:@ "转换失败,请重试" ]; } }]; } |
开始上传
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
- ( void )uploadNetWorkWithParam:(NSDictionary*)dict { MyLog(@ "开始上传_filePath = %@\\n_filePathURL = %@" ,_filePath,_filePathURL); AFHTTPRequestSerializer *ser=[[AFHTTPRequestSerializer alloc]init]; NSMutableURLRequest *request = [ser multipartFormRequestWithMethod:@ "POST" URLString:[NSString stringWithFormat:@ "%@%@" ,kBaseUrl,kVideoUploadUrl] parameters:@{@ "path" :@ "show" ,@ "key" :_key,@ "discription" :dict[@ "discription" ],@ "isimage" :@(_isImage)} constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileURL:_filePathURL name:@ "file" fileName:_fileName mimeType:dict[@ "contenttype" ] error:nil]; if (!_isImage) { [formData appendPartWithFileURL:_path2Url name:@ "tmp" fileName:@ "tmp.PNG" mimeType:@ "image/png" error:nil]; } } error:nil]; //@"image/png" @"application/octet-stream" mimeType AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; NSProgress *progress = nil; NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) { if (error) { MyLog(@ "request = %@" , request ); MyLog(@ "response = %@" , response ); MyLog(@ "Error: %@" , error ); [_hud hide:YES]; CXAlertView *alert=[[CXAlertView alloc]initWithTitle:NSLocalizedString(@ "Warning" , nil) message:NSLocalizedString(@ "Upload Failed" ,nil) cancelButtonTitle:NSLocalizedString(@ "Iknow" , nil)]; alert.showBlurBackground = NO; [alert show]; } else { MyLog(@ "%@ %@" , response, responseObject); NSDictionary *backDict=(NSDictionary *)responseObject; if ([backDict[@ "success" ] boolValue] != NO) { _hud.labelText = NSLocalizedString(@ "Updating" , nil); [self UpdateResxDateWithDict:backDict discription:dict[@ "discription" ]]; [_hud hide:YES]; } else { [_hud hide:YES]; [MyHelper showAlertWith:nil txt:backDict[@ "msg" ]]; } } [progress removeObserver:self forKeyPath:@ "fractionCompleted" context:NULL]; }]; [progress addObserver:self forKeyPath:@ "fractionCompleted" options:NSKeyValueObservingOptionNew context:NULL]; [progress setUserInfoObject:@ "someThing" forKey:@ "Y.X." ]; [uploadTask resume]; } |
清除documents中视频
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
-( void )ClearMovieFromDoucments{ NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSArray *contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:NULL]; NSEnumerator *e = [contents objectEnumerator]; NSString *filename; while ((filename = [e nextObject])) { MyLog(@ "%@" ,filename); if ([filename isEqualToString:@ "tmp.PNG" ]) { MyLog(@ "删除%@" ,filename); [fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:filename] error:NULL]; continue ; } if ([[[filename pathExtension] lowercaseString] isEqualToString:@ "mp4" ]|| [[[filename pathExtension] lowercaseString] isEqualToString:@ "mov" ]|| [[[filename pathExtension] lowercaseString] isEqualToString:@ "png" ]) { MyLog(@ "删除%@" ,filename); [fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:filename] error:NULL]; } } } |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:http://www.jianshu.com/p/c61c25befa8b