Das Cast-Framework bietet Warteschlangenklassen, die die Erstellung von Listen mit MediaQueueItem
-Instanzen unterstützen. Diese können aus MediaInfo
-Instanzen wie Video- oder Audiostreams erstellt werden, um sequenziell auf dem Empfänger wiedergegeben zu werden. Diese Warteschlange mit Inhaltselementen kann bearbeitet, neu angeordnet und aktualisiert werden.
Das Receiver SDK verwaltet die Warteschlange und reagiert auf Vorgänge in der Warteschlange, solange die Warteschlange mindestens ein Element enthält, das gerade aktiv ist (wird wiedergegeben oder pausiert). Absender können der Sitzung beitreten und Elemente zur Warteschlange hinzufügen. Der Empfänger behält eine Sitzung für Warteschlangenelemente bei, bis das letzte Element wiedergegeben wurde oder der Absender die Wiedergabe beendet und die Sitzung schließt oder bis ein Absender eine neue Warteschlange auf den Empfänger lädt. Der Empfänger speichert standardmäßig keine Informationen zu beendeten Warteschlangen. Sobald das letzte Element in der Warteschlange wiedergegeben wurde, wird die Mediensitzung beendet und die Warteschlange verschwindet.
Media-Warteschlangenelemente erstellen und laden
Ein Element in der Media-Warteschlange wird im Cast-Framework als MediaQueueItem
-Instanz dargestellt.
Wenn Sie ein Element für die Medienwarteschlange erstellen und die Media Player Library mit adaptiven Inhalten verwenden, können Sie die Vorladezeit so festlegen, dass der Player mit dem Puffern des Elements für die Medienwarteschlange beginnen kann, bevor das Element davor in der Warteschlange fertig wiedergegeben wird. Wenn Sie das Attribut „autoplay“ des Elements auf „true“ setzen, kann der Empfänger es automatisch abspielen. Sie können beispielsweise ein Builder-Muster verwenden, um Ihr Media-Warteschlangenelement 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 Elementen in der Media-Warteschlange mit der entsprechenden queueLoad
-Methode von RemoteMediaClient
.
Statusaktualisierungen für die Medienwarteschlange erhalten
Wenn der Empfänger ein Media-Warteschlangenelement lädt, weist er dem Element eine eindeutige ID zu, die für die Dauer der Sitzung (und die Lebensdauer der Warteschlange) bestehen bleibt. Ihre App kann den Status der Warteschlange abrufen, um zu erfahren, welches Element gerade geladen (es wird möglicherweise nicht wiedergegeben) oder vorab geladen wird. Die Klasse MediaStatus
bietet diese Statusinformationen:
getPreloadedItemId()
-Methode: Wenn das nächste Element vorab geladen wurde, wird die ID des vorab geladenen Elements zurückgegeben.getLoadingItemId()
-Methode: Gibt die Artikel-ID des Artikels zurück, der derzeit auf dem Empfänger geladen wird (aber nicht in der Warteschlange aktiv ist).- Methode
getCurrentItemId()
: Gibt die Element-ID des Elements zurück, das zum Zeitpunkt der Änderung des Media-Status in der Warteschlange aktiv war (es wird möglicherweise nicht wiedergegeben). - Methode
getQueueItems()
(verworfen, verwenden Sie stattdessenMediaQueue
): Gibt die Liste derMediaQueueItem
-Instanzen als nicht änderbare Liste zurück.
Ihre App kann die Liste der Elemente auch über die Klasse MediaQueue
abrufen. Die Klasse ist ein spärliches Datenmodell der Media-Warteschlange. Sie enthält die Liste der Element-IDs in der Warteschlange, die automatisch mit dem Empfänger synchronisiert wird.
MediaQueue
speichert nicht alle MediaQueueItem
, da dies bei einer sehr langen Warteschlange zu viel Speicherplatz beanspruchen würde. Stattdessen werden die Elemente bei Bedarf abgerufen und eine LruCache
der zuletzt aufgerufenen Elemente wird beibehalten. Sie haben folgende Möglichkeiten, auf die Media-Warteschlange zuzugreifen:
- Methode
getItemIds()
: Gibt die Liste aller Artikel-IDs in der richtigen Reihenfolge zurück. - Methode
getItemAtIndex()
: Gibt das im Cache gespeicherte Element an einem bestimmten Index zurück. Wenn das Element nicht im Cache gespeichert ist, gibtMediaQueue
null
zurück und plant, das Element abzurufen. Wenn das Element abgerufen wird, wirdMediaQueue.Callback#itemsUpdatedAtIndexes()
aufgerufen. WenngetItemAtIndex()
mit derselben ID noch einmal aufgerufen wird, wird das Element zurückgegeben. fetchMoteItemsRelativeToIndex()
wird verwendet, wenn der Nutzer in der Warteschlangen-Benutzeroberfläche nach oben oder unten scrollt und Ihre App weitere Elemente aus der Cloud abrufen möchte.
Verwenden Sie diese Methoden zusammen mit den anderen Methoden für den Media-Status, um Ihre App über den Status der Warteschlange und der Elemente in der Warteschlange zu informieren. Zusätzlich zu Media-Statusaktualisierungen vom Empfänger kann Ihre App auf Änderungen an der Warteschlange warten, indem sie RemoteMediaClient.Callback
und MediaQueue.Callback
implementiert.
Das Cast SDK bietet außerdem zwei Hilfsklassen zum Erstellen einer Benutzeroberfläche für die Warteschlange.
MediaQueueRecyclerViewAdapter
, zum Sichern der Daten vonRecyclerView
MediaQueueListAdapter
, zum Sichern der Daten vonListAdapter
.
So erstellen Sie beispielsweise ein 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 zum Bearbeiten der Elemente in der Warteschlange die Warteschlangenmethoden der Klasse RemoteMediaClient
. Damit können Sie 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 vorwärts oder rückwärts verschieben, 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.