Per i casi d'uso semplici, per iniziare a utilizzare ExoPlayer devi implementare i seguenti passaggi:
- Aggiungi ExoPlayer come dipendenza al tuo progetto.
- Crea un'istanza di
ExoPlayer. - Collega il player a una visualizzazione (per l'output video e l'input utente).
- Prepara il player con un
MediaItemda riprodurre. - Rilascia il player al termine.
Questi passaggi sono descritti in modo più dettagliato di seguito. Per un esempio completo, consulta
PlayerActivity nell'app demo principale.
Aggiungere ExoPlayer come dipendenza
Aggiungere i 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 per la riproduzione DASH e i componenti UI, puoi aggiungere dipendenze ai moduli come segue:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.9.3")
implementation("androidx.media3:media3-exoplayer-dash:1.9.3")
implementation("androidx.media3:media3-ui:1.9.3")
implementation("androidx.media3:media3-ui-compose:1.9.3")
Groovy
implementation "androidx.media3:media3-exoplayer:1.9.3"
implementation "androidx.media3:media3-exoplayer-dash:1.9.3"
implementation "androidx.media3:media3-ui:1.9.3"
implementation("androidx.media3:media3-ui-compose:1.9.3")
dove 1.9.3 è la versione che preferisci (l'ultima versione è disponibile consultando le note di rilascio). Tutti i moduli devono avere la stessa versione.
AndroidX Media3 ha 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.
Ulteriori informazioni sui moduli di libreria disponibili sono disponibili nella pagina Google Maven AndroidX Media.
Attivare il supporto di Java 8
Se non è già attivo, 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 sui thread
È necessario accedere alle istanze di ExoPlayer da un singolo thread dell'applicazione. Nella maggior parte dei casi, questo dovrebbe essere il thread principale dell'applicazione. L'utilizzo del 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 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 player oppure, se il thread non ha un Looper, viene utilizzato il Looper del thread principale dell'applicazione. In tutti i casi, il Looper del thread da
cui è necessario accedere al player può essere eseguito utilizzando
Player.getApplicationLooper.
Per ulteriori informazioni sul modello di threading di ExoPlayer, consulta la "Threading model" sezione della documentazione Javadoc di ExoPlayer.
Collegare il player a una visualizzazione
La libreria ExoPlayer fornisce una serie di componenti UI predefiniti per la riproduzione di 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 del 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 UI predefiniti di ExoPlayer è facoltativo. Per le app video che
implementano la propria UI, è possibile impostare SurfaceView, TextureView, SurfaceHolder
o Surface di destinazione utilizzando rispettivamente i metodi setVideoSurfaceView,
setVideoTextureView, setVideoSurfaceHolder e setVideoSurface di ExoPlayer. Il callback Listener.onCues può essere utilizzato per ricevere le didascalie da eseguire durante la riproduzione e setImageOutput può essere utilizzato per ricevere le immagini decodificate.
Per un'esperienza utente più confortevole, valuta la possibilità di aggiungere l'attributo keepScreenOn. Puoi esaminare altre azioni che mantengono attivo il dispositivo nelle
pagine relative al lavoro in background.
android:keepScreenOn="true"
Scopri di più sull'utilizzo dei componenti UI di Media3 e sulla loro personalizzazione nella pagina UI.
Popolare la playlist e preparare il 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 player. Scopri di più su come popolare e manipolare la playlist nella pagina Playlist. Scopri di più sulle diverse opzioni disponibili quando crei elementi multimediali, come il ritaglio e l'allegato di file di sottotitoli, nella pagina degli elementi multimediali.
Controllare il player
Una volta preparato il player, la riproduzione può essere controllata chiamando i metodi del player. Di seguito sono riportati alcuni dei metodi di uso comune:
playepauseavviano e mettono in pausa la riproduzione.seekToconsente di cercare all'interno dei contenuti multimediali.hasPrevious,hasNext,previousenextconsentono di navigare nella playlist.setRepeatModecontrolla se e come i contenuti multimediali vengono riprodotti in loop.setShuffleModeEnabledcontrolla la riproduzione casuale della playlist.setPlaybackParametersregola la velocità di riproduzione e l'intonazione dell'audio.
Se il player è associato a un PlayerView o PlayerControlView, l'interazione dell'utente con questi componenti causerà la chiamata dei metodi corrispondenti sul player.
Rilasciare 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, chiama ExoPlayer.release.