Progressiva

Gli stream nei seguenti formati contenitore possono essere riprodotti direttamente da ExoPlayer. Devono essere supportati anche i formati di esempio audio e video contenuti (per informazioni dettagliate, consulta la sezione Formati di esempio).

Formato contenitore Prove di supporto Commenti
MP4
M4A
FMP4
WebM
Matroska
MP3 Alcuni stream sono ricercabili solo utilizzando la ricerca a velocità in bit costante**
Ogg Contiene Vorbis, Opus e FLAC
WAV
MPEG-TS
MPEG-PS
FLV Non ricercabile*
ADTS (AAC) Ricercabile solo utilizzando la ricerca a velocità in bit costante**
FLAC Utilizzando la libreria FLAC o l'estrattore FLAC nella libreria ExoPlayer***
AMR Ricercabile solo utilizzando la ricerca a velocità in bit costante**
Foto in movimento JPEG Vengono estratti solo i contenuti MP4

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

** Questi estrattori hanno flag FLAG_ENABLE_CONSTANT_BITRATE_SEEKING per consentire la ricerca approssimativa basata sull'ipotesi di una velocità in bit costante. Questa funzionalità non è abilitata per impostazione predefinita. Il modo più semplice per abilitare questa funzionalità per tutti gli estrattori che la supportano è utilizzare DefaultExtractorsFactory.setConstantBitrateSeekingEnabled, come descritto qui.

*** L'estrattore della libreriaFLAC restituisce audio non elaborato, che può essere gestito dal framework a tutti i livelli API. L'estrattore FLAC della libreria ExoPlayer restituisce frame audio FLAC, quindi si basa sull'avere un decodificatore FLAC (ad esempio, un decodificatore MediaCodec che gestisce FLAC (richiesto dal livello API 27) o la libreria FFmpeg con FLAC abilitato). DefaultExtractorsFactory utilizza l'estrattore dell'estensione se l'applicazione è stata creata con la libreria FLAC. In caso contrario, utilizza l'estrattore ExoPlayer Library.

Utilizzo di MediaItem

Per riprodurre uno stream progressivo, crea un elemento MediaItem con l'URI multimediale e passalo al player.

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

Personalizzazione della riproduzione

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