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 all'altro, la riproduzione inizia più velocemente perché il gestore ha già caricato parte dei contenuti.
Questa pagina tratta i seguenti argomenti:
- Aggiungere elementi multimediali al gestore precaricamento
- Invalidare le priorità nel gestore del precaricamento
- Recuperare e riprodurre contenuti multimediali
- Rimuovere elementi da Gestore precaricamento
- Rilasciare il gestore del precaricamento quando hai finito di utilizzarlo
Aggiungere elementi multimediali a Gestione precaricamento
Devi comunicare al gestore del precaricamento ogni elemento multimediale che verrà monitorato. Ad esempio, se la tua app ha un carosello di video, devi aggiungerli a preload manager. A seconda del caso d'uso, puoi 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.
L'aggiunta degli elementi multimediali non fa sì che il gestore del precaricamento inizi a caricare i contenuti. Per attivare il precaricamento, devi invalidare le priorità in Gestione precaricamento.
val initialMediaItems = pullMediaItemsFromService(/* count= */ 20);
for (index in 0 until initialMediaItems.size) {
preloadManager.add(initialMediaItems.get(index), /* rankingData= */ index)
}
// items aren't actually loaded yet! need to call invalidate() after this
Punti chiave del codice
- Questo snippet mostra come popolare inizialmente il gestore del precaricamento dopo
averlo creato. Puoi anche chiamare il numero
add()
per aggiungere elementi a un preload manager esistente e compilato. - 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 fino a 20 elementi. preloadManager
è ilDefaultPreloadManager
creato in Crea unDefaultPreloadManager
. Il codice chiama il metodoadd()
del gestore per aggiungere ogni elemento nel carosello.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 in riproduzione.
Invalidare le priorità nel gestore del precaricamento
Per attivare la gestione del precaricamento e avviare il precaricamento dei contenuti, devi chiamare
invalidate()
per comunicare alla gestione del precaricamento che le priorità degli elementi non sono
aggiornate. Devi farlo nelle seguenti situazioni:
- Quando aggiungi o rimuovi nuovi elementi multimediali nel Gestore precaricamento.
Se aggiungi o rimuovi più elementi, devi aggiungerli tutti,
poi chiama
invalidate()
. - Quando l'utente passa da un elemento multimediale a un altro. In questo caso, devi assicurarti di aggiornare l'indice di riproduzione corrente prima di chiamare
invalidate()
, come descritto in Recuperare e riprodurre contenuti.
Quando invalidi il gestore del precaricamento, chiama la
TargetPreloadStatusControl
che hai creato per scoprire la quantità di contenuti
da caricare da ogni elemento. Carica quindi i contenuti di ogni elemento
in ordine di priorità, da quella più alta a quella più bassa.
preloadManager.invalidate()
Punti chiave del codice
- La chiamata di
invalidate()
attiva il gestore del precaricamento per rivalutare la priorità di ogni elemento multimediale che conosce. Per questo motivo, se stai apportando molte modifiche a Gestione precaricamento, devi completarle prima di chiamareinvalidate()
.
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 contenuti, la riproduzione è più veloce rispetto a quanto sarebbe stata se non avessi utilizzato il gestore del precaricamento. Se il gestore del precaricamento non ha ancora caricato i contenuti dell'elemento, questi vengono riprodotti normalmente.
// When a media item is about to display on the screen
val mediaSource = preloadManager.getMediaSource(mediaItem)
if (mediaSource != null) {
player.setMediaSource(mediaSource)
}
player.prepare()
// When the media item is displaying at the center of the screen
player.play()
preloadManager.setCurrentPlayingIndex(currentIndex)
// Need to call invalidate() to update the priorities
preloadManager.invalidate()
Punti chiave del codice
player
è Media3ExoPlayer
che l'app utilizza per riprodurre i contenuti. Devi creare il player chiamandoDefaultPreloadManager.Builder.buildExoPlayer()
nello 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 ottenere l'origine multimediale dal gestore del precaricamento. Deve essere unmediaItem
che hai già aggiunto a Gestione precaricamento. Va bene se il gestore del precaricamento non ha ancora iniziato a caricare i contenuti; in questo caso, restituisce unMediaSource
che non contiene dati precaricati. Ad esempio, questo potrebbe accadere se l'utente avanza improvvisamente di molto nel carosello. - Dopo che l'utente ha riprodotto il nuovo elemento multimediale, chiama
setCurrentPlayingIndex
per comunicare 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. Dopo aver aggiornato l'indice corrente, chiamainvalidate()
per fare in modo che il gestore del precaricamento determini nuovamente la priorità per ogni elemento.
Rimuovere elementi da Gestore precaricamento
Per mantenere efficiente il gestore del precaricamento, devi rimuovere gli elementi che non devono più essere monitorati. Potresti anche rimuovere gli elementi ancora presenti nel carosello, ma lontani dalla posizione attuale dell'utente. Ad esempio, potresti decidere che se un elemento dista più di 15 elementi da quello che l'utente sta guardando, non è necessario precaricarlo. In questo caso, rimuoveresti gli elementi quando si allontanano troppo. Se l'utente torna a interessarsi agli elementi rimossi, puoi sempre aggiungerli di nuovo.
preloadManager.remove(mediaItem)
Punti chiave del 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, devi aggiungere nuovi elementi al gestore del precaricamento e poi invalidare le priorità nel gestore del precaricamento.
Rilascia il gestore del precaricamento quando hai finito
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 distrutta.
preloadManager.release()
Punti chiave del codice
- Non devi chiamare nessuno dei metodi dell'oggetto dopo averlo rilasciato.
- Se devi creare un altro gestore del precaricamento, crea un nuovo
DefaultPreloadManager.Builder
e utilizzalo per creare ilDefaultPreloadManager
. Non tentare di riutilizzare il vecchio generatore.