2 votes

UIImagePickerController - sélection d'une vidéo en arrière-plan à partir d'une photothèque

Comment continuer à sélectionner des vidéos dans la photothèque en mode arrière-plan ?

Je veux dire que lorsque j'appuie sur use à partir de imagePickerController - PhotoLibrary et la vidéo commence à être compressée - Pendant ce processus de compression (j'ai joint une capture d'écran), si j'appuie sur home button(i.e. go to background) et de venir ensuite à foreground puis j'ai obtenu info[UIImagePickerControllerMediaURL] comme null Il est donc possible que l'application continue à compresser la vidéo en arrière-plan et qu'elle renvoie des données correctes. url lorsqu'ils viennent à foreground ?

Capture d'écran :

enter image description here

Mon didFinishPickingMediaWithInfo ,

 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{

NSURL *url = info[UIImagePickerControllerMediaURL];

NSLog(@"url : %@",url);

[picker dismissViewControllerAnimated:YES completion:nil];

}

P.S : Si nous enregistrons une vidéo par camera et passer en arrière-plan, l'enregistrement s'arrêtera là et nous pourrons l'utiliser après être passé en avant-plan.

J'ai pensé à une solution de rechange - UIBackgroundTaskIdentifier Mais cela ne fonctionne pas dans tous les cas, si la vidéo est volumineuse, il y a une limite de temps, donc je cherche une autre solution !

Toute aide sera appréciée ! :)

1voto

Lion Points 19154

SI nous voulons choisir video en permanence en arrière-plan par UIImagePickerController de photolibrary pendant video is compressing and user press home button(app go in background) nous devons alors utiliser UIBackgroundTaskIdentifier pour continuer l'exécution en arrière-plan ou toute autre méthode qui permet à l'application de fonctionner en arrière-plan (chose la moins possible !). Maintenant, UIBackgroundTaskIdentifier a une limite de temps, donc nous ne pouvons pas choisir n'importe quelle taille de vidéo, donc si nous limitons la durée de la vidéo, nous pouvons la sélectionner en continu en arrière-plan, comme par exemple,

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.allowsEditing = YES;
picker.videoMaximumDuration = 60.0;

 self.backgroundTask = UIBackgroundTaskInvalid;

            self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
                NSLog(@"Background handler called. Not running background tasks anymore.");
                [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
                self.backgroundTask = UIBackgroundTaskInvalid;
            }];

[self presentViewController:picker animated:YES completion:NULL]; 

Avec UIImagePickerController Nous ne pouvons pas faire plus que cela pour sélectionner une vidéo en arrière-plan. Si quelqu'un veut choisir une grande vidéo en arrière-plan, il doit se pencher sur les points suivants ALAssetLibrary o Photos framework .

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