0

我试图选择资产来PHPickerViewController替代 my UIImagePickerController,但是在设置filterconfig选项时,我没有看到设置返回视频长度限制的方法。即使用UIImagePickerControllerthrough的方式videoMaximumDuration

有没有人找到任何锻炼方式?

private func presentPicker(filter: PHPickerFilter?)-> PHPickerViewController {
    var configuration = PHPickerConfiguration(photoLibrary: .shared())
    
    // Set the filter type according to the user’s selection.
    configuration.filter = filter
    // Set the mode to avoid transcoding, if possible, if your app supports arbitrary image/video encodings.
    configuration.preferredAssetRepresentationMode = .current
    // Set the selection behavior to respect the user’s selection order.
    configuration.selection = .ordered
    // Set the selection limit to enable singular selection.
    configuration.selectionLimit = 1
    // Set the preselected asset identifiers with the identifiers that the app tracks.
    configuration.preselectedAssetIdentifiers = []
    
    let picker = PHPickerViewController(configuration: configuration)
    //picker.delegate = self
    //present(picker, animated: true)
    return picker
}
4

1 回答 1

1

查看文档,PHPickerFilterPHPickerViewController看不到任何按视频长度过滤的本地方式。

我能想到的最佳解决方案是符合委托PHPickerViewControllerDelegate并在用户选择后检查视频长度。

您尚未提供其余代码,但您应该遵守PHPickerViewControllerDelegate并实现所需的方法:

func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
      func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
       guard let provider = results.first?.itemProvider else { return }
       provider.loadItem(forTypeIdentifier: UTType.movie.identifier, options: [:]) { (videoURL, error) in
           // Check the video length here
       }
   }
}

有关如何加载视频的示例,请参见上面的代码。从这里您可以按照一些现有的答案来了解如何提取视频时长。如果视频持续时间在您要过滤的范围内,请将其复制到适当的位置FileManager并使用您认为合适的方式对其进行处理,如果不合适即,它太长或太短,不适合您的喜好),然后丢弃它并使用警报/消息告诉用户。

这是有关如何获取视频时长的示例。注意:您只需要将对 url 的引用替换为videoURL您可以在完成处理程序中访问的内容(请参阅注释)。

获取视频的准确时长

另一种解决方案是使用来自第三方的更强大的照片选择器。

这样做的缺点是要求用户为其整个照片库提供权限(因为照片选择器不需要提示权限,因为它是 iOS 提供的沙盒视图控制器)。它还会在您的应用程序中引入另一个依赖项。

如果这些缺点适合您的用例,那么这可能正是您正在寻找的。

这是一个提供一些更强大过滤器的库:https ://github.com/Yummypets/YPImagePicker

请参阅自述文件中的“视频”部分。它允许您指定最小和最大视频持续时间。

于 2021-12-28T06:21:58.467 回答