Можно ли ограничить продолжительность видео при выборе видео с помощью PHPickerViewController?

Я пытаюсь выбрать активы, используя PHPickerViewController в качестве замены моего, однако при установке filter и configoptions Я не вижу способа установить ограничение на длину возвращаемого видео. то есть способ, которым можно было бы воспользоваться 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
}

1 ответ

Изучив документацию по и Я не вижу собственного способа фильтрации по длине видео.

Лучшее решение, которое я могу придумать, чтобы соответствовать делегату и проверять длину видео после того, как пользователь его выбрал.

Вы не предоставили остальную часть своего кода, но вы должны соответствовать и реализуем требуемый метод:

      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
       }
   }
}

См. приведенный выше код для примера того, как загрузить видео. Отсюда вы можете следить за некоторыми из существующих ответов, чтобы узнать, как извлечь продолжительность видео. Если продолжительность видео находится в пределах, которые вы хотите отфильтровать, скопируйте его в соответствующее место, используя и обработайте его так, как считаете нужным, если это не так (IE слишком длинный или слишком короткий на ваш вкус), то отбросьте его и сообщите пользователю с помощью предупреждения/сообщения.

Вот пример того, как получить продолжительность видео. Примечание. Вам просто нужно заменить ссылки на URL-адреса на у вас есть доступ в обработчике завершения (см. комментарий).

Получите точную продолжительность видео

Еще одно решение — использовать более мощный сторонний инструмент для выбора фотографий.

Недостатком этого является требование, чтобы пользователь предоставил разрешение на всю свою библиотеку фотографий (где, как средству выбора фотографий не нужно запрашивать разрешение, так как это предоставленный iOS и изолированный контроллер представления). Это также вводит еще одну зависимость в ваше приложение.

Если эти недостатки подходят для вашего варианта использования, то это может быть именно то, что вы ищете.

Вот библиотека с более мощными фильтрами: https://github.com/Yummypets/YPImagePicker .

См. раздел «Видео» в файле README. Он позволяет указать минимальную и максимальную продолжительность видео.

Другие вопросы по тегам