Questa pagina descrive come utilizzare un gestore del precaricamento per gestire i contenuti video. Utilizzando un gestore del precaricamento, puoi offrire all'utente un'esperienza migliore: quando l'utente passa da un elemento multimediale a un altro, la riproduzione inizia più velocemente perché il gestore ha già caricato alcuni dei contenuti.
Questa pagina tratta i seguenti argomenti:
- Aggiungere elementi multimediali al gestore del precaricamento
- Recuperare e riprodurre contenuti multimediali
- Rimuovere elementi dal gestore del precaricamento
- Rilasciare il gestore del precaricamento quando hai finito di utilizzarlo
Aggiungere elementi multimediali al gestore del precaricamento
Devi comunicare al gestore del precaricamento ogni elemento multimediale da monitorare. Ad esempio, se la tua app ha un carosello di video, devi aggiungerli al gestore del precaricamento. A seconda del caso d'uso, potresti aggiungere tutti i video o solo quelli vicini al video attualmente in riproduzione. Puoi anche aggiungere nuovi elementi al gestore del precaricamento in un secondo momento.
Per farlo, utilizza un metodo di aggiunta batch come addMediaItems. In alternativa, puoi chiamare add (o
addMediaSource) per aggiungere gli elementi multimediali singolarmente. Tuttavia, l'aggiunta di elementi multimediali singolarmente non attiva automaticamente il precaricamento. Quando utilizzi i metodi individuali, devi chiamare esplicitamente invalidate una volta terminata l'aggiunta degli elementi
per indicare al gestore del precaricamento di aggiornare le priorità e avviare il precaricamento.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
Punti chiave sul codice
- Questo snippet mostra come popolare inizialmente il gestore del precaricamento in modalità batch dopo averlo creato. Puoi chiamare
addMediaItemsper aggiungere elementi a un gestore del precaricamento esistente e popolato. - In questo snippet,
pullMediaItemsFromService()è la logica dell'app per recuperare l'elenco dei contenuti da riprodurre. Il codice chiama questo metodo per recuperare un elenco di massimo 20 elementi. preloadManagerè ilDefaultPreloadManagercreato in Creare unDefaultPreloadManager.rankingDataè un valore utilizzato dal gestore del precaricamento per determinare la priorità di ogni elemento multimediale. PerDefaultPreloadManager,rankingDataè un numero intero che rappresenta la posizione dell'elemento nel carosello. Il gestore del precaricamento determina la priorità in base alla distanza di ogni elemento dall'elemento attualmente in riproduzione.
Recuperare e riprodurre contenuti multimediali
Quando l'utente passa a un nuovo elemento multimediale, devi recuperarlo dal gestore del precaricamento. Se il gestore del precaricamento ha caricato alcuni dei contenuti, questi vengono riprodotti più velocemente rispetto a quanto sarebbe accaduto se non avessi utilizzato il gestore del precaricamento. Se il gestore del precaricamento non ha ancora caricato i contenuti di questo elemento, questi vengono riprodotti normalmente.
Devi anche aggiornare l'indice di riproduzione corrente nel gestore del precaricamento chiamando setCurrentPlayingIndex, che consente al gestore del precaricamento di determinare le priorità delle future operazioni di precaricamento.
// When a media item is about to be displayed on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If the mediaSource is null, its mediaItem hasn't been added to the preload // manager yet. Send it directly to the player when it's about to play. player.setMediaItem(mediaItem) } player.prepare() // When the media item is being displayed at the center of the screen ("in focus") player.play() // Update the current playing index to let the preload manager know where the user // is in the carousel/pagination/list. preloadManager.setCurrentPlayingIndex(currentIndex)
Punti chiave sul codice
playerè l'ExoPlayerMedia3 che l'app utilizza per riprodurre i contenuti. Devi creare questo player chiamandoDefaultPreloadManager.Builder.buildExoPlayer()sullo stesso builder che hai utilizzato per creare il gestore del precaricamento.- Quando l'utente passa a un nuovo elemento multimediale, l'app chiama
getMediaSource()per recuperare l'origine multimediale dal gestore del precaricamento. Deve trattarsi di unmediaItemche hai già aggiunto al gestore del precaricamento. Non è un problema se il gestore del precaricamento non ha ancora iniziato a caricare i contenuti; in questo caso, restituisce unMediaSourceche non contiene dati precaricati. Ad esempio, questo potrebbe accadere se l'utente salta improvvisamente molto avanti nel carosello. - Dopo che l'utente ha riprodotto il nuovo elemento multimediale, chiama
setCurrentPlayingIndexper indicare al gestore del precaricamento la posizione del nuovo elemento nel carosello. Il gestore del precaricamento ha bisogno di queste informazioni per dare la priorità al caricamento dell'elemento successivo.
Rimuovere elementi dal gestore del precaricamento
Per mantenere efficiente il gestore del precaricamento, devi rimuovere gli elementi che non deve più monitorare. Potresti anche rimuovere gli elementi ancora presenti nel carosello, ma lontani dalla posizione attuale dell'utente. Ad esempio, potresti decidere che se un elemento è a più di 15 elementi di distanza da quello che l'utente sta guardando, non è necessario precaricarlo. In questo caso, rimuovi gli elementi quando si trovano a questa distanza. Se l'utente torna verso gli elementi rimossi, puoi sempre aggiungerli di nuovo.
Se hai un elenco di elementi multimediali da rimuovere, puoi utilizzare
removeMediaItems. In alternativa, puoi
chiamare remove (o removeMediaSource) per rimuovere gli elementi multimediali
singolarmente.
preloadManager.removeMediaItems(mediaItemsToRemove)
Punti chiave sul codice
- Se vuoi rimuovere tutti gli elementi dal gestore del precaricamento, puoi chiamare
reset()anzichéremove(). Questo approccio è utile se devi modificare tutti gli elementi del carosello. In questo caso, dopo aver rimosso gli elementi, dovrai aggiungerne di nuovi al gestore del precaricamento.
Rilasciare il gestore del precaricamento quando hai finito di utilizzarlo
Quando non hai più bisogno del gestore del precaricamento, devi rilasciarlo per liberare le sue risorse. In particolare, assicurati di rilasciarlo quando la tua attività viene eliminata.
preloadManager.release()
Punti chiave sul codice
- Non devi chiamare nessuno dei metodi dell'oggetto dopo averlo rilasciato.
- Se devi creare un altro gestore del precaricamento, crea un nuovo
DefaultPreloadManager.Buildere utilizzalo per creare ilDefaultPreloadManager. Non provare a riutilizzare il vecchio builder.