ExoPlayer может воспроизводить потоки в следующих форматах контейнеров напрямую. Также должна поддерживаться поддержка форматов аудио- и видеообразцов (подробнее см. раздел « Форматы образцов» ). Информацию о поддержке контейнеров и форматов изображений см. в разделе «Образы» .
| Формат контейнера | Поддерживается | Комментарии |
|---|---|---|
| MP4 | ДА | |
| M4A | ДА | |
| ФМП4 | ДА | |
| ВебМ | ДА | |
| Матроска | ДА | |
| MP3 | ДА | Некоторые потоки доступны только в режиме поиска с постоянным битрейтом** |
| Огг | ДА | Содержит Vorbis, Opus и FLAC. |
| WAV | ДА | |
| MPEG-TS | ДА | |
| MPEG-PS | ДА | |
| FLV | ДА | Недоступно для поиска* |
| ADTS (AAC) | ДА | Поиск возможен только с использованием поиска с постоянным битрейтом** |
| FLAC | ДА | Использование библиотеки FLAC или экстрактора FLAC из библиотеки ExoPlayer *** |
| АМР | ДА | Поиск возможен только с использованием поиска с постоянным битрейтом** |
* Перемотка не поддерживается, поскольку контейнер не предоставляет метаданных (например, индекса образцов), позволяющих медиаплееру эффективно выполнять перемотку. Если перемотка необходима, мы рекомендуем использовать более подходящий формат контейнера.
** Эти экстракторы имеют флаг FLAG_ENABLE_CONSTANT_BITRATE_SEEKING для включения приблизительного поиска с использованием предположения о постоянной скорости передачи данных. Эта функция отключена по умолчанию. Самый простой способ включить эту функцию для всех экстракторов, которые ее поддерживают, — использовать DefaultExtractorsFactory.setConstantBitrateSeekingEnabled , как описано здесь .
*** Экстрактор библиотеки FLAC выводит необработанный звук, который может обрабатываться фреймворком на всех уровнях API. Экстрактор библиотеки ExoPlayer выводит аудиокадры FLAC и поэтому зависит от наличия декодера FLAC (например, декодера MediaCodec , обрабатывающего FLAC (требуется начиная с уровня API 27), или библиотеки FFmpeg с включенной поддержкой FLAC). DefaultExtractorsFactory использует экстрактор расширения, если приложение было собрано с библиотекой FLAC . В противном случае он использует экстрактор библиотеки ExoPlayer .
Использование MediaItem
Для воспроизведения прогрессивного потока создайте MediaItem с URI медиафайла и передайте его плееру.
Котлин
// 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 .
Котлин
// 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 предоставляет множество способов настроить воспроизведение в соответствии с потребностями вашего приложения. Примеры см. на странице «Настройка» .