Как сохранить записанное видео в фотоальбом? - PullRequest
4 голосов
/ 03 апреля 2012

Следующий код для сохранения изображения, снятого с камеры, в фотоальбом.

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

Как сохранить перекодированное видео в фотоальбом?

Ответы [ 3 ]

19 голосов
/ 03 апреля 2012

Проверьте ниже код ...

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

}
1 голос
/ 03 апреля 2012
- (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 для Apple. Должно работать.

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

Эта функция используется для начала записи видео в этот файл movieURL с помощью avassetwriter.

0 голосов
/ 03 апреля 2012

Попробуйте код ниже

- (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];
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...