Le framework Cast fournit des classes de mise en file d'attente qui permettent de créer des listes
d'MediaQueueItem
instances. Ces listes peuvent être créées à partir d'instances MediaInfo, telles que des flux audio ou vidéo, afin d'être lues de manière séquentielle sur le récepteur. Cette file d'attente d'éléments de contenu peut être modifiée, réorganisée, mise à jour, etc.
Le SDK du récepteur gère la file d'attente et répond aux opérations effectuées sur celle-ci tant qu'elle contient au moins un élément actif (en cours de lecture ou en pause). Les expéditeurs peuvent rejoindre la session et ajouter des éléments à la file d'attente. Le récepteur conserve une session pour les éléments de la file d'attente jusqu'à ce que le dernier élément soit lu, que l'expéditeur arrête la lecture et mette fin à la session, ou qu'un expéditeur charge une nouvelle file d'attente sur le récepteur. Par défaut, le récepteur ne conserve aucune information sur les files d'attente terminées. Une fois le dernier élément de la file d'attente terminé, la session multimédia se termine et la file d'attente disparaît.
Créer et charger des éléments de file d'attente multimédia
Un élément de file d'attente multimédia est représenté dans le framework Cast en tant qu'
MediaQueueItem
instance.
Lorsque vous créez un élément de file d'attente multimédia, si vous utilisez la bibliothèque Lecteur multimédia avec du contenu adaptatif, vous pouvez définir le temps de préchargement afin que le lecteur puisse commencer à mettre en mémoire tampon l'élément de file d'attente multimédia avant que l'élément qui le précède dans la file d'attente ne soit terminé. Si vous définissez l'attribut de lecture automatique de l'élément sur "true", le récepteur peut le lire automatiquement. Par exemple, vous pouvez utiliser un modèle de compilateur pour créer votre élément de file d'attente multimédia comme suit :
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
Chargez un tableau d'éléments de file d'attente multimédia dans la file d'attente à l'aide de la méthode appropriée
queueLoad
de RemoteMediaClient.
Recevoir des mises à jour de l'état de la file d'attente multimédia
Lorsque le récepteur charge un élément de file d'attente multimédia, il lui attribue un ID unique qui persiste pendant toute la durée de la session (et la durée de vie de la file d'attente). Votre application peut connaître l'état de la file d'attente en termes d'élément actuellement chargé (il peut ne pas être en cours de lecture), en cours de chargement ou préchargé. La classe
MediaStatus
fournit ces informations d'état :
getPreloadedItemId()méthode : si l'article suivant a été préchargé, renvoie l'ID de l'article préchargé.getLoadingItemId()méthode : renvoie l'ID de l'élément en cours de chargement (mais qui n'est pas actif dans la file d'attente) sur le récepteur.getCurrentItemId()méthode : renvoie l'ID de l'élément qui était actif dans la file d'attente (il peut ne pas être en cours de lecture) au moment où l'état du contenu multimédia a changé.getQueueItems()(Obsolète, utilisez plutôtMediaQueue) méthode - Renvoie la liste desMediaQueueIteminstances sous forme de liste non modifiable.
Votre application peut également obtenir la liste des éléments à l'aide de la
MediaQueue
classe. La classe est un modèle de données éparses de la file d'attente multimédia. Elle conserve la liste des ID d'éléments dans la file d'attente, qui est automatiquement synchronisée avec le récepteur.
MediaQueue ne conserve pas tous les
MediaQueueItem
car cela prendrait trop de mémoire lorsque la file d'attente est très longue. Au lieu de cela, elle
récupère les éléments à la demande et conserve un LruCache des
éléments récemment consultés. Vous pouvez utiliser ces méthodes pour accéder à la file d'attente multimédia :
getItemIds()méthode : renvoie la liste de tous les ID d'éléments dans l'ordre.getItemAtIndex()méthode : renvoie l'élément mis en cache à un index donné. Si l'élément n'est pas mis en cache,MediaQueuerenvoienullet planifie la récupération de l'élément. Une fois l'élément récupéré,MediaQueue.Callback#itemsUpdatedAtIndexes()est appelé, et l'appel degetItemAtIndex()avec le même ID renvoie à nouveau l'élément.fetchMoteItemsRelativeToIndex()est utilisé lorsque l'utilisateur fait défiler l'interface utilisateur de la file d'attente vers le haut ou le bas, et que votre application souhaite récupérer d'autres éléments depuis le cloud.
Utilisez ces méthodes avec les autres méthodes d'état du contenu multimédia pour informer votre application de l'état de la file d'attente et des éléments qu'elle contient. En plus des
mises à jour de l'état du contenu multimédia provenant du récepteur, votre application peut écouter les modifications apportées à la
file d'attente en implémentant
RemoteMediaClient.Callback
et
MediaQueue.Callback.
Le SDK Cast fournit également deux classes utilitaires pour créer une interface utilisateur pour la mise en file d'attente.
MediaQueueRecyclerViewAdapter, pour sauvegarder les données deRecyclerViewMediaQueueListAdapter, pour sauvegarder les données deListAdapter.
Par exemple, pour créer un RecyclerView à l'aide de MediaQueueRecyclerViewAdapter :
class MyRecyclerViewAdapter(mediaQueue: MediaQueue?) : MediaQueueRecyclerViewAdapter<MyViewHolder?>(mediaQueue) { override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val item = getItem(position) // Update the view using `item`. ... } } class MyViewHolder : RecyclerView.ViewHolder { // Implement your own ViewHolder. ... } fun someMethod() { val adapter = MyRecyclerViewAdapter( mCastSession.remoteMediaClient.getMediaQueue()) val recyclerView = activity.findViewById(R.id.my_recycler_view_id) as RecyclerView recyclerView.adapter = adapter }
public class MyRecyclerViewAdapter extends MediaQueueRecyclerViewAdapter<MyViewHolder> { public MyRecyclerViewAdapter(MediaQueue mediaQueue) { super(mediaQueue); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { MediaQueueItem item = getItem(position); // Update the view using `item`. ... } } public class MyViewHolder implements RecyclerView.ViewHolder { // Implement your own ViewHolder. ... } public void someMethod() { RecyclerView.Adapter adapter = new MyRecyclerViewAdapter( mCastSession.getRemoteMediaClient().getMediaQueue()); RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.my_recycler_view_id); recyclerView.setAdapter(adapter); }
Modifier la file d'attente
Pour agir sur les éléments de la file d'attente, utilisez les méthodes de file d'attente de la
RemoteMediaClient
classe. Elles vous permettent de charger un tableau d'éléments dans une nouvelle file d'attente, d'insérer des éléments dans une file d'attente existante, de mettre à jour les propriétés des éléments de la file d'attente, de faire avancer ou reculer un élément dans la file d'attente, de définir les propriétés de la file d'attente elle-même (par exemple, de modifier l'algorithme repeatMode qui sélectionne l'élément suivant), de supprimer des éléments de la file d'attente et de réorganiser les éléments de la file d'attente.