Progresivo

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
M4A
FMP4
WebM
Región de Matroska
MP3 Algunas transmisiones solo admiten búsquedas con una tasa de bits constante**
OGG Contiene Vorbis, Opus y FLAC
Vehículos WAV
MPEG-TS
MPEG-PS
FLV No se puede buscar*
ADTS (AAC) Solo se puede buscar con una tasa de bits constante**
FLAC Uso de la biblioteca FLAC o el extractor FLAC en la biblioteca de ExoPlayer***
AMR 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.