Прогрессивная

ExoPlayer может воспроизводить потоки в следующих форматах контейнеров: Также должны поддерживаться форматы аудио- и видеосэмплов (подробнее о форматах сэмплов…). Подробнее о контейнерах и форматах изображений…

Формат контейнера Поддерживается Комментарии
MP4; ДА
M4A ДА
FMP4 ДА
WebM ДА
Matroska ДА
MP3 ДА Некоторые потоки можно перемотать только с помощью поиска с постоянным битрейтом**
Ogg ДА содержащие Vorbis, Opus и FLAC;
WAV ДА
MPEG-TS ДА
MPEG-PS ДА
LV ДА Нельзя перемотать*
ADTS (AAC) ДА Поиск возможен только при постоянном битрейте**
FLAC ДА Используя библиотеку FLAC или экстрактор FLAC в библиотеке ExoPlayer***
AMR ДА Поиск возможен только при постоянном битрейте**

* Перемотка не поддерживается, поскольку контейнер не предоставляет метаданные (например, индекс образца), которые позволяют медиапроигрывателю эффективно выполнять перемотку. Если перемотка необходима, рекомендуем использовать более подходящий формат контейнера.

** У этих экстракторов есть флаги FLAG_ENABLE_CONSTANT_BITRATE_SEEKING, позволяющие выполнять приблизительный поиск, используя предположение о постоянном битрейте. Эта функция по умолчанию отключена. Самый простой способ включить эту функцию для всех экстракторов, которые ее поддерживают, – использовать DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, как описано здесь.

*** Извлечение с помощью библиотеки FLAC позволяет получить необработанный аудиоконтент, который может быть обработан фреймворком на всех уровнях API. Извлечение FLAC-файлов с помощью библиотеки ExoPlayer выполняется путем вывода аудиокадров FLAC, поэтому для этого требуется декодер FLAC (например, MediaCodec-декодер, который обрабатывает FLAC (требуется с уровня API 27), или библиотека FFmpeg с включенным FLAC). DefaultExtractorsFactory использует экстрактор расширений, если приложение было создано с помощью библиотеки FLAC. В противном случае используется экстрактор библиотеки ExoPlayer.

Как использовать MediaItem

Чтобы воспроизвести потоковую передачу с прогрессивной загрузкой, создайте MediaItem с URI медиаконтента и передайте его проигрывателю.

Kotlin

// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri))
// Prepare the player.
player.prepare()

Java

// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media item to be played.
player.setMediaItem(MediaItem.fromUri(progressiveUri));
// Prepare the player.
player.prepare();

Как использовать ProgressiveMediaSource

Чтобы получить больше возможностей для настройки, создайте ProgressiveMediaSource и передайте его непосредственно проигрывателю вместо MediaItem.

Kotlin

// Create a data source factory.
val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory()
// Create a progressive media source pointing to a stream uri.
val mediaSource: MediaSource =
  ProgressiveMediaSource.Factory(dataSourceFactory)
    .createMediaSource(MediaItem.fromUri(progressiveUri))
// Create a player instance.
val player = ExoPlayer.Builder(context).build()
// Set the media source to be played.
player.setMediaSource(mediaSource)
// Prepare the player.
player.prepare()

Java

// Create a data source factory.
DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory();
// Create a progressive media source pointing to a stream uri.
MediaSource mediaSource =
    new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(MediaItem.fromUri(progressiveUri));
// Create a player instance.
ExoPlayer player = new ExoPlayer.Builder(context).build();
// Set the media source to be played.
player.setMediaSource(mediaSource);
// Prepare the player.
player.prepare();

Как настроить воспроизведение

ExoPlayer предлагает несколько способов настроить воспроизведение в соответствии с потребностями вашего приложения. Примеры можно найти на странице настроек.