Менеджер предварительной загрузки позволяет повысить удобство для пользователей, ускоряя показ контента и сокращая время ожидания при переходе от одного элемента к другому. Вы также можете настроить продолжительность и рейтинг предварительной загрузки для каждого элемента.
В социальных сетях часто встречается ситуация, когда приложение показывает пользователю список или карусель медиафайлов. Например, в приложении может показываться карусель коротких видео. Когда одно видео заканчивается, приложение переключается на следующее. Если пользователю не нравится видео, он может перейти к следующему или предыдущему.
Если вы не настроите предварительную загрузку видеоконтента, это может негативно сказаться на удобстве работы пользователей. Пользователь закончил просмотр одного медиафайла и ждет, пока загрузится следующий.
С другой стороны, если вы будете предварительно загружать контент слишком агрессивно, это приведет к потере мощности и пропускной способности сети при загрузке контента, который пользователь может никогда не воспроизвести.
DefaultPreloadManager помогает найти баланс между этими факторами. Менеджер предварительной загрузки работает с вашим приложением, чтобы определить, насколько важен каждый мультимедийный объект, и заранее загружает соответствующий объем.
Разделение труда
Если вы используете DefaultPreloadManager, часть работы выполняется вашим кодом, а часть – менеджером предварительной загрузки.
Приложение должно выполнять следующие действия:
- Создайте объекты
ExoPlayerприложения, используя тот же объектDefaultPreloadManager.Builder, который вы использовали для создания менеджера предзагрузки. Вызовите методDefaultPreloadManager.Builder.buildExoPlayer(), чтобы создать объектExoPlayer. - Сообщите менеджеру предварительной загрузки, какие мультимедийные объекты нужно отслеживать. Это не обязательно должен быть весь контент в карусели. Вы можете указать только первые несколько элементов, которые будут воспроизводиться. По мере того как пользователь просматривает карусель, вы можете добавлять и удалять мультимедийные объекты из пула менеджера предзагрузки.
- Отвечать на запросы менеджера предзагрузки, сообщая ему, какой объем контента нужно предзагрузить для каждого элемента.
Получайте медиаконтент из менеджера предварительной загрузки, когда пользователь начинает воспроизведение. Менеджер предзагрузки предоставляет приложению объект
MediaSourceдля этого контента.Сообщите менеджеру предзагрузки индекс воспроизводимого элемента. Менеджер предварительной загрузки использует эту информацию, чтобы определить, насколько близок каждый мультимедийный объект к воспроизводимому объекту, и соответствующим образом динамически расставить приоритеты предзагрузки. Когда пользователь переходит к новому объекту, обновите этот индекс с помощью менеджера предварительной загрузки.
Освободите менеджер предзагрузки, когда он больше не нужен, чтобы освободить ресурсы.
Менеджер предварительной загрузки выполняет следующие действия:
- В нем отслеживаются все мультимедийные объекты, добавленные вашим приложением.
- Каждый раз, когда приоритеты обновляются, система запрашивает у приложения, какую часть каждого мультимедийного объекта нужно загрузить, вызывая метод
TargetPreloadStatusControl. - После запроса к приложению он предварительно загружает соответствующее количество каждого мультимедийного объекта. Менеджер предварительной загрузки определяет, в каком порядке загружать элементы. В первую очередь предлагаются объекты, наиболее близкие к тому, который пользователь воспроизводит в данный момент.
- Когда приложение запрашивает контент, менеджер предзагрузки предоставляет объект
MediaSourceс уже загруженным контентом.
Рабочий процесс менеджера предзагрузки
В этом разделе описывается типичный рабочий процесс для приложения, использующего менеджер предварительной загрузки. В этом примере мы предполагаем, что в приложении показывается карусель коротких видео. Выбранное видео воспроизводится автоматически, но пользователь может прокручивать карусель в любом направлении. При этом воспроизведение текущего видео останавливается и начинается воспроизведение видео, к которому пользователь перешел.
Все эти шаги подробно описаны на следующих страницах.
- Приложение создает элемент управления статусом предварительной загрузки. Менеджер предварительной загрузки запрашивает у этого элемента управления информацию о том, какую часть каждого мультимедийного объекта нужно загрузить.
- Приложение создает объект
DefaultPreloadManager.Builderи передает целевой статус управления предзагрузкой. Затем приложение использует конструктор для создания менеджера предзагрузки. - Приложение добавляет мультимедийные объекты в менеджер предзагрузки. Приложение предоставляет индекс для каждого элемента, указывающий его положение в карусели.
- Для каждого мультимедийного объекта менеджер предварительной загрузки вызывает целевой элемент управления предварительной загрузкой, чтобы запросить, какую часть объекта следует загрузить. В настройках предварительной загрузки можно указать, что нужно загрузить контент определенной продолжительности, получить только метаданные объекта или не загружать ничего. После того как менеджер предварительной загрузки получит эту информацию, он начнет загружать медиаконтент.
- Когда пользователь начинает воспроизведение контента, приложение вызывает менеджер предварительной загрузки, чтобы запросить
MediaSourceдля этого мультимедийного объекта. Приложение также вызываетsetCurrentPlayingIndex(), чтобы сообщить менеджеру предзагрузки, какой мультимедийный объект воспроизводится, и обновить приоритеты мультимедийных объектов. - При каждом обновлении приоритетов менеджер предзагрузки снова вызывает целевой элемент управления предзагрузкой, чтобы узнать, сколько элементов каждого типа нужно загрузить.
- Когда приложение закрывает карусель, оно освобождает менеджер предзагрузки, чтобы освободить его ресурсы.