ExoPlayer puede reproducir directamente los flujos en los siguientes formatos de contenedor. También se deben admitir los formatos de muestras de audio y video incluidos (consulta la sección Formatos de muestras para obtener más detalles). Para obtener información sobre la compatibilidad con formatos y contenedores de imágenes, consulta Imágenes.
| Formato del contenedor | Compatible | Comentarios |
|---|---|---|
| MP4 | SÍ | |
| M4A | SÍ | |
| FMP4 | SÍ | |
| WebM | SÍ | |
| Matroska | SÍ | |
| MP3 | SÍ | Algunas transmisiones solo se pueden buscar con la búsqueda de velocidad de bits constante** |
| Ogg | SÍ | Contiene Vorbis, Opus y FLAC |
| WAV | SÍ | |
| MPEG-TS | SÍ | |
| MPEG-PS | SÍ | |
| FLV | SÍ | No se puede buscar* |
| ADTS (AAC) | SÍ | Solo se puede buscar con una búsqueda de tasa de bits constante** |
| FLAC | SÍ | Usa la biblioteca FLAC o el extractor de FLAC en la biblioteca ExoPlayer.*** |
| AMR | SÍ | Solo se puede buscar con una búsqueda de tasa de bits constante** |
* La búsqueda no es compatible porque el contenedor no proporciona metadatos (por ejemplo, un índice de muestras) para permitir que un reproductor multimedia realice una búsqueda de manera eficiente. Si se requiere la búsqueda, te sugerimos que uses un formato de contenedor más adecuado.
** Estos extractores tienen marcas FLAG_ENABLE_CONSTANT_BITRATE_SEEKING para habilitar la búsqueda aproximada con una suposición de tasa de bits constante. Esta función no está habilitada de forma predeterminada. La forma más sencilla de habilitar esta función para todos los extractores que la admiten es usar DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, como se describe aquí.
*** El extractor de la biblioteca FLAC genera audio sin procesar, que el framework puede controlar en todos los niveles de API. El extractor de FLAC de la biblioteca de ExoPlayer genera fotogramas de audio FLAC y, por lo tanto, depende de tener un decodificador de FLAC (por ejemplo, un decodificador MediaCodec que controle FLAC [obligatorio desde el nivel de API 27] o la biblioteca de FFmpeg con FLAC habilitado). DefaultExtractorsFactory usa el extractor de extensiones si la aplicación se compiló con la biblioteca FLAC.
De lo contrario, usa el extractor de la biblioteca de ExoPlayer.
Cómo usar MediaItem
Para reproducir una transmisión progresiva, crea un objeto MediaItem con el URI de los medios y pásalo al reproductor.
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();
Cómo usar ProgressiveMediaSource
Para obtener más opciones de personalización, puedes crear un ProgressiveMediaSource y pasarlo directamente al reproductor en lugar de un 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();
Cómo personalizar la reproducción
ExoPlayer te ofrece varias formas de adaptar la experiencia de reproducción a las necesidades de tu app. Consulta la página de personalización para ver ejemplos.