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 una mejor experiencia al usuario. 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 tratan los siguientes temas:
- Cómo agregar elementos multimedia al administrador de precarga
- Invalidar las prioridades en el administrador de precarga
- Cómo recuperar y reproducir contenido multimedia
- Cómo quitar elementos del administrador de carga previa
- Cómo liberar el administrador de precarga cuando termines de usarlo
Cómo agregar elementos multimedia al administrador de carga previa
Debes informarle al administrador de precarga sobre cada elemento multimedia que hará un seguimiento. Por ejemplo, si tu app tiene un carrusel de videos, debes agregar esos videos al administrador de precarga. 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 precarga más adelante.
Agregar los elementos multimedia no hace que el administrador de precarga comience a cargar el contenido. Para activar la precarga, deberás invalidar las prioridades en el administrador de precarga.
val initialMediaItems = pullMediaItemsFromService(count = 20) for (index in 0 until initialMediaItems.size) { preloadManager.add(initialMediaItems[index], /* rankingData= */ index) } // items aren't actually loaded yet! need to call invalidate() after this
Puntos clave sobre el código
- En este fragmento, se muestra cómo propagar inicialmente el administrador de precarga después de crearlo. También puedes llamar a
add()para 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 Cómo crear unDefaultPreloadManager. El código llama al métodoadd()de ese administrador para agregar cada elemento del carrusel.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 carga previa determina la prioridad según la distancia de cada elemento con respecto al elemento que se está reproduciendo.
Cómo invalidar las prioridades en el administrador de carga previa
Para activar el administrador de precarga para que comience a precargar contenido, debes llamar a invalidate() para informarle que las prioridades de los elementos están desactualizadas. Debes hacerlo en las siguientes situaciones:
- Cuando agregas elementos multimedia nuevos al administrador de precarga o quitas elementos multimedia.
Si agregas o quitas varios elementos, debes agregarlos todos y, luego, llamar a
invalidate(). - Cuando el usuario cambia de un elemento multimedia a otro. En este caso, debes asegurarte de actualizar el índice de reproducción actual antes de llamar a
invalidate(), como se describe en Cómo recuperar y reproducir contenido.
Cuando invalidas el administrador de precarga, este llama al
TargetPreloadStatusControl que creaste para averiguar cuánto contenido
debe cargar de cada elemento. Luego, carga el contenido de cada elemento en el orden de su prioridad, de mayor a menor.
preloadManager.invalidate()
Puntos clave sobre el código
- Llamar a
invalidate()activa el administrador de precarga para que vuelva a evaluar la prioridad de cada elemento multimedia que conoce. Por este motivo, si realizas muchos cambios en el administrador de precarga, debes terminar de hacer los cambios antes de llamar ainvalidate().
Cómo recuperar y reproducir contenido multimedia
Cuando el usuario avanza a un elemento multimedia nuevo, debes obtenerlo del administrador de carga previa. Si el administrador de precarga cargó parte del contenido, este se reproduce más rápido que si no lo hubieras usado. Si el administrador de precarga aún no cargó contenido de ese elemento, el contenido se reproduce con normalidad.
// When a media item is about to display on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If mediaSource is null, that mediaItem hasn't been added to the preload manager // yet. So, send it directly to the player when it's about to play player.setMediaItem(mediaItem) } 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()
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 precarga.- Cuando el usuario cambia a un elemento multimedia nuevo, la app llama a
getMediaSource()para obtener la fuente de contenido multimedia del administrador de carga previa. 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, muestra unMediaSourceque no tiene datos precargados. Por ejemplo, esto puede ocurrir si el usuario salta repentinamente hacia adelante en el carrusel. - Después de que el usuario reproduzca el nuevo elemento multimedia, llama a
setCurrentPlayingIndexpara informarle al administrador de precarga en qué lugar del carrusel se encuentra el elemento nuevo. El administrador de precarga necesita esa información para priorizar la carga del siguiente elemento. Después de actualizar el índice actual, llama ainvalidate()para que el administrador de precarga vuelva a determinar la prioridad de cada elemento.
Cómo quitar elementos del administrador de carga previa
Para que el administrador de precarga sea eficiente, debes quitar los elementos que el administrador de precarga ya no necesita hacer un seguimiento. También puedes quitar los 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á mirando el usuario, no es necesario cargarlo previamente. 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.
preloadManager.remove(mediaItem)
Puntos clave sobre el código
- Si quieres 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 precarga y, luego, invalidar las prioridades en el administrador de precarga.
Cómo liberar 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 carga previa, crea un nuevo
DefaultPreloadManager.Buildery úsalo para crear elDefaultPreloadManager. No intentes reutilizar el compilador anterior.