Per iniziare

Per casi d'uso semplici, per iniziare a utilizzare ExoPlayer è necessario implementare segui questi passaggi:

  1. Aggiungi ExoPlayer come dipendenza al progetto.
  2. Crea un'istanza ExoPlayer.
  3. Collega il player a una visualizzazione (per l'output video e l'input dell'utente).
  4. Prepara il giocatore con un MediaItem per poter 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 Gradle alle librerie necessarie nel file build.gradle della tua app in maggior dettaglio più avanti in questo modulo.

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

Kotlin

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

Alla moda

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

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

AndroidX Media3 ha moduli libreria che dipendono librerie esterne per fornire funzionalità aggiuntive. Alcuni sono disponibili nel Repository Maven, mentre altri devono essere creati manualmente. Sfoglia la directory delle librerie e visualizza i singoli file README per i dettagli.

Per ulteriori informazioni sui moduli della biblioteca disponibili, visita la Pagina Google Maven AndroidX Media.

Attiva il supporto Java 8

Se non è già abilitato, devi attivare il supporto Java 8 in tutti i build.gradle file 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, dovresti attiva multidex in ordine per evitare errori di build.

Crea il player

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

Kotlin

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

Java

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

Nota sui thread

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

Il thread su cui è necessario accedere a un'istanza ExoPlayer può essere specificato passando un valore Looper durante la creazione del player. Se Looper non è specificato, il valore Looper del thread su cui è stato creato il player o, se il thread non ha un Looper, il Looper del il thread principale dell'applicazione. In tutti i casi, il Looper del thread da a cui è necessario accedere al player. Player.getApplicationLooper.

Per ulteriori informazioni sul modello di thread di ExoPlayer, vedi "Modello di thread" del Javadoc ExoPlayer.

Collegare il player a una visualizzazione

La libreria ExoPlayer fornisce una serie di componenti UI predefiniti per i contenuti multimediali la riproduzione. Questi includono PlayerView, che incapsula una PlayerControlView, SubtitleView e Surface su cui viene visualizzato il video eseguire il rendering. È possibile includere un elemento PlayerView nel file XML di layout dell'applicazione. Ad esempio, per associare il player alla vista:

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, ovvero utile per i casi d'uso solo audio.

L'uso dei componenti predefiniti dell'interfaccia utente di ExoPlayer è facoltativo. Per le app video che implementano la propria UI, ovvero SurfaceView, TextureView, È possibile impostare SurfaceHolder o Surface utilizzando l'interfaccia utente di ExoPlayer setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder e setVideoSurface rispettivamente. Il metodo addTextOutput di ExoPlayer può per ricevere sottotitoli codificati da eseguire durante la riproduzione.

Compilare la playlist e preparare il player.

In ExoPlayer, ogni elemento multimediale è rappresentato da un elemento MediaItem. Per riprodurre un devi creare un oggetto MediaItem corrispondente, aggiungerlo al prepara il player e chiama 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 il di nuovo. Scopri di più su come compilare e gestire la playlist nel Pagina Playlist. Scopri di più sulle diverse opzioni disponibili quando creando elementi multimediali, come tagliare e allegare file di sottotitoli, sulla Pagina Elementi multimediali.

Controllare il player

Una volta preparato il player, la riproduzione può essere controllata chiamando metodi sul player. Ecco alcuni dei metodi più comuni:

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

Se il giocatore è vincolato a un PlayerView o PlayerControlView, l'interazione dell'utente con questi componenti determina i metodi corrispondenti su il player da richiamare.

Rilascia il player

È importante rilasciare il player quando non è più necessario, in modo da liberare risorse limitate, come i decoder video, per l'uso da parte di altre applicazioni. Questo può essere fatto chiamando ExoPlayer.release.