воспроизвести выбранное пользователем видео из галереи iPhone с помощью моих пользовательских элементов управления воспроизведением.
прочитать метаданные видео (например, продолжительность).
иметь возможность повторно открыть видео при следующем запуске приложения.
сделать это самым быстрым способом, даже для многогигабайтные видео
не связаны с правами доступа, поскольку iOS предлагает встроенный безопасный инструмент выбора фотографий.
После того, как я попробовал различные подходы, выполнить все мои потребности оказалось непросто. Я нашел два варианта:
использовать компонент PhotosPicker(выбор: $selectedVideoItem, соответствие: .videos) из быстрого пользовательского интерфейса. В результате он предоставляет PhotosPickerItem, из которого я получаю AVAsset и передаю его своему компоненту видеоплеера. Две проблемы с этим подходом:
Мне нужно использовать selectedVideoItem.itemIdentifier, чтобы иметь возможность повторно открыть видео при следующем запуске приложения, но оно недоступно, пока пользователь не предоставит полный доступ к галерее фотографий.
Пользовательский интерфейс выглядит несогласованно — в случае возникновения ошибки выбранный элементVideoItem остается, поэтому при повторном открытии средства выбора он отображается предварительно выбранным, но его невозможно загрузить из-за ошибки
[*]загрузить видео в виде файла с помощью loadFileRepresentation(). Кажется, это работает, и я смогу снова открыть видео при дальнейших запусках приложения, поскольку оно хранится во временном файле. Но мне не нравится, что видео на самом деле копируется в файл, поэтому мне нужно позаботиться об этом и обработать окружающие крайние случаи (например, сбой при копировании, ограниченное пространство для хранения).
Итак, интересно, есть ли способ заставить это работать без копирования видео во временный файл. Или может есть другой вариант...
Что мне нужно: [list] [*]воспроизвести выбранное пользователем видео из галереи iPhone с помощью моих пользовательских элементов управления воспроизведением.
[*]прочитать метаданные видео (например, продолжительность).
[*]иметь возможность повторно открыть видео при следующем запуске приложения.
[*]сделать это самым быстрым способом, даже для многогигабайтные видео
[*]не связаны с правами доступа, поскольку iOS предлагает встроенный безопасный инструмент выбора фотографий.
[/list] После того, как я попробовал различные подходы, выполнить все мои потребности оказалось непросто. Я нашел два варианта: [list] [*]использовать компонент PhotosPicker(выбор: $selectedVideoItem, соответствие: .videos) из быстрого пользовательского интерфейса. В результате он предоставляет PhotosPickerItem, из которого я получаю AVAsset и передаю его своему компоненту видеоплеера. Две проблемы с этим подходом:
Мне нужно использовать selectedVideoItem.itemIdentifier, чтобы иметь возможность повторно открыть видео при следующем запуске приложения, но оно недоступно, пока пользователь не предоставит полный доступ к галерее фотографий.
[*][code]PhotosPicker[/code] Пользовательский интерфейс выглядит несогласованно — в случае возникновения ошибки выбранный элементVideoItem остается, поэтому при повторном открытии средства выбора он отображается предварительно выбранным, но его невозможно загрузить из-за ошибки
[/list]
[*]загрузить видео в виде файла с помощью loadFileRepresentation(). Кажется, это работает, и я смогу снова открыть видео при дальнейших запусках приложения, поскольку оно хранится во временном файле. Но мне не нравится, что видео на самом деле копируется в файл, поэтому мне нужно позаботиться об этом и обработать окружающие крайние случаи (например, сбой при копировании, ограниченное пространство для хранения).
Итак, интересно, есть ли способ заставить это работать без копирования видео во временный файл. Или может есть другой вариант...