Per i casi d'uso semplici, iniziare a utilizzare ExoPlayer
consiste nell'implementare
i seguenti passaggi:
- Aggiungi ExoPlayer come dipendenza al tuo 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
da riprodurre. - Rilascia il lettore al termine dell'operazione.
Questi passaggi sono descritti in dettaglio di seguito. Per un esempio completo, consulta
PlayerActivity
nell'app demo principale.
Aggiungere ExoPlayer come dipendenza
Aggiungere moduli ExoPlayer
Il modo più semplice per iniziare a utilizzare AndroidX Media3 è aggiungere le dipendenze gradle
alle librerie di cui hai bisogno nel file build.gradle
del modulo
dell'app.
Ad esempio, per dipendere da ExoPlayer con il supporto della riproduzione DASH e dei componenti UI, puoi aggiungere dipendenze dai moduli nel seguente modo:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.7.1") implementation("androidx.media3:media3-exoplayer-dash:1.7.1") implementation("androidx.media3:media3-ui:1.7.1") implementation("androidx.media3:media3-ui-compose:1.7.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.7.1" implementation "androidx.media3:media3-exoplayer-dash:1.7.1" implementation "androidx.media3:media3-ui:1.7.1" implementation("androidx.media3:media3-ui-compose:1.7.1")
dove 1.7.1 è la tua versione preferita (la versione più recente è disponibile nelle note di rilascio). Tutti i moduli devono essere della stessa versione.
AndroidX Media3 dispone di moduli di libreria che dipendono da librerie esterne per fornire funzionalità aggiuntive. Alcuni sono disponibili nel repository Maven, mentre altri devono essere creati manualmente. Sfoglia la directory delle librerie e consulta i singoli file README per i dettagli.
Per ulteriori informazioni sui moduli della libreria disponibili, visita la pagina Google Maven AndroidX Media.
Attivare il supporto di Java 8
Se non è già abilitato, devi attivare almeno il supporto di Java 8 in tutti i file build.gradle
che dipendono da ExoPlayer aggiungendo quanto segue alla sezione android
:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Creare il player
Puoi creare un'istanza ExoPlayer
utilizzando ExoPlayer.Builder
, che offre
una serie di opzioni di personalizzazione. Il seguente codice è l'esempio più semplice di
creazione di un'istanza.
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Una nota sull'organizzazione in thread
È necessario accedere alle istanze di ExoPlayer da un singolo thread dell'applicazione. Nella stragrande maggioranza dei casi, questo 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 deve essere eseguito l'accesso a un'istanza di ExoPlayer può essere specificato
in modo esplicito passando un Looper
durante la creazione del player. Se non viene specificato alcun Looper
, viene utilizzato il Looper
del thread su cui viene creato il lettore oppure, se il thread non ha un Looper
, viene utilizzato il Looper
del thread principale dell'applicazione. In tutti i casi, l'Looper
del thread da cui deve essere eseguito l'accesso al giocatore può essere interrogato utilizzando Player.getApplicationLooper
.
Per ulteriori informazioni sul modello di threading di ExoPlayer, consulta la sezione "Threading model" della documentazione Javadoc di ExoPlayer.
Collegare il player a una visualizzazione
La libreria ExoPlayer fornisce una gamma di componenti UI predefiniti per la riproduzione
multimediale. Questi includono PlayerView
, che contiene un
PlayerControlView
, un SubtitleView
e un Surface
su cui viene
renderizzato il video. Un PlayerView
può essere incluso 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);
L'utilizzo dei componenti dell'interfaccia utente predefiniti di ExoPlayer è facoltativo. Per le app video che
implementano la propria UI, la destinazione SurfaceView
, TextureView
, SurfaceHolder
o Surface
può essere impostata utilizzando i metodi setVideoSurfaceView
,
setVideoTextureView
, setVideoSurfaceHolder
e setVideoSurface
di ExoPlayer
rispettivamente. Il callback Listener.onCues
può essere utilizzato per ricevere i sottotitoli codificati
che devono essere visualizzati durante la riproduzione, mentre setImageOutput
può essere utilizzato per
ricevere le immagini decodificate.
Per un'esperienza utente più confortevole, valuta la possibilità di aggiungere l'attributo keepScreenOn
o di impostare il blocco di riattivazione su ExoPlayer. Puoi esaminare altre azioni
che mantengono attivo il dispositivo nelle pagine di lavoro in background.
android:keepScreenOn="true"
Scopri di più sull'utilizzo dei componenti UI di Media3 e sulla loro personalizzazione nella pagina UI.
Popolamento della playlist e preparazione del player
In ExoPlayer, ogni contenuto multimediale è rappresentato da un MediaItem
. Per riprodurre un
contenuto multimediale, devi creare un 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 lettore. Scopri di più su come compilare e manipolare la playlist nella pagina Playlist. Scopri di più sulle diverse opzioni disponibili durante la creazione di elementi multimediali, ad esempio il ritaglio e l'allegato di file di sottotitoli codificati, nella pagina Elementi multimediali.
Controllare il player
Una volta preparato il player, la riproduzione può essere controllata chiamando i metodi sul player. Di seguito sono riportati alcuni dei metodi più utilizzati:
play
epause
avviano e mettono in pausa la riproduzione.seekTo
consente di cercare all'interno dei contenuti multimediali.hasPrevious
,hasNext
,previous
enext
consentono di navigare nella playlist.setRepeatMode
controlla se e come vengono riprodotti in loop i contenuti multimediali.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 a un PlayerControlView
,
l'interazione dell'utente con questi componenti causerà l'invocazione dei metodi corrispondenti sul player.
Rilasciare il giocatore
È 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. Puoi farlo chiamando il numero ExoPlayer.release
.