使用“PHPickerViewController”选择视频时是否可以限制视频持续时间?
Is it possible to limit the video duration when selecting a video using `PHPickerViewController`?
我正在尝试使用 PHPickerViewController
来 select 资产来替代我的 UIImagePickerController
,但是在设置 filter
和 config
选项时我没有看到一种设置返回视频长度限制的方法。即人们可能使用 UIImagePickerController
到 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
}
查看 PHPickerFilter
和 PHPickerViewController
的文档,我看不到任何按视频长度过滤的本机方法。
我能想到的最好的解决方案,符合委托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
请参阅自述文件中的“视频”部分。它允许您指定最小和最大视频持续时间。
我正在尝试使用 PHPickerViewController
来 select 资产来替代我的 UIImagePickerController
,但是在设置 filter
和 config
选项时我没有看到一种设置返回视频长度限制的方法。即人们可能使用 UIImagePickerController
到 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
}
查看 PHPickerFilter
和 PHPickerViewController
的文档,我看不到任何按视频长度过滤的本机方法。
我能想到的最好的解决方案,符合委托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
请参阅自述文件中的“视频”部分。它允许您指定最小和最大视频持续时间。