Сохранение видео после касания используйте в UIImagePickerController - PullRequest
3 голосов
/ 16 сентября 2011

У меня есть приложение, которое вызывает UIImagePickerController, и вы снимаете видео с помощью контроллера.После того, как вы взяли видео, я хочу, чтобы видео было сохранено в списке камер после нажатия кнопки «Использовать» в UIImagePickerController.

Можете ли вы мне помочь?

О, и UIImagePickerController поставляется с возможностью переключения на видео, фото по умолчанию.Я хочу, чтобы это было только видео, а не фото.

Мой текущий код:

picker.sourceType=UIImagePickerControllerCameraCaptureModeVideo;
picker.mediaTypes=[UIImagePickerController availableMediaTypesForSourceType:picker.sourceType];

Ответы [ 3 ]

8 голосов
/ 21 марта 2012

После того, как вы внедрили следующий метод делегирования, нажатие кнопки «Использовать» сохранит записанное видео в кадре камеры.

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

    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    NSURL *recordedVideoURL= [info objectForKey:UIImagePickerControllerMediaURL];
    if ([library videoAtPathIsCompatibleWithSavedPhotosAlbum:recordedVideoURL]) {
        [library writeVideoAtPathToSavedPhotosAlbum:recordedVideoURL
                               completionBlock:^(NSURL *assetURL, NSError *error){}
        ];
    } 
    [library release];

}

Используйте следующее для установки режима захвата видео:

imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;

Вот полный код, который я использую для запуска средства выбора изображений для видеозаписи:

UIImagePickerController * imagePickerController = [[UIImagePickerController alloc] init];

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])  {
    imagePickerController.mediaTypes =  [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
    imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
    imagePickerController.showsCameraControls = YES;
    imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;
    imagePickerController.delegate = self;
    imagePickerController.cameraDevice = UIImagePickerControllerCameraDeviceFront;
    [self presentModalViewController:imagePickerController animated:YES];

}
2 голосов
/ 03 апреля 2014

Я пытался сохранить видео с использованием absoluteURL URL-адреса, но это не сработало

NSURL *mediaURL = [info objectForKey: UIImagePickerControllerMediaURL];    
UISaveVideoAtPathToSavedPhotosAlbum(mediaURL.absoluteString, self, @selector(video:didFinishSavingWithError:contextInfo:), nil);

Наконец-то сработало использование свойства пути:

UISaveVideoAtPathToSavedPhotosAlbum([mediaURL path], self, @selector(video:didFinishSavingWithError:contextInfo:), nil);

Надеюсьпомогает всем.

2 голосов
/ 16 сентября 2011

Из справочника по классу UIImagePickerControllerDelegate:

Чтобы сохранить неподвижное изображение в альбом Camera Roll пользователя, вызовите функцию UIImageWriteToSavedPhotosAlbum в теле метода imagePickerController:didFinishPickingMediaWithInfo:.Чтобы сохранить фильм в альбоме Camera Roll пользователя, вместо этого вызовите функцию UISaveVideoAtPathToSavedPhotosAlbum.Эти функции, описанные в Справочнике функций UIKit, сохраняют только изображение или фильм;они не сохраняют метаданные.

Ваш UIImagePickerControllerDelegate может выглядеть примерно так ...

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    NSString *mediaType = [info objectForKey:@"mediaType"];

    if (![mediaType isEqualToString:kUTTypeMovie])
        return;

    NSURL *mediaURL = [info objectForKey:@"mediaURL"];
    UISaveVideoAtPathToSavedPhotosAlbum(mediaURL.absoluteString, self, @selector(video:didFinishSavingWithError:contextInfo:), NULL);
}

- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo: (void *)contextInfo
{
    if (!videoPath && error)
    {
        NSLog(@"Error saving video to saved photos roll: %@, %@", error, [error userInfo]);
        // Handle error;
        return;
    }

    // Video was saved properly. UI may need to be updated here.
}

Обратите внимание, что я реализовал селектор завершения для UISaveVideoToSavedPhotosAlbum().Если по какой-либо причине произойдет сбой, здесь будет сообщено об ошибке, и вы сможете обработать ее соответствующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...