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 предлагает несколько способов настроить воспроизведение в соответствии с потребностями вашего приложения. Примеры можно найти на странице настроек.