【问题标题】:How to save recorded video into photo album?如何将录制的视频保存到相册中?
【发布时间】:2012-04-16 23:50:01
【问题描述】:

以下代码是将相机拍摄的图像保存到相册中。

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) 
    {
         image = [info objectForKey:UIImagePickerControllerEditedImage];
        UIImageWriteToSavedPhotosAlbum(image, self,
                                       @selector(image:finishedSavingWithError:contextInfo:),
                                       nil);
    }

如何将录制的视频保存到相册中?

【问题讨论】:

标签: iphone ios xcode


【解决方案1】:

试试下面的代码

- (void)saveVideo:(NSURL *)videoUrl {
    NSData *videoData = [NSData dataWithContentsOfURL:videoUrl];
    [videoData writeToFile:@"YOUR_PATH_HERE" atomically:YES];
  }    

  - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
      NSString *type = [mediaDict objectForKey:UIImagePickerControllerMediaType];

      if ([type isEqualToString:(NSString *)kUTTypeVideo] || 
          [type isEqualToString:(NSString *)kUTTypeMovie]) { // movie != video
          NSURL *videoURL [mediaDict objectForKey:UIImagePickerControllerMediaURL];
          [self saveVideo:videoUrl];
      }

  }

或者你也可以试试这个 将视频保存到documents目录如下

   - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {


  NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];

  NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
  NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
  NSString *documentsDirectory = [paths objectAtIndex:0];
  NSString *tempPath = [documentsDirectory stringByAppendingFormat:@"/vid1.mp4"];

  BOOL success = [videoData writeToFile:tempPath atomically:NO];


  [picker dismissModalViewControllerAnimated:YES];
  }

【讨论】:

    【解决方案2】:

    检查下面的代码...

       - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
    
    
    
        NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
           if ([mediaType isEqualToString:@"public.movie"]){        
                   // Saving the video / // Get the new unique filename 
                   NSString *sourcePath = [[info objectForKey:@"UIImagePickerControllerMediaURL"]relativePath]; 
                      UISaveVideoAtPathToSavedPhotosAlbum(sourcePath,nil,nil,nil);
    
    }
    

    【讨论】:

    • 我正在录制视频。不从任何文件中获取
    • 你在哪里使用目标路径
    • 是否需要删除临时路径的视频? (/private/var/mobile/Applications/C2C16234-4535-4F0A-B22E-65C0F820AB25/tmp/capture-T0x1c50f840.tmp.uEJZZe/capturedvideo.MOV)
    【解决方案3】:
    - (void)saveMovieToCameraRoll
    {
        ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
        [library writeVideoAtPathToSavedPhotosAlbum:movieURL
                                    completionBlock:^(NSURL     *assetURL, NSError *error) {
                                        if (error)
                                            [self     showError:error];
                                        else
                                            [self     removeFile:movieURL];
    
                                            dispatch_async(movieWritingQueue, ^{
                                                recordingWillBeStopped = NO;
                                                self.recording = NO;
    
                                                [self.delegate recordingDidStop];
                                        });
                                    }];
        [library release];
    }
    

    这是来自苹果示例 rosywriter 的代码 sn-p。精打细算。

            movieURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@%@", NSTemporaryDirectory(), @"Movie.MOV"]];
            [movieURL retain];
    

    以上行为视频创建文件和路径。

    - (void) startRecording
    {
        dispatch_async(movieWritingQueue, ^{
    
            if ( recordingWillBeStarted || self.recording )
                return;
    
            recordingWillBeStarted = YES;
    
            // recordingDidStart is called from     captureOutput:didOutputSampleBuffer:fromConnection: once the asset writer is setup
            [self.delegate recordingWillStart];
    
            // Remove the file if one with the same name already exists
            [self removeFile:movieURL];
    
            // Create an asset writer
            NSError *error;
            assetWriter = [[AVAssetWriter alloc] initWithURL:movieURL fileType:(NSString *)kUTTypeQuickTimeMovie error:&error];
            if (error)
                [self showError:error];
        }); 
    }
    

    此函数用于开始使用 avassetwriter 将视频录制到该 movieURL 文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 2018-01-25
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多