En esta página, se describe cómo usar un administrador de carga previa para administrar contenido de video. Si usas un administrador de carga previa, puedes brindarles a los usuarios una mejor experiencia. Cuando cambian 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 tratan los siguientes temas:
- Cómo agregar elementos multimedia al administrador de carga previa
- Cómo recuperar y reproducir contenido multimedia
- Cómo quitar elementos del administrador de carga previa
- Cómo liberar el administrador de carga previa cuando termines de usarlo
Cómo agregar elementos multimedia al administrador de carga previa
Debes informarle al administrador de carga previa sobre cada elemento multimedia que hará un seguimiento. Por ejemplo, si tu app tiene un carrusel de videos, los agregarías al administrador de carga previa. Según tu caso de uso, puedes agregar todos los videos o solo los que están cerca del video que se está reproduciendo. También puedes agregar elementos nuevos al administrador de carga previa 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 usas métodos individuales, debes llamar a invalidate de forma explícita una vez que termines de agregar elementos para indicarle al administrador de carga previa que actualice las prioridades y comience la carga previa.
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 carga previa en modo por lotes después de crearlo. Puedes llamar a
addMediaItemspara agregar elementos a un administrador de carga previa 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 Cómo crear unDefaultPreloadManager.rankingDataes un valor que usa el administrador de carga previa 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 carga previa determina la prioridad según la distancia de cada elemento con respecto al elemento que se está reproduciendo.
Cómo recuperar y reproducir contenido multimedia
Cuando el usuario avanza a un nuevo elemento multimedia, debes obtener el elemento multimedia del administrador de precarga. Si el administrador de carga previa cargó parte del contenido, este se reproduce más rápido que si no lo hubieras usado. Si el administrador de carga previa aún no cargó contenido de ese elemento, el contenido se reproduce con normalidad.
También debes actualizar el índice de reproducción actual en el administrador de carga previa llamando a setCurrentPlayingIndex, lo que permite que el administrador de carga previa determine las prioridades de las operaciones de carga previa 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 el Media3ExoPlayerque 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 carga previa.- Cuando el usuario cambia a un nuevo elemento multimedia, la app llama a
getMediaSource()para obtener la fuente multimedia del administrador de carga previa. Debe ser unmediaItemque ya hayas agregado al administrador de carga previa. No hay problema si el administrador de carga previa aún no comenzó a cargar el contenido. En ese caso, muestra unMediaSourceque no tiene datos precargados. Por ejemplo, esto puede suceder si el usuario salta repentinamente hacia adelante en el carrusel. - Después de que el usuario reproduzca el nuevo elemento multimedia, llama a
setCurrentPlayingIndexpara indicarle al administrador de carga previa en qué lugar del carrusel se encuentra el elemento nuevo. El administrador de carga previa necesita esa información para priorizar la carga del siguiente elemento.
Cómo quitar elementos del administrador de carga previa
Para que el administrador de carga previa sea eficiente, debes quitar los elementos que ya no necesita rastrear. 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 está viendo el usuario, no es necesario precargarlo. En ese caso, quitarías los elementos cuando se alejaran tanto. Si el usuario vuelve a acercarse 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 deseas quitar todos los elementos del administrador de carga previa, 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 carga previa.
Cómo liberar el administrador de carga previa cuando termines de usarlo
Cuando ya no necesites el administrador de carga previa, 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 carga previa, crea un nuevo
DefaultPreloadManager.Buildery úsalo para crear elDefaultPreloadManager. No intentes reutilizar el compilador anterior.