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