视频上传
2015-12-02 00:00
337 查看
摘要: 包括视频拍摄和相册选择两种
//注意要给self.imagePicker设置代理 - (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{ // 判断是否支持相机 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { switch (buttonIndex) { case 0:{//拍摄 self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; self.imagePicker.view.hidden = NO; self.imagePicker.mediaTypes = @[(NSString *)kUTTypeMovie]; self.imagePicker.videoMaximumDuration = 30; [self presentViewController:self.imagePicker animated:YES completion:NULL]; } break; case 1:{//从相册选择视频 UIImagePickerController *ipc = [[UIImagePickerController alloc] init]; if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]){ ipc.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; ipc.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:ipc.sourceType]; ipc.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*) kUTTypeMovie, (NSString*) kUTTypeVideo, nil]; } ipc.delegate = self; ipc.allowsEditing = NO; [self presentViewController:ipc animated:YES completion:NULL]; } break; default: break; } } } #pragma mark - UIImagePickerControllerDelegate - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { NSString *mediaType = info[UIImagePickerControllerMediaType]; if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])//视频上传 { NSURL *videoURL = info[UIImagePickerControllerMediaURL]; __weak typeof(self) weakSelf = self; NSLog(@"media %@",info); NSURL *movieURL = [info valueForKey:UIImagePickerControllerMediaURL]; NSDictionary *opts = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:AVURLAssetPreferPreciseDurationAndTimingKey]; AVURLAsset *urlAsset = [AVURLAsset URLAssetWithURL:movieURL options:opts]; // 初始化视频媒体文件 long long second = 0; second = urlAsset.duration.value / urlAsset.duration.timescale; // 获取视频总时长,单位秒 NSLog(@"movie duration : %lld", second); [picker dismissViewControllerAnimated:YES completion:^{ CGRect frame = weakSelf.view.frame; if (frame.size.height == SCREEN_WIDTH - 44) { picker.view.hidden = YES; [weakSelf presentViewController:picker animated:NO completion:nil]; [picker dismissViewControllerAnimated:NO completion:nil]; } }]; // video url: // file:///private/var/mobile/Applications/B3CDD0B2-2F19-432B-9CFA-158700F4DE8F/tmp/capture-T0x16e39100.tmp.9R8weF/capturedvideo.mp4 // we will convert it to mp4 format NSURL *mp4 = [self convert2Mp4:videoURL]; NSFileManager *fileman = [NSFileManager defaultManager]; if ([fileman fileExistsAtPath:videoURL.path]) { NSError *error = nil; [fileman removeItemAtURL:videoURL error:&error]; if (error) { NSLog(@"failed to remove file, error:%@.", error); } } [self uploadfile:mp4.path]; }else//照片上传 { UIImage *orgImage = info[UIImagePickerControllerOriginalImage]; // 2.取出用户选中的图片 UIImage *image = info[UIImagePickerControllerOriginalImage]; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [self.imageArray addObject:image]; _projectView.photoAry = self.imageArray; NSDictionary *dict = @{ @"type" :@"1", @"access_token":[XHLoginTool token], }; [XHHttpTool postURlForPicture:YF_UPLOAD paremeter:dict NSMutableArray:self.imageArray goodResult:^(id responseObj) { XHLog(@"postURlForPicture =%@",responseObj); self.projectModel.ImageId = responseObj; } badResult:^(NSError *error) { XHLog(@"失败"); } noNetWork:^{ XHLog(@"~~没网了亲~~"); } InView:self.view haveProgress:YES]; [picker dismissViewControllerAnimated:YES completion:nil]; } } #pragma mark 网络请求 /** * 功能 AFNetWorking带进度指示文件上传 * @param filePath 文件路径 */ -(void)uploadfile:(NSString *)filePath { //服务器所需参数(非必须) NSMutableDictionary *params=[NSMutableDictionary dictionary]; [params setObject:@"0" forKey:@"uptype"]; //0-表单上传 1-字节流上传 [params setObject:@"VEJQemdPdDd6ZEdhYWY1" forKey:@"key"]; NSData *fileData=[NSData dataWithContentsOfFile:filePath]; //二进制数据 NSString *fileName=[filePath lastPathComponent]; //文件名 NSString *mimeType=@"video/mp4";//[self getMIMEType:filePath]; //文件类型 if (!mimeType) { mimeType = @"application/octet-stream"; } NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://testfront.vcspark.com/app/projectFiles/upProjectFile" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData){ [formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType]; } error:nil]; 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) { NSLog(@"Error: %@", error); } else { NSLog(@"response:%@ ,responseObject%@", response, responseObject); } }]; [uploadTask resume]; } - (NSURL *)convert2Mp4:(NSURL *)movUrl { NSURL *mp4Url = nil; AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:movUrl options:nil]; NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset]; if ([compatiblePresets containsObject:AVAssetExportPresetHighestQuality]) { AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:avAsset presetName:AVAssetExportPreset640x480]; mp4Url = [movUrl copy]; mp4Url = [mp4Url URLByDeletingPathExtension]; mp4Url = [mp4Url URLByAppendingPathExtension:@"mp4"]; exportSession.outputURL = mp4Url; exportSession.shouldOptimizeForNetworkUse = YES; exportSession.outputFileType = AVFileTypeMPEG4; dispatch_semaphore_t wait = dispatch_semaphore_create(0l); // [self showHudInView:self.view hint:@"正在压缩"]; // __weak typeof(self) weakSelf = self; [exportSession exportAsynchronouslyWithCompletionHandler:^{ // [weakSelf hideHud]; switch ([exportSession status]) { case AVAssetExportSessionStatusFailed: { NSLog(@"failed, error:%@.", exportSession.error); } break; case AVAssetExportSessionStatusCancelled: { NSLog(@"cancelled."); } break; case AVAssetExportSessionStatusCompleted: { NSLog(@"completed."); } break; default: { NSLog(@"others."); } break; } dispatch_semaphore_signal(wait); }]; long timeout = dispatch_semaphore_wait(wait, DISPATCH_TIME_FOREVER); if (timeout) { NSLog(@"timeout."); } if (wait) { //dispatch_release(wait); wait = nil; } } return mp4Url; }
相关文章推荐
- Html,Placeholder,Jquery
- 台式机组装的知识
- C++编程:socket设置为非阻塞方式(windows和linux)1
- Java代理系列-动态代理热身
- iOS中的常用的几种设计模式
- JAVA基础之注解
- swoole 连接多台 redis示例
- (5)ionic2--导航
- 了解Angular2---App的生命周期
- 了解angular2---表单
- 学习 kityminder 笔记(十二) 构建部分
- 思科ASA防火墙之NAT
- 利用__define_setter__和 __define_getter__ 定义动态的对象属性
- centos7 安装samba
- 用版本控制系统来管理android studio项目时 配置忽略文件
- python调用wifi
- python 多参数处理
- android-通过StatFs获取文件系统的空间信息
- Java final 关键字
- 如何xcode6中创建pch文件