Progressiva

Gli stream nei seguenti formati contenitore possono essere riprodotti direttamente da ExoPlayer. Anche i formati dei campioni audio e video contenuti devono essere supportati (per i dettagli, consulta la sezione Formati dei campioni). Per informazioni sul supporto di contenitori e formati di immagini, consulta Immagini.

Formato del contenitore Supportato Commenti
MP4
M4A
FMP4
WebM
Matroska
MP3 Alcuni stream sono ricercabili solo utilizzando la ricerca a bitrate costante**
Ogg Contenente Vorbis, Opus e FLAC
WAV
MPEG-TS
MPEG-PS
FLV Non riproducibile*
ADTS (AAC) Ricercabile solo tramite ricerca a bitrate costante**
FLAC Utilizzo della libreria FLAC o dell'estrattore FLAC nella libreria ExoPlayer***
AMR Ricercabile solo tramite ricerca a bitrate costante**

* La ricerca non è supportata perché il contenitore non fornisce metadati (ad esempio, un indice di esempio) per consentire a un lettore multimediale di eseguire una ricerca in modo efficiente. Se è necessaria la ricerca, ti consigliamo di utilizzare un formato contenitore più appropriato.

** Questi estrattori hanno flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING per l'attivazione della ricerca approssimativa utilizzando un'ipotesi di bitrate costante. Questa funzionalità non è attivata per impostazione predefinita. Il modo più semplice per attivare questa funzionalità per tutti gli estrattori che la supportano è utilizzare DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, come descritto qui.

*** L'estrattore della libreria FLAC restituisce l'audio non elaborato, che può essere gestito dal framework a tutti i livelli API. L'estrattore FLAC della libreria ExoPlayer genera frame audio FLAC e si basa quindi su un decoder FLAC (ad esempio, un decoder MediaCodec che gestisce FLAC (obbligatorio dal livello API 27) o la libreria FFmpeg con FLAC abilitato). DefaultExtractorsFactory utilizza l'estrattore di estensioni se l'applicazione è stata creata con la libreria FLAC. In caso contrario, utilizza l'estrattore della libreria ExoPlayer.

Utilizzo di MediaItem

Per riprodurre uno stream progressivo, crea un MediaItem con l'URI dei contenuti multimediali e passalo al lettore.

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();

Utilizzo di ProgressiveMediaSource

Per ulteriori opzioni di personalizzazione, puoi creare un ProgressiveMediaSource e passarlo direttamente al player anziché 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();

Personalizzare la riproduzione

ExoPlayer offre diversi modi per personalizzare l'esperienza di riproduzione in base alle esigenze della tua app. Per esempi, consulta la pagina Personalizzazione.