Iniziamo

Per casi d'uso semplici, iniziare a utilizzare ExoPlayer consiste nell'implementazione dei seguenti passaggi:

  1. Aggiungi ExoPlayer come dipendenza al progetto.
  2. Creare un'istanza ExoPlayer.
  3. Collega il player a una visualizzazione (per l'output video e l'input utente).
  4. Prepara il player con un MediaItem da giocare.
  5. Al termine, rilascia il player.

Questi passaggi sono descritti più dettagliatamente di seguito. Per un esempio completo, consulta PlayerActivity nell'app demo principale.

Aggiungi ExoPlayer come dipendenza

Aggiungi moduli ExoPlayer

Il modo più semplice per iniziare a utilizzare AndroidX Media3 è aggiungere dipendenze graduali alle librerie che ti servono nel file build.gradle del modulo dell'app.

Ad esempio, per dipendere da ExoPlayer con supporto per la riproduzione DASH e da componenti UI puoi aggiungere dipendenze sui moduli in questo modo:

Kotlin

implementation("androidx.media3:media3-exoplayer:1.3.1")
implementation("androidx.media3:media3-exoplayer-dash:1.3.1")
implementation("androidx.media3:media3-ui:1.3.1")

trendy

implementation "androidx.media3:media3-exoplayer:1.3.1"
implementation "androidx.media3:media3-exoplayer-dash:1.3.1"
implementation "androidx.media3:media3-ui:1.3.1"

dove la versione 1.3.1 è la tua versione preferita (la versione più recente può essere trovata consultando le note di rilascio). Tutti i moduli devono avere la stessa versione.

AndroidX Media3 ha moduli delle librerie che dipendono da librerie esterne per fornire funzionalità aggiuntive. Alcune sono disponibili nel Repository Maven, mentre altre devono essere create manualmente. Sfoglia la directory delle librerie e visualizza i singoli file README per maggiori dettagli.

Per ulteriori informazioni sui moduli delle librerie disponibili, consulta la pagina dei contenuti multimediali di Google Maven AndroidX.

Attivare il supporto Java 8

Se non è già abilitato, devi attivare il supporto Java 8 in tutti i file build.gradle che dipendono da ExoPlayer, aggiungendo quanto segue alla sezione android:

compileOptions {
  targetCompatibility JavaVersion.VERSION_1_8
}

Abilita multidex

Se il valore di Gradle minSdkVersion è 20 o inferiore, devi abilitare il multidex per evitare errori di compilazione.

Crea il player

Puoi creare un'istanza ExoPlayer utilizzando ExoPlayer.Builder, che offre una serie di opzioni di personalizzazione. Il codice seguente è l'esempio più semplice di creazione di un'istanza.

Kotlin

val player = ExoPlayer.Builder(context).build()

Java

ExoPlayer player = new ExoPlayer.Builder(context).build();

Nota sull'organizzazione in thread

È necessario accedere alle istanze ExoPlayer da un singolo thread di applicazione. Nella maggior parte dei casi, dovrebbe essere il thread principale dell'applicazione. L'utilizzo del thread principale dell'applicazione è obbligatorio se si usano i componenti UI di ExoPlayer o l'estensione IMA.

Il thread su cui deve accedere un'istanza ExoPlayer può essere specificato esplicitamente passando un Looper durante la creazione del player. Se non viene specificato alcun Looper, viene utilizzato il valore Looper del thread su cui viene creato il player oppure, se il thread non ha un Looper, viene utilizzato il valore Looper del thread principale dell'applicazione. In ogni caso, è possibile eseguire una query sul Looper del thread da cui deve accedere il player utilizzando Player.getApplicationLooper.

Per ulteriori informazioni sul modello di threading di ExoPlayer, consulta la sezione "Modello di thread" di ExoPlayer Javadoc.

Collegare il player a una visualizzazione

La libreria ExoPlayer fornisce una gamma di componenti predefiniti dell'interfaccia utente per la riproduzione dei contenuti multimediali. Questi includono PlayerView, che incapsula un PlayerControlView, un SubtitleView e un Surface su cui viene eseguito il rendering del video. È possibile includere un PlayerView nel file XML di layout dell'applicazione. Ad esempio, per associare il player alla visualizzazione:

Kotlin

// Bind the player to the view.
playerView.player = player

Java

// Bind the player to the view.
playerView.setPlayer(player);

Puoi anche utilizzare PlayerControlView come componente autonomo, utile per i casi d'uso solo audio.

L'utilizzo dei componenti predefiniti dell'interfaccia utente di ExoPlayer è facoltativo. Per le app video che implementano la propria UI, il target SurfaceView, TextureView, SurfaceHolder o Surface può essere impostato utilizzando rispettivamente i metodi setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder e setVideoSurface di ExoPlayer. Il metodo addTextOutput di ExoPlayer può essere utilizzato per ricevere sottotitoli codificati che devono essere visualizzati durante la riproduzione.

Compilare la playlist e preparare il player

In ExoPlayer, ogni elemento multimediale è rappresentato da un MediaItem. Per riprodurre un elemento multimediale, devi creare un elemento MediaItem corrispondente, aggiungerlo al player, preparare il player e chiamare play per avviare la riproduzione:

Kotlin

// Build the media item.
val mediaItem = MediaItem.fromUri(videoUri)
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media item.
MediaItem mediaItem = MediaItem.fromUri(videoUri);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

ExoPlayer supporta direttamente le playlist, quindi è possibile preparare il player con più elementi multimediali da riprodurre uno dopo l'altro.

Kotlin

// Build the media items.
val firstItem = MediaItem.fromUri(firstVideoUri)
val secondItem = MediaItem.fromUri(secondVideoUri)
// Add the media items to be played.
player.addMediaItem(firstItem)
player.addMediaItem(secondItem)
// Prepare the player.
player.prepare()
// Start the playback.
player.play()

Java

// Build the media items.
MediaItem firstItem = MediaItem.fromUri(firstVideoUri);
MediaItem secondItem = MediaItem.fromUri(secondVideoUri);
// Add the media items to be played.
player.addMediaItem(firstItem);
player.addMediaItem(secondItem);
// Prepare the player.
player.prepare();
// Start the playback.
player.play();

La playlist può essere aggiornata durante la riproduzione senza dover preparare di nuovo il player. Scopri di più su come completare e manipolare la playlist nella pagina Playlist. Per ulteriori informazioni sulle diverse opzioni disponibili durante la creazione di elementi multimediali, come tagliare e allegare file di sottotitoli, consulta la pagina Elementi multimediali.

Controllare il player

Una volta preparato il player, la riproduzione può essere controllata richiamando i metodi sul player. Di seguito sono riportati alcuni dei metodi più comunemente utilizzati:

  • play e pause avviano e mettono in pausa la riproduzione.
  • seekTo consente di cercare all'interno dei contenuti multimediali.
  • hasPrevious, hasNext, previous e next consentono di spostarsi nella playlist.
  • setRepeatMode consente di stabilire se e come i contenuti multimediali vengono riprodotti in loop.
  • setShuffleModeEnabled controlla la riproduzione casuale della playlist.
  • setPlaybackParameters regola la velocità di riproduzione e il tono dell'audio.

Se il player è associato a un elemento PlayerView o PlayerControlView, l'interazione dell'utente con questi componenti provocherà la chiamata dei metodi corrispondenti sul player.

Rilascia il player

È importante rilasciare il player quando non è più necessario, in modo da liberare risorse limitate, come i decoder video, da utilizzare per altre applicazioni. Per farlo, chiama il numero ExoPlayer.release.