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

В простых вариантах использования начало работы с 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.4.1")
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
implementation("androidx.media3:media3-ui:1.4.1")

классный

implementation "androidx.media3:media3-exoplayer:1.4.1"
implementation "androidx.media3:media3-exoplayer-dash:1.4.1"
implementation "androidx.media3:media3-ui:1.4.1"

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

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

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

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

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

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Включить мультидексацию

Если ваша версия Gradle minSdkVersion равна 20 или ниже, вам следует включить multidex , чтобы предотвратить ошибки сборки.

Создать плеер

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

Котлин

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

Ява

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

Примечание о резьбе

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

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

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

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

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

Котлин

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

Ява

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

Вы также можете использовать PlayerControlView как отдельный компонент, который полезен только для случаев использования аудио.

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

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

В 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()

Ява

// 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()

Ява

// 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 .