Gérer et lire des contenus

Cette page explique comment utiliser un gestionnaire de préchargement pour gérer le contenu vidéo. En utilisant un gestionnaire de préchargement, vous pouvez offrir une meilleure expérience à l'utilisateur. Lorsque l'utilisateur passe d'un élément multimédia à un autre, la lecture démarre plus rapidement, car le gestionnaire a déjà chargé une partie du contenu.

Cette page aborde les sujets suivants :

Ajouter des éléments multimédias au gestionnaire de préchargement

Vous devez informer le gestionnaire de préchargement de chaque élément multimédia qu'il doit suivre. Par exemple, si votre application comporte un carrousel de vidéos, vous devez les ajouter au gestionnaire de préchargement. Selon votre cas d'utilisation, vous pouvez ajouter toutes les vidéos ou uniquement celles qui se trouvent à proximité de la vidéo en cours de lecture. Vous pouvez également ajouter de nouveaux éléments au gestionnaire de préchargement ultérieurement.

Pour ce faire, utilisez une méthode d'ajout par lot comme addMediaItems. Vous pouvez également appeler add (ou addMediaSource) pour ajouter des éléments multimédias individuellement. Toutefois, l'ajout d'éléments multimédias individuellement ne déclenche pas automatiquement le préchargement. Lorsque vous utilisez des méthodes individuelles, vous devez appeler explicitement invalidate une fois que vous avez terminé d' ajouter des éléments pour indiquer au gestionnaire de préchargement de mettre à jour les priorités et de commencer le préchargement.

val initialMediaItems = pullMediaItemsFromService(count = 20)
val rankingDataList = initialMediaItems.indices.toList()
preloadManager.addMediaItems(initialMediaItems, rankingDataList)

Points clés concernant le code

  • Cet extrait montre comment remplir initialement le gestionnaire de préchargement en mode batch après l'avoir créé. Vous pouvez appeler addMediaItems pour ajouter des éléments à un gestionnaire de préchargement existant et rempli.
  • Dans cet extrait, pullMediaItemsFromService() correspond à la logique de l'application pour récupérer la liste des contenus à lire. Le code appelle cette méthode pour récupérer une liste de 20 éléments maximum.
  • preloadManager est le DefaultPreloadManager créé dans Créer un DefaultPreloadManager.
  • rankingData est une valeur que le gestionnaire de préchargement utilise pour déterminer la priorité de chaque élément multimédia. Pour DefaultPreloadManager, rankingData est un entier représentant la position de l'élément dans le carrousel. Le gestionnaire de préchargement détermine la priorité en fonction de la distance entre chaque élément et celui en cours de lecture.

Récupérer et lire des contenus multimédias

Lorsque l'utilisateur passe à un nouvel élément multimédia, vous devez le récupérer à partir du gestionnaire de préchargement. Si le gestionnaire de préchargement a chargé une partie du contenu, celui-ci est lu plus rapidement que si vous n'aviez pas utilisé le gestionnaire de préchargement. Si le gestionnaire de préchargement n'a pas encore chargé le contenu de cet élément, il est lu normalement.

Vous devez également mettre à jour l'index de lecture actuel sur le gestionnaire de préchargement en appelant setCurrentPlayingIndex, ce qui permet au gestionnaire de préchargement de déterminer les priorités des futures opérations de préchargement.

// 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)

Points clés concernant le code

  • player est le Media3 ExoPlayer que l'application utilise pour lire le contenu. Vous devez créer ce lecteur en appelant DefaultPreloadManager.Builder.buildExoPlayer() sur le même compilateur que celui que vous avez utilisé pour créer le gestionnaire de préchargement.
  • Lorsque l'utilisateur passe à un nouvel élément multimédia, l'application appelle getMediaSource() pour obtenir la source multimédia à partir du gestionnaire de préchargement. Il doit s'agir d'un mediaItem que vous avez déjà ajouté au gestionnaire de préchargement. Ce n'est pas un problème si le gestionnaire de préchargement n'a pas encore commencé à charger le contenu. Dans ce cas, il renvoie un MediaSource qui ne contient pas de données préchargées. Par exemple, cela peut se produire si l'utilisateur passe soudainement à un élément beaucoup plus loin dans le carrousel.
  • Une fois que l'utilisateur a lu le nouvel élément multimédia, appelez setCurrentPlayingIndex pour indiquer au gestionnaire de préchargement où se trouve le nouvel élément dans le carrousel. Le gestionnaire de préchargement a besoin de ces informations pour hiérarchiser le chargement de l'élément suivant.

Supprimer des éléments du gestionnaire de préchargement

Pour que le gestionnaire de préchargement reste efficace, vous devez supprimer les éléments qu'il n'a plus besoin de suivre. Vous pouvez également supprimer des éléments qui se trouvent toujours dans le carrousel, mais qui sont loin de la position actuelle de l'utilisateur. Par exemple, vous pouvez décider que si un élément se trouve à plus de 15 éléments de ce que l'utilisateur regarde, il n'a pas besoin d'être préchargé. Dans ce cas, vous supprimez les éléments lorsqu'ils sont aussi éloignés. Si l'utilisateur revient vers ces éléments supprimés, vous pouvez toujours les ajouter à nouveau.

Si vous disposez d'une liste d'éléments multimédias à supprimer, vous pouvez utiliser removeMediaItems. Vous pouvez également appeler remove (ou removeMediaSource) pour supprimer des éléments multimédias individuellement.

preloadManager.removeMediaItems(mediaItemsToRemove)

Points clés concernant le code

Libérer le gestionnaire de préchargement lorsque vous n'en avez plus besoin

Lorsque vous n'avez plus besoin du gestionnaire de préchargement, vous devez le libérer pour libérer ses ressources. Veillez en particulier à le libérer lorsque votre activité est détruite.

preloadManager.release()

Points clés concernant le code

  • Vous ne devez pas appeler les méthodes de l'objet après l'avoir libéré.
  • Si vous devez créer un autre gestionnaire de préchargement, créez un nouveau DefaultPreloadManager.Builder et utilisez-le pour créer le DefaultPreloadManager. N'essayez pas de réutiliser l'ancien compilateur.