En esta página, se describe cómo usar un administrador de precarga para administrar contenido de video. Si usas un administrador de precarga, puedes brindar al usuario una mejor experiencia. Cuando el usuario cambia de un elemento multimedia a otro, la reproducción comienza más rápido porque el administrador ya cargó parte del contenido.
En esta página, se abordan los siguientes temas:
- Agrega elementos multimedia al administrador de precarga
- Recupera y reproduce contenido multimedia
- Cómo quitar elementos del administrador de precarga
- Libera el administrador de precarga cuando termines de usarlo
Agrega elementos multimedia al administrador de precarga
Debes informar al administrador de precarga sobre cada elemento multimedia del que hará un seguimiento. Por ejemplo, si tu app tiene un carrusel de videos, los agregarías al administrador de precarga. Según tu caso de uso, puedes agregar todos los videos o solo los que estén cerca del que se está reproduciendo. También puedes agregar elementos nuevos al administrador de precarga más adelante.
Para ello, usa un método de adición por lotes, como addMediaItems. Como alternativa, puedes llamar a add (o addMediaSource) para agregar elementos multimedia de forma individual. Sin embargo, agregar elementos multimedia de forma individual no activa automáticamente la carga previa. Cuando uses métodos individuales, debes llamar de forma explícita a invalidate una vez que hayas terminado
de agregar elementos para indicarle al administrador de precarga que actualice las prioridades y comience
la precarga.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
Puntos clave sobre el código
- En este fragmento, se muestra cómo propagar inicialmente el administrador de precarga en modo por lotes después de crearlo. Puedes llamar a
addMediaItemspara agregar elementos a un administrador de precarga existente y propagado. - En este fragmento,
pullMediaItemsFromService()es la lógica de la app para recuperar la lista de contenido que se reproducirá. El código llama a ese método para recuperar una lista de hasta 20 elementos. preloadManageres elDefaultPreloadManagercreado en Crea unDefaultPreloadManager.rankingDataes un valor que usa el administrador de precarga para determinar la prioridad de cada elemento multimedia. ParaDefaultPreloadManager,rankingDataes un número entero que representa la posición del elemento en el carrusel. El administrador de precarga determina la prioridad según la distancia entre cada elemento y el que se está reproduciendo en ese momento.
Recupera y reproduce contenido multimedia
Cuando el usuario avanza a un nuevo elemento multimedia, debes obtenerlo del administrador de precarga. Si el administrador de precarga cargó parte del contenido, este se reproducirá más rápido que si no hubieras usado el administrador de precarga. Si el administrador de precarga aún no cargó el contenido de ese elemento, este se reproducirá con normalidad.
También debes actualizar el índice de reproducción actual en el administrador de precarga llamando a setCurrentPlayingIndex, lo que permite que el administrador de precarga determine las prioridades de las operaciones de precarga futuras.
// 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)
Puntos clave sobre el código
playeres elExoPlayerde Media3 que usa la app para reproducir el contenido. Debes crear ese reproductor llamando aDefaultPreloadManager.Builder.buildExoPlayer()en el mismo compilador que usaste para crear el administrador de precarga.- Cuando el usuario cambia a un nuevo elemento multimedia, la app llama a
getMediaSource()para obtener la fuente de contenido multimedia del administrador de precarga. Debe ser unmediaItemque ya hayas agregado al administrador de precarga. No hay problema si el administrador de precarga aún no comenzó a cargar el contenido. En ese caso, devuelve unMediaSourceque no tiene datos precargados. Por ejemplo, esto podría suceder si el usuario avanza de repente mucho en el carrusel. - Después de que el usuario reproduzca el nuevo elemento multimedia, llama a
setCurrentPlayingIndexpara indicarle al administrador de precarga en qué parte del carrusel se encuentra el elemento nuevo. El administrador de precarga necesita esa información para priorizar la carga del siguiente elemento.
Cómo quitar elementos del administrador de precarga
Para mantener la eficiencia del administrador de precarga, debes quitar los elementos que ya no necesita seguir. También puedes quitar elementos que aún están en el carrusel, pero que están lejos de la posición actual del usuario. Por ejemplo, puedes decidir que, si un elemento está a más de 15 elementos de lo que el usuario está mirando, no es necesario precargarlo. En ese caso, quitarías los elementos cuando se alejaran tanto. Si el usuario vuelve a esos elementos quitados, siempre puedes volver a agregarlos.
Si tienes una lista de elementos multimedia para quitar, puedes usar removeMediaItems. Como alternativa, puedes llamar a remove (o removeMediaSource) para quitar elementos multimedia de forma individual.
preloadManager.removeMediaItems(mediaItemsToRemove)
Puntos clave sobre el código
- Si quieres quitar todos los elementos del administrador de precarga, puedes llamar a
reset()en lugar deremove(). Este enfoque es útil si necesitas cambiar todos los elementos de tu carrusel. En ese caso, después de quitar los elementos, deberás agregar elementos nuevos al administrador de precarga.
Libera el administrador de precarga cuando termines de usarlo
Cuando ya no necesites el administrador de precarga, debes liberarlo para liberar sus recursos. En particular, asegúrate de liberarlo cuando se destruya tu actividad.
preloadManager.release()
Puntos clave sobre el código
- No debes llamar a ninguno de los métodos del objeto después de liberarlo.
- Si necesitas crear otro administrador de precarga, crea un
DefaultPreloadManager.Buildernuevo y úsalo para crear elDefaultPreloadManager. No intentes reutilizar el compilador anterior.