关于 ios:UIImagePickerController – 从照片库中选择背景中的视频

UIImagePickerController - picking video in background from photo library

如何在后台模式下继续从照片库中选择视频?

我的意思是当我从 imagePickerController - PhotoLibrary 按下 use 按钮并且视频开始压缩时 - 在这个压缩过程中(附上截图)如果我按下 home button(i.e. go to background) 然后来到 foreground 然后我得到 info[UIImagePickerControllerMediaURL]null 一样,那么应用程序是否可以继续在后台压缩视频并在来到 foreground 时返回正确的 url

截图:

enter

1
2
3
4
5
6
7
8
9
10
 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info{


NSURL *url = info[UIImagePickerControllerMediaURL];

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

[picker dismissViewControllerAnimated:YES completion:nil];

}

P.S : 如果我们通过camera录制视频并转到后台,那么它会在那里停止录制,我们可以在进入前台后使用它。

我想到了一种解决方法 - UIBackgroundTaskIdentifier 但它不会在所有情况下都有效,如果视频很大则有时间限制,所以寻找任何其他解决方案!

任何帮助将不胜感激! :)


如果我们想在 video is compressing and user press home button(app go in background) 期间从 photolibrary 中通过 UIImagePickerController 在后台连续选择 video 那么我们必须使用 UIBackgroundTaskIdentifier 在后台继续执行或任何其他使应用程序在后台工作的后台方式(不太可能的事情!)。现在,UIBackgroundTaskIdentifier 有时间限制,所以我们不能选择任何大小的视频,所以如果我们限制了视频的持续时间,那么我们可以在背景中连续选择它,例如,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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];

使用 UIImagePickerController 我们可以做很多事情,只需要在背景中选择视频。如果有人想在背景中选择大视频,那么他/她应该查看 ALAssetLibraryPhotos framework.