ios – 以mp4格式录制,保存和/或转换视频?
发布时间:2020-12-15 01:38:50 所属栏目:百科 来源:网络整理
导读:我有以下问题 – 我正在尝试创建一个记录视频的应用程序,然后将其保存到相机胶卷上,之后我将该视频上传到网络.问题是唯一支持的格式是“mp4”,但我的视频是“mov”. 所以我的问题是如何以“mp4”格式保存摄像机的视频,或将其保存在“mov”中,然后将其转换为
我有以下问题 – 我正在尝试创建一个记录视频的应用程序,然后将其保存到相机胶卷上,之后我将该视频上传到网络.问题是唯一支持的格式是“mp4”,但我的视频是“mov”.
所以我的问题是如何以“mp4”格式保存摄像机的视频,或将其保存在“mov”中,然后将其转换为“mp4”. 这是我的代码: >这是我打开相机的方式: picker = [[UIImagePickerController alloc] init]; picker.sourceType = UIImagePickerControllerSourceTypeCamera; picker.delegate = self; picker.showsCameraControls = YES; picker.allowsEditing = YES; picker.mediaTypes = [[NSArray alloc] initWithObjects: (NSString *) kUTTypeMovie,nil]; [self presentViewController:picker animated:YES completion:nil]; >这是我如何保存视频: NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; if (CFStringCompare ((__bridge_retained CFStringRef) mediaType,kUTTypeMovie,0) == kCFCompareEqualTo) { NSString *moviePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; videoURL = info[UIImagePickerControllerMediaURL]; if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(moviePath)) { UISaveVideoAtPathToSavedPhotosAlbum(moviePath,self,nil,nil); } } [nextScreenButton setTitle:@"ПРОДЪЛЖИ" forState:UIControlStateNormal]; [self dismissViewControllerAnimated:YES completion:nil]; 提前致谢! 解决方法
你正在做正确的事情..现在你需要将这个mov文件转换为mp4如下.
NSString *mediaType = [info objectForKey: UIImagePickerControllerMediaType]; NSString *videoPath1 = @""; if (CFStringCompare ((__bridge_retained CFStringRef) mediaType,0) == kCFCompareEqualTo) { if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum(moviePath)) { NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0]; NSString *moviePath = [[info objectForKey:UIImagePickerControllerMediaURL] path]; videoPath1 =[NSString stringWithFormat:@"%@/xyz.mov",docDir]; NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL]; NSData *videoData = [NSData dataWithContentsOfURL:videoURL]; [videoData writeToFile:videoPath1 atomically:NO]; // UISaveVideoAtPathToSavedPhotosAlbum(moviePath,nil); } } AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:videoPath1] options:nil]; NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:avAsset]; if ([compatiblePresets containsObject:AVAssetExportPresetLowQuality]) { AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset presetName:AVAssetExportPresetPassthrough]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,YES); videoPath = [NSString stringWithFormat:@"%@/xyz.mp4",[paths objectAtIndex:0]]; exportSession.outputURL = [NSURL fileURLWithPath:videoPath]; NSLog(@"videopath of your mp4 file = %@",videoPath); // PATH OF YOUR .mp4 FILE exportSession.outputFileType = AVFileTypeMPEG4; // CMTime start = CMTimeMakeWithSeconds(1.0,600); // CMTime duration = CMTimeMakeWithSeconds(3.0,600); // CMTimeRange range = CMTimeRangeMake(start,duration); // exportSession.timeRange = range; // UNCOMMENT ABOVE LINES FOR CROP VIDEO [exportSession exportAsynchronouslyWithCompletionHandler:^{ switch ([exportSession status]) { case AVAssetExportSessionStatusFailed: NSLog(@"Export failed: %@",[[exportSession error] localizedDescription]); break; case AVAssetExportSessionStatusCancelled: NSLog(@"Export canceled"); break; default: break; } UISaveVideoAtPathToSavedPhotosAlbum(videoPath,nil); [exportSession release]; }]; } [nextScreenButton setTitle:@"ПРОДЪЛЖИ" forState:UIControlStateNormal]; [self dismissViewControllerAnimated:YES completion:nil]; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |