加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读