Das Cast-Framework bietet Warteschlangenklassen, die das Erstellen von Listen von MediaQueueItem
-Instanzen unterstützen. Diese können aus MediaInfo
-Instanzen wie Video- oder Audiostreams erstellt werden, um sie nacheinander auf dem Empfänger abzuspielen. Diese Warteschlange mit Inhaltselementen kann bearbeitet, neu angeordnet, aktualisiert usw. werden.
Das Receiver SDK verwaltet die Warteschlange und reagiert auf Vorgänge in der Warteschlange, solange mindestens ein Element in der Warteschlange aktiv ist (wiedergegeben oder pausiert). Absender können der Sitzung beitreten und der Warteschlange Elemente hinzufügen. Der Empfänger hält eine Sitzung für Warteschlangenelemente aufrecht, bis die Wiedergabe des letzten Elements abgeschlossen ist, der Absender die Wiedergabe stoppt und die Sitzung beendet oder ein Absender eine neue Warteschlange auf dem Empfänger lädt. Der Empfänger speichert standardmäßig keine Informationen zu beendeten Warteschlangen. Sobald das letzte Element in der Warteschlange fertig ist, endet die Mediensitzung und die Warteschlange verschwindet.
Elemente der Medienwarteschlange erstellen und laden
Ein Element in der Medienwarteschlange wird im Cast-Framework als Instanz von MediaQueueItem
dargestellt.
Wenn du ein Medienelement in der Wiedergabeliste erstellst und die Media Player Library mit adaptiven Inhalten verwendest, kannst du die Vorab-Ladezeit so festlegen, dass der Player mit dem Puffern des Medienelements in der Wiedergabeliste beginnen kann, bevor das Element davor in der Wiedergabeliste fertig wiedergegeben ist. Wenn du das Autoplay-Attribut des Artikels auf „True“ setzt, kann der Empfänger ihn automatisch abspielen. Du kannst beispielsweise ein Builder-Muster verwenden, um ein Medienwarteschlangenelement so zu erstellen:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
Lade ein Array von Medienwarteschlangenelementen in die Warteschlange, indem du die entsprechende queueLoad
-Methode von RemoteMediaClient
verwendest.
Statusaktualisierungen für die Medienwarteschlange erhalten
Wenn der Empfänger ein Element aus der Medienwarteschlange lädt, weist er ihm eine eindeutige ID zu, die für die Dauer der Sitzung (und die Lebensdauer der Warteschlange) gültig ist. Deine App kann den Status der Wiedergabeliste abrufen, um zu erfahren, welches Element gerade geladen wird (wird möglicherweise nicht wiedergegeben), geladen wird oder vorab geladen wurde. Die Klasse MediaStatus
enthält folgende Statusinformationen:
getPreloadedItemId()
method: Wenn der nächste Artikel vorab geladen wurde, wird die ID des vorab geladenen Artikels zurückgegeben.getLoadingItemId()
-Methode: Gibt die Artikel-ID des Artikels zurück, der gerade auf dem Empfänger geladen wird (aber nicht aktiv in der Warteschlange ist).getCurrentItemId()
-Methode: Gibt die Artikel-ID des Artikels zurück, der zum Zeitpunkt der Änderung des Medienstatus in der Wiedergabeliste aktiv war (er wird möglicherweise nicht wiedergegeben).getQueueItems()
-Methode (Verworfen, stattdessenMediaQueue
verwenden): Gibt die Liste derMediaQueueItem
-Instanzen als nicht bearbeitbare Liste zurück.
Die Liste der Elemente kann auch über die Klasse MediaQueue
abgerufen werden. Die Klasse ist ein spärliches Datenmodell der Medienwarteschlange. Die Liste der Artikel-IDs wird in der Warteschlange aufbewahrt und automatisch mit dem Empfänger synchronisiert.
MediaQueue
speichert nicht alle MediaQueueItem
, da dies zu viel Arbeitsspeicher verbrauchen würde, wenn die Warteschlange sehr lang ist. Stattdessen werden die Elemente auf Anfrage abgerufen und eine LruCache
der zuletzt aufgerufenen Elemente wird aufbewahrt. So kannst du auf die Medienwarteschlange zugreifen:
getItemIds()
Methode: Gibt die Liste aller Artikel-IDs in der richtigen Reihenfolge zurück.getItemAtIndex()
-Methode: Gibt das im Cache gespeicherte Element an einem bestimmten Index zurück. Wenn der Artikel nicht im Cache ist, gibtMediaQueue
null
zurück und plant den Abruf des Artikels. Beim Abrufen des Artikels wirdMediaQueue.Callback#itemsUpdatedAtIndexes()
aufgerufen. WenngetItemAtIndex()
noch einmal mit derselben ID aufgerufen wird, wird der Artikel zurückgegeben.fetchMoteItemsRelativeToIndex()
wird verwendet, wenn der Nutzer die Warteschlangen-UI nach oben oder unten scrollt und deine App weitere Elemente aus der Cloud abrufen möchte.
Verwende diese Methoden zusammen mit den anderen Methoden für den Medienstatus, um deine App über den Status der Wiedergabeliste und der Elemente in der Wiedergabeliste zu informieren. Zusätzlich zu den Medienstatusaktualisierungen vom Empfänger kann deine App auf Änderungen an der Wiedergabeliste warten, indem du RemoteMediaClient.Callback
und MediaQueue.Callback
implementierst.
Außerdem bietet das Cast SDK zwei Dienstprogrammklassen zum Erstellen einer Benutzeroberfläche für die Wiedergabeliste.
MediaQueueRecyclerViewAdapter
, um die Daten vonRecyclerView
zu sichernMediaQueueListAdapter
, um die Daten vonListAdapter
zu sichern.
So erstellen Sie beispielsweise eine RecyclerView
mit 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); }
Warteschlange bearbeiten
Verwenden Sie die Warteschlangenmethoden der Klasse RemoteMediaClient
, um die Elemente in der Warteschlange zu bearbeiten. Damit kannst du ein Array von Elementen in eine neue Warteschlange laden, Elemente in eine vorhandene Warteschlange einfügen, die Eigenschaften von Elementen in der Warteschlange aktualisieren, ein Element in der Warteschlange vor- oder zurückspringen lassen, die Eigenschaften der Warteschlange selbst festlegen (z. B. den repeatMode
-Algorithmus ändern, der das nächste Element auswählt), Elemente aus der Warteschlange entfernen und die Elemente in der Warteschlange neu anordnen.