Начало работы

Для простых сценариев использования начать работу с ExoPlayer можно, выполнив следующие шаги:

  1. Добавьте ExoPlayer в качестве зависимости к вашему проекту.
  2. Создайте экземпляр ExoPlayer .
  3. Прикрепите плеер к элементу интерфейса (для вывода видео и ввода данных пользователем).
  4. Подготовьте плеер, добавив в него объект MediaItem для воспроизведения.
  5. Отпустите игрока, когда он закончит.

Эти шаги описаны более подробно ниже. Полный пример см. в разделе PlayerActivity в основном демонстрационном приложении .

Добавьте ExoPlayer в качестве зависимости.

Добавить модули ExoPlayer

Самый простой способ начать использовать AndroidX Media3 — добавить зависимости Gradle от необходимых библиотек в файл build.gradle вашего модуля приложения.

Например, чтобы использовать ExoPlayer с поддержкой воспроизведения DASH и компонентами пользовательского интерфейса, вы можете добавить зависимости от модулей следующим образом:

Котлин

implementation("androidx.media3:media3-exoplayer:1.9.0")
implementation("androidx.media3:media3-exoplayer-dash:1.9.0")
implementation("androidx.media3:media3-ui:1.9.0")
implementation("androidx.media3:media3-ui-compose:1.9.0")

Классный

implementation "androidx.media3:media3-exoplayer:1.9.0"
implementation "androidx.media3:media3-exoplayer-dash:1.9.0"
implementation "androidx.media3:media3-ui:1.9.0"
implementation("androidx.media3:media3-ui-compose:1.9.0")

где 1.9.0 — ваша предпочтительная версия (последнюю версию можно найти в примечаниях к выпуску ). Все модули должны быть одной версии.

В AndroidX Media3 есть модули библиотек, которые зависят от внешних библиотек для обеспечения дополнительной функциональности. Некоторые из них доступны в репозитории Maven, тогда как другие необходимо собирать вручную. Для получения подробной информации просмотрите каталог libraries и отдельные файлы README.

Более подробную информацию о доступных модулях библиотеки можно найти на странице Google Maven AndroidX Media .

Включите поддержку Java 8.

Если поддержка Java 8 еще не включена, необходимо включить ее во всех файлах build.gradle , зависящих от ExoPlayer, добавив следующее в раздел android :

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Создайте игрока

Создать экземпляр ExoPlayer можно с помощью ExoPlayer.Builder , который предоставляет широкий спектр возможностей для настройки. Приведенный ниже код — это простейший пример создания экземпляра.

Котлин

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

Примечание о заправке нити

Доступ к экземплярам ExoPlayer должен осуществляться из одного потока приложения. В подавляющем большинстве случаев это должен быть основной поток приложения. Использование основного потока приложения является обязательным условием при использовании компонентов пользовательского интерфейса ExoPlayer или расширения IMA.

Поток, в котором необходимо получить доступ к экземпляру ExoPlayer, можно явно указать, передав Looper при создании проигрывателя. Если Looper не указан, используется Looper потока, в котором создан проигрыватель, или, если у этого потока нет Looper , используется Looper основного потока приложения. Во всех случаях Looper потока, из которого необходимо получить доступ к проигрывателю, можно запросить с помощью Player.getApplicationLooper .

Для получения дополнительной информации о модели многопоточности ExoPlayer см. раздел «Модель многопоточности» в документации Javadoc ExoPlayer .

Прикрепите игрока к представлению

Библиотека ExoPlayer предоставляет ряд готовых компонентов пользовательского интерфейса для воспроизведения мультимедиа. К ним относятся PlayerView , который инкапсулирует PlayerControlView , SubtitleView и Surface , на который отображается видео. PlayerView можно включить в XML-файл разметки вашего приложения. Например, чтобы привязать плеер к представлению:

Котлин

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

Использование встроенных компонентов пользовательского интерфейса ExoPlayer необязательно. Для видеоприложений, реализующих собственный пользовательский интерфейс, целевые SurfaceView , TextureView , SurfaceHolder или Surface можно установить с помощью методов ExoPlayer setVideoSurfaceView , setVideoTextureView , setVideoSurfaceHolder и setVideoSurface соответственно. Коллбэк Listener.onCues можно использовать для получения субтитров, которые должны отображаться во время воспроизведения, а setImageOutput — для получения декодированных изображений.

Для более комфортного использования рассмотрите возможность добавления атрибута keepScreenOn или установки блокировки пробуждения для ExoPlayer . Другие действия, поддерживающие работу устройства в фоновом режиме, можно изучить на страницах, посвященных фоновой работе .

android:keepScreenOn="true"

Подробнее об использовании компонентов пользовательского интерфейса Media3 и их настройке можно прочитать на странице пользовательского интерфейса .

Заполните плейлист и подготовьте плеер.

В ExoPlayer каждый медиафайл представлен объектом MediaItem . Для воспроизведения медиафайла необходимо создать соответствующий MediaItem , добавить его в плеер, подготовить плеер и вызвать play воспроизведения:

Котлин

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer напрямую поддерживает плейлисты, поэтому можно подготовить плеер с несколькими медиафайлами для последовательного воспроизведения:

Котлин

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

Плейлист можно обновлять во время воспроизведения без необходимости повторной настройки плеера. Подробнее о заполнении и изменении плейлиста читайте на странице «Плейлисты» . Подробнее о различных параметрах, доступных при создании медиафайлов, таких как обрезка и прикрепление файлов субтитров, читайте на странице «Медиафайлы» .

Управляйте игроком

После подготовки проигрывателя управление воспроизведением осуществляется путем вызова методов проигрывателя. Вот некоторые из наиболее часто используемых методов:

  • play и pause . Начало и пауза воспроизведения.
  • seekTo позволяет осуществлять перемотку внутри медиафайла.
  • hasPrevious , hasNext , previous и next позволяют перемещаться по плейлисту.
  • setRepeatMode определяет, будет ли воспроизведение медиафайлов зацикливаться и каким образом.
  • setShuffleModeEnabled управляет перемешиванием плейлиста.
  • setPlaybackParameters регулирует скорость воспроизведения и высоту тона звука.

Если игрок привязан к PlayerView или PlayerControlView , то взаимодействие пользователя с этими компонентами приведет к вызову соответствующих методов игрока.

Отпустите игрока

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