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 abordan los siguientes temas:
- Cómo agregar elementos multimedia al administrador de carga previa
- Recupera y reproduce contenido multimedia
- Cómo quitar elementos del administrador de carga previa
- Libera el administrador de precarga cuando termines de usarlo
Agrega elementos multimedia al administrador de carga previa
Debes informar al administrador de carga previa sobre cada elemento multimedia que realizará 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 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 completar inicialmente el administrador de carga previa en modo de lote después de crearlo. Puedes llamar a
addMediaItemspara agregar elementos a un administrador de carga previa existente y completado. - 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 el administrador de carga previa usa para determinar la prioridad de cada elemento multimedia. En el caso deDefaultPreloadManager,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 reproducirá más rápido que si no hubieras usado el administrador de carga previa. Si el administrador de precarga aún no cargó contenido de ese elemento, el contenido se reproducirá normalmente.
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 futuras operaciones de carga previa.
// 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 objetoExoPlayerde 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 carga previa.- Cuando el usuario cambia a un nuevo elemento multimedia, la app llama a
getMediaSource()para obtener la fuente de medios 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, devuelve unMediaSourceque no tiene datos precargados. Por ejemplo, esto podría ocurrir si el usuario se desplaza de repente hacia adelante en el carrusel. - Después de que el usuario reproduce el nuevo elemento multimedia, llama a
setCurrentPlayingIndexpara indicarle al administrador de carga previa en qué parte 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 siga siendo eficiente, debes quitar los elementos que ya no necesite hacer un seguimiento. También puedes quitar elementos que aún se encuentren 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 distancia de lo que está mirando el usuario, no es necesario cargarlo previamente. En ese caso, quitarías los elementos cuando se alejaran demasiado. Si el usuario vuelve a acercarse a los elementos quitados, siempre puedes volver a agregarlos.
Si tienes una lista de elementos multimedia que deseas 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 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.
Libera 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.