Progresivo

ExoPlayer puede reproducir directamente las transmisiones en los siguientes formatos contenedores. También se deben admitir los formatos de muestra de audio y video contenidos (consulta la sección Formatos de muestra para obtener más información).

Formato del contenedor Corroborado Comentarios
MP4
M4A
FMP4
WebM
Matroska
MP3 Algunas transmisiones solo se pueden buscar con una búsqueda con tasa de bits constante**
OGG Contiene Vorbis, Opus y FLAC
Vehículo WAV
MPEG‐TS
MPEG‐PS
FLV No permite búsquedas*
ADTS (AAC) Solo se puede realizar búsquedas mediante una búsqueda con tasa de bits constante**
FLAC Mediante la biblioteca FLAC o el extractor de FLAC en la biblioteca de ExoPlayer***
AMR Solo se puede realizar búsquedas mediante una búsqueda con tasa de bits constante**
Foto en movimiento JPEG Solo se extrae el contenido MP4

* 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 una búsqueda de manera eficiente. Si se requiere la búsqueda, te sugerimos usar un formato de contenedor más apropiado.

** Estos extractores tienen marcas FLAG_ENABLE_CONSTANT_BITRATE_SEEKING para habilitar la búsqueda aproximada mediante una suposición de tasa de bits constante. Esta funcionalidad no está habilitada de forma predeterminada. La forma más sencilla de habilitar esta funcionalidad 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, se basa en tener un decodificador FLAC (por ejemplo, un decodificador MediaCodec que controla FLAC (obligatorio desde el nivel de API 27) o la biblioteca 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 MediaItem con el URI de contenido multimedia 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();

Usa ProgressiveMediaSource

Si deseas obtener más opciones de personalización, puedes crear un objeto ProgressiveMediaSource y, luego, un elemento ProgressiveMediaSource directamente en el reproductor, en lugar de un elemento 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 según las necesidades de tu app. Consulta la página Personalización para ver ejemplos.