UIImagePickerControllerSourceTypePhotoLibrary "decoder busy" 选择视频时出错

UIImagePickerControllerSourceTypePhotoLibrary "decoder busy" error when picking video

我遇到的问题是从库中挑选了几个视频后(一个接一个),视频播放器(UIImagePickerController)的预览栏是黑色的(但可以播放)。

选择文件后imagePickerController:didFinishPickingMediaWithInfo: 在没有 UIImagePickerControllerMediaURL 的情况下被调用。在这发生一次之后,每次打开 UIImagePickerController 时都会发生。为了能够再次选择一部新电影,有时重启应用程序就足够了。有时 phone 甚至必须重新启动(或者我只是不耐烦)。

我发现了这个问题:AVPlayerItem fails with AVStatusFailed and error code "Cannot Decode"。我相信它具有相同的背景,但我不知道在这种情况下如何解决问题。在应用程序内部,视频播放效果完美。

显示和关闭 UIImagePickerController 的代码如下。

- (IBAction)openVideoLibrary:(id)sender {
    if (_allowVideoSelection) {

        if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary] == NO || ![[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary] containsObject:(NSString*)kUTTypeMovie]) {
            return;
        }

        UIImagePickerController *pickerController = [[UIImagePickerController alloc] init];
        [pickerController setSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
        pickerController.mediaTypes = [[NSArray alloc] initWithObjects:(NSString*)kUTTypeMovie, nil];
        [pickerController setEditing:NO];
        [pickerController setDelegate:self];
        [self presentViewController:pickerController animated:YES completion:nil];
    }
}


- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    NSLog(@"info: %@", info);

    if (picker.sourceType == UIImagePickerControllerSourceTypePhotoLibrary) {
        [picker dismissViewControllerAnimated:YES completion:^{
            if (![info valueForKey:UIImagePickerControllerMediaURL]) {
                NSLog(@"Error: No media URL");
                return;
            }
            else {
                NSLog(@"Yey media");
            }
        }];
    }
}

有没有关于 better/cleaner 依次选择多个媒体文件的方法?拾取选项在多个阶段集成在工作流程中,因此无法一起拾取图像。

只有一定数量的AVPlayer可以运行并行。如果包含 AVPlayer 属性 的 UIViewController 被关闭,则 AVPlayer 不会自动释放并保持活动状态,直到 iOS 在后台将其杀死。如果在不设置 AVPlayerLayer.player = nil 的情况下重复分配 AVPlayer,在某一时刻 iOS 不允许实例化另一个 AVPlayer。出现错误:"AVPlayerItem fails with AVStatusFailed and error code "无法解码”。