Das Cast-Framework bietet Warteschlangenklassen, die die Erstellung von Listen
mit MediaQueueItem
Instanzen unterstützen. Diese können aus MediaInfo Instanzen wie Video- oder Audio
streams erstellt werden, um sie sequenziell auf dem Empfänger abzuspielen. 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 mindestens ein Element in der Warteschlange aktiv ist (wird wiedergegeben oder pausiert). Absender können der Sitzung beitreten und Elemente zur Warteschlange hinzufügen. Der Empfänger verwaltet eine Sitzung für Warteschlangenelemente, bis die Wiedergabe des letzten Elements abgeschlossen ist oder der Absender die Wiedergabe beendet und die Sitzung beendet 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.
Elemente für die Medienwarteschlange erstellen und laden
Ein Element für die Medienwarteschlange 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 festlegen, damit der Player das Element für die Medienwarteschlange puffern kann, bevor
die Wiedergabe des Elements vor ihm in der Warteschlange beendet ist. Wenn Sie das Attribut für die automatische Wiedergabe des Elements auf „true“ setzen, kann der Empfänger es automatisch wiedergeben. Sie können beispielsweise ein Builder-Muster verwenden, um das Element für die Medienwarteschlange 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();
Verwenden Sie die entsprechende
queueLoad
-Methode von RemoteMediaClient, um ein Array von Elementen für die Medienwarteschlange in die Warteschlange zu laden.
Statusaktualisierungen für die Medienwarteschlange erhalten
Wenn der Empfänger ein Element für die Medienwarteschlange 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, z. B. welches Element gerade geladen, vorab geladen oder aktiv ist (wird möglicherweise nicht wiedergegeben). Die
MediaStatus
Klasse enthält 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 Element-ID des Elements zurück, das gerade auf dem Empfänger geladen wird (aber nicht in der Warteschlange aktiv ist).getCurrentItemId()Methode: Gibt die Element-ID des Elements zurück, das in der Warteschlange aktiv war (wird möglicherweise nicht wiedergegeben), als sich der Medienstatus geändert hat.getQueueItems()(verworfen, verwenden Sie stattdessenMediaQueue) Methode – Gibt die Liste derMediaQueueItemInstanzen als unveränderliche Liste zurück.
Ihre App kann die Liste der Elemente auch mit der
MediaQueue
Klasse abrufen. Die Klasse ist ein spärliches Datenmodell der Medienwarteschlange. Sie enthält die Liste der Element-IDs in der Warteschlange, die automatisch mit dem Empfänger synchronisiert wird.
MediaQueue enthält nicht alle
MediaQueueItem
da dies bei einer sehr langen Warteschlange zu viel Arbeitsspeicher belegen würde. Stattdessen werden die Elemente bei Bedarf abgerufen und ein LruCache mit den zuletzt aufgerufenen Elementen verwaltet. Mit diesen Methoden können Sie auf die Medienwarteschlange zugreifen:
getItemIds()Methode: Gibt die Liste aller Element-IDs in der Reihenfolge zurück.getItemAtIndex()Methode: Gibt das Element im Cache an einem bestimmten Index zurück. Wenn das Element nicht im Cache gespeichert ist, gibtMediaQueuenullzurück und plant, das Element abzurufen. Wenn das Element abgerufen wurde,MediaQueue.Callback#itemsUpdatedAtIndexes()aufgerufen wird und der Aufruf vongetItemAtIndex()mit derselben ID erneut das Element zurückgibt.fetchMoteItemsRelativeToIndex()wird verwendet, wenn der Nutzer in der Warteschlange 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 Medienstatus, um Ihre App über den Status der Warteschlange und der Elemente in der Warteschlange zu informieren. Neben
Statusaktualisierungen für Medien vom Empfänger kann Ihre App auch auf Änderungen an der
Warteschlange reagieren, indem Sie
RemoteMediaClient.Callback
und
MediaQueue.Callbackimplementieren.
Das Cast SDK bietet außerdem zwei Hilfsklassen zum Erstellen der UI für die Warteschlange.
MediaQueueRecyclerViewAdapter, zur Unterstützung der Daten vonRecyclerViewMediaQueueListAdapter, zur Unterstützung 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 die Warteschlangenmethoden der
RemoteMediaClient
Klasse, um Vorgänge für die Elemente in der Warteschlange auszuführen. So 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 Algorithmus repeatMode ändern, der das nächste Element auswählt), Elemente aus der Warteschlange entfernen und die Reihenfolge der Elemente in der Warteschlange ändern.