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
- Récupérer et lire des contenus multimédias
- Supprimer des éléments du gestionnaire de préchargement
- Libérer le gestionnaire de préchargement lorsque vous n'en avez plus besoin
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
addMediaItemspour 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. preloadManagerest leDefaultPreloadManagercréé dans Créer unDefaultPreloadManager.rankingDataest une valeur que le gestionnaire de préchargement utilise pour déterminer la priorité de chaque élément multimédia. PourDefaultPreloadManager,rankingDataest 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
playerest le Media3ExoPlayerque l'application utilise pour lire le contenu. Vous devez créer ce lecteur en appelantDefaultPreloadManager.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'unmediaItemque 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 unMediaSourcequi 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
setCurrentPlayingIndexpour 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
- Si vous souhaitez supprimer tous les éléments du gestionnaire de préchargement, vous pouvez appeler
reset()au lieu deremove(). Cette approche est utile si vous devez modifier tous les éléments de votre carrousel. Dans ce cas, une fois les éléments supprimés, vous devrez ajouter de nouveaux éléments au gestionnaire de préchargement.
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.Builderet utilisez-le pour créer leDefaultPreloadManager. N'essayez pas de réutiliser l'ancien compilateur.