3 votes

Sauvegarde de la vidéo après son utilisation dans UIImagePickerController

J'ai une application qui appelle UIImagePickerController et vous prenez des vidéos à l'aide du contrôleur. Après avoir pris la vidéo, je veux qu'elle soit enregistrée dans le rouleau de l'appareil photo après avoir cliqué sur utiliser dans l'écran d'accueil. UIImagePickerController .

Pouvez-vous m'aider ?

Oh, et UIImagePickerController est doté d'une option permettant de passer à la vidéo et à la photo par défaut. Je veux que ce soit uniquement une vidéo, pas une photo.

Mon code actuel est :

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

8voto

Myxtic Points 889

Une fois que vous avez mis en œuvre la méthode de délégation suivante, appuyez sur le bouton "Utiliser" pour enregistrer votre vidéo dans le rouleau de la caméra.

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

}

Pour définir le mode de capture sur vidéo, procédez comme suit :

imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeVideo;

Voici le code complet que j'utilise pour lancer le sélecteur d'images pour l'enregistrement vidéo :

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

}

3voto

nano Points 323

J'ai essayé d'enregistrer la vidéo en utilisant l'URL absolue de l'URL, mais cela n'a pas fonctionné.

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

Cela a finalement fonctionné en utilisant la propriété path :

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

J'espère que cela aidera quelqu'un.

2voto

Mark Adams Points 17189

A partir de la UIImagePickerControllerDelegate référence de classe :

Pour enregistrer une image fixe dans l'appareil photo de l'utilisateur R UIImageWriteToSavedPhotosAlbum à partir de la fonction bod imagePickerController:didFinishPickingMediaWithInfo: méthode. Pour enregistrer un sur le disque dur de l'utilisateur, la caméra R UISaveVideoAtPathToSavedPhotosAlbum fonction. Ces fonctions, décrites dans UIKit Function Reference, enregistrent uniquement l'image ou la vidéo ; elles ne sauvegardent pas les métadonnées.

Votre UIImagePickerControllerDelegate peut ressembler à ceci...

- (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.
}

Remarquez que j'ai implémenté le sélecteur d'achèvement pour UISaveVideoToSavedPhotosAlbum() . S'il devait échouer pour une raison quelconque, l'erreur serait signalée ici et vous pourriez alors la traiter de manière appropriée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X