如何将录制的视频保存到照片库?

4
以下代码用于将从相机拍摄的图像保存到相册中。
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) 
    {
         image = [info objectForKey:UIImagePickerControllerEditedImage];
        UIImageWriteToSavedPhotosAlbum(image, self,
                                       @selector(image:finishedSavingWithError:contextInfo:),
                                       nil);
    }

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

3个回答

19

请查看以下代码...

   - (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);

}

我正在录制视频。不是从任何文件中获取。 - Shreedhar
你在哪里使用目标路径? - Shreedhar
2
需要删除视频在其临时路径 (/private/var/mobile/Applications/C2C16234-4535-4F0A-B22E-65C0F820AB25/tmp/capture-T0x1c50f840.tmp.uEJZZe/capturedvideo.MOV) 吗? - macool

1
- (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的代码片段。应该可以工作。

        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文件中。


0

尝试下面的代码

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

  }

或者你也可以尝试这个方法 将视频保存到文档目录的步骤如下

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接