Per casi d'uso semplici, per iniziare a utilizzare ExoPlayer
è necessario implementare
i seguenti passaggi:
- Aggiungi ExoPlayer come dipendenza al progetto.
- Crea un'istanza
ExoPlayer
. - Collega il player a una visualizzazione (per l'output video e l'input dell'utente).
- Prepara il giocatore con un
MediaItem
per poter giocare. - 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 Gradle sulle librerie necessarie 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 ai moduli come segue:
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")
Alla moda
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 1.3.1 è la tua versione preferita (la versione più recente è reperibile consultando le note di rilascio). Tutti i moduli devono essere della stessa versione.
AndroidX Media3 ha moduli di libreria 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 i dettagli.
Per ulteriori informazioni sui moduli della libreria 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 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 build.
Crea il player
Puoi creare un'istanza ExoPlayer
utilizzando ExoPlayer.Builder
, che offre una gamma di opzioni di personalizzazione. Il codice riportato di seguito è 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 sui 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 è un requisito quando utilizzi i componenti UI di ExoPlayer o l'estensione IMA.
Il thread su cui è necessario accedere a un'istanza ExoPlayer può essere specificato in modo esplicito
trasmettendo un Looper
durante la creazione del player. Se non viene specificato alcun Looper
, viene utilizzato il Looper
del thread su cui è creato il player oppure, se il thread non ha un Looper
, viene utilizzato il Looper
del thread principale dell'applicazione. In tutti i casi, è possibile eseguire una query su Looper
del thread
da cui è necessario accedere al player utilizzando
Player.getApplicationLooper
.
Per ulteriori informazioni sul modello di thread di ExoPlayer, consulta la sezione "Threading model" (Modello di thread) del ExoPlayer Javadoc.
Collegare il player a una visualizzazione
La libreria ExoPlayer fornisce una serie di componenti UI predefiniti per la riproduzione di contenuti multimediali. Sono inclusi PlayerView
, che contiene PlayerControlView
, SubtitleView
e Surface
su cui viene eseguito il rendering del video. È 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, 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, è possibile impostare i valori di destinazione SurfaceView
, TextureView
, SurfaceHolder
o Surface
utilizzando rispettivamente i metodi setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
e setVideoSurface
di ExoPlayer. Il metodo addTextOutput
di ExoPlayer può
essere utilizzato per ricevere sottotitoli 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
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 nuovamente il player. Scopri di più su come compilare e modificare la playlist nella pagina Playlist. Scopri di più sulle diverse opzioni disponibili per la creazione di elementi multimediali, ad esempio il ritaglio e l'aggiunta di file di sottotitoli, nella 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
epause
avviano e mettono in pausa la riproduzione.seekTo
consente la ricerca all'interno dei contenuti multimediali.hasPrevious
,hasNext
,previous
enext
consentono di spostarsi nella 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 player è associato a un PlayerView
o PlayerControlView
,
l'interazione dell'utente con questi componenti determina 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, per l'utilizzo da parte di altre applicazioni. Per farlo,
puoi farlo chiamando ExoPlayer.release
.