ExoPlayer puede reproducir directamente las transmisiones en los siguientes formatos de contenedor. Los formatos de muestra de audio y video contenidos también deben ser compatibles (consulta el Formatos de muestra para obtener más información). Para obtener información sobre la compatibilidad con contenedores y formatos de imágenes, consulta Images
Formato del contenedor | Compatible | Comentarios |
---|---|---|
MP4 | SÍ | |
M4A | SÍ | |
FMP4 | SÍ | |
WebM | SÍ | |
Región de Matroska | SÍ | |
MP3 | SÍ | Algunas transmisiones solo admiten búsquedas con una tasa de bits constante** |
OGG | SÍ | Contiene Vorbis, Opus y FLAC |
Vehículos WAV | SÍ | |
MPEG-TS | SÍ | |
MPEG-PS | SÍ | |
FLV | SÍ | No se puede buscar* |
ADTS (AAC) | SÍ | Solo se puede buscar con una tasa de bits constante** |
FLAC | SÍ | Uso de la biblioteca FLAC o el extractor FLAC en la biblioteca de ExoPlayer*** |
AMR | SÍ | Solo se puede buscar con una tasa de bits constante** |
* No se admite la búsqueda porque el contenedor no proporciona metadatos (por ejemplo, un índice de muestra) para permitir que un reproductor multimedia realice búsquedas de manera eficiente. Si es necesaria la búsqueda, te sugerimos que utilices un formato de contenedor más adecuado.
** Estos extractores tienen marcas FLAG_ENABLE_CONSTANT_BITRATE_SEEKING
para
Habilita la búsqueda aproximada con una suposición de tasa de bits constante. Esta
no está habilitada de forma predeterminada. La forma más sencilla de habilitar
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 se puede controlar.
el framework en todos los niveles de API. Los resultados del extractor FLAC de la biblioteca de ExoPlayer
las tramas de audio FLAC, por lo que dependen de tener un decodificador FLAC (por ejemplo, un MediaCodec
decodificador que controla FLAC (obligatorio a partir del nivel de API 27), o
biblioteca de FFmpeg con FLAC habilitado). El objeto DefaultExtractorsFactory
usa
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 una MediaItem
con el URI de contenido multimedia y pasa
al jugador.
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
y pasarlo directamente al jugador en lugar de a 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 proporciona varias formas de personalizar la experiencia de reproducción a tu las necesidades de la app. Consulta la página de personalización para ver ejemplos.