使用“PHPickerViewController”选择视频时是否可以限制视频持续时间?

Is it possible to limit the video duration when selecting a video using `PHPickerViewController`?

我正在尝试使用 PHPickerViewController 来 select 资产来替代我的 UIImagePickerController,但是在设置 filterconfig 选项时我没有看到一种设置返回视频长度限制的方法。即人们可能使用 UIImagePickerControllervideoMaximumDuration.

的方式

有人找到锻炼方法了吗?

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
}

查看 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 将其复制到适当的位置并按照您认为合适的方式进行处理,如果 (IE根据您的喜好,它太长或太短),然后丢弃它并使用警报/消息告诉用户。

这里是一个关于如何获取视频时长的例子。注意:您只需要将对 url 的引用替换为您在完成处理程序中有权访问的 videoURL(请参阅评论)。

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

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

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

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

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