Warteschlange

Das Cast-Framework bietet Warteschlangenklassen, die das Erstellen von Listen mit MediaQueueItem-Instanzen unterstützen. Diese können aus MediaInfo-Instanzen wie Video- oder Audiostreams erstellt werden, um nacheinander auf dem Empfänger abgespielt zu werden. Diese Warteschlange mit Inhaltselementen kann bearbeitet, neu sortiert, aktualisiert usw. werden.

Das Empfänger-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 Elemente zur Warteschlange hinzufügen. Der Empfänger hält eine Sitzung für Warteschlangenelemente aufrecht, bis das letzte Element wiedergegeben wurde, der Absender die Wiedergabe beendet und die Sitzung schließt 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 beendet ist, wird die Mediensitzung beendet und die Warteschlange verschwindet.

Elemente für die Medienwarteschlange erstellen und laden

Ein Element in der Medien-Warteschlange wird im Cast-Framework als MediaQueueItem-Instanz dargestellt. Wenn Sie ein Element für die Medienwarteschlange erstellen und die Media Player-Bibliothek mit adaptiven Inhalten verwenden, können Sie die Vorladezeit so festlegen, dass der Player mit dem Zwischenspeichern des Elements in der Medienwarteschlange beginnen kann, bevor die Wiedergabe des vorherigen Elements in der Warteschlange beendet ist. Wenn das Attribut „autoplay“ des Elements auf „true“ gesetzt ist, kann der Empfänger es automatisch abspielen. Sie können beispielsweise ein Builder-Muster verwenden, um ein Medienwarteschlangenelement so zu erstellen:

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
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 der Medienwarteschlange lädt, weist er ihm eine eindeutige ID zu, die für die Dauer der Sitzung (und die Lebensdauer der Warteschlange) beibehalten wird. Deine App kann den Status der Warteschlange abrufen, um zu erfahren, welches Element gerade geladen (aber möglicherweise nicht abgespielt), geladen oder vorab geladen wird. Die Klasse MediaStatus stellt diese Statusinformationen bereit:

  • getPreloadedItemId()-Methode: Wenn das nächste Element vorab geladen wurde, wird die Artikel-ID des vorab geladenen Elements zurückgegeben.
  • getLoadingItemId()-Methode: Gibt die Artikel-ID des Artikels zurück, der gerade auf dem Empfänger geladen wird (aber nicht in der Warteschlange aktiv ist).
  • getCurrentItemId()-Methode: Gibt die Artikel-ID des Artikels zurück, der zum Zeitpunkt der Änderung des Medienstatus in der Warteschlange aktiv war (möglicherweise wurde er nicht abgespielt).
  • getQueueItems() (Verworfen, verwenden Sie stattdessen MediaQueue) – Gibt die Liste der MediaQueueItem-Instanzen als nicht änderbare Liste zurück.

Ihre App kann die Liste der Elemente auch mit der Klasse MediaQueue abrufen. Die Klasse ist ein dünnbesetztes Datenmodell der Medienwarteschlange. Die Liste der Artikel-IDs wird in der Warteschlange gespeichert und automatisch mit dem Empfänger synchronisiert. MediaQueue behält nicht alle MediaQueueItem bei, da dies zu viel Arbeitsspeicher beanspruchen würde, wenn die Warteschlange sehr lang ist. Stattdessen werden die Elemente bei Bedarf abgerufen und ein LruCache der zuletzt aufgerufenen Elemente wird beibehalten. Mit den folgenden Methoden können Sie auf die Medienwarteschlange zugreifen:

  • Methode getItemIds(): 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 das Element nicht im Cache gespeichert ist, gibt MediaQueue null zurück und plant das Abrufen des Elements. Wenn das Element abgerufen wird, wird MediaQueue.Callback#itemsUpdatedAtIndexes() aufgerufen. Wenn Sie getItemAtIndex() noch einmal mit derselben ID aufrufen, wird das Element 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 Warteschlange und der Elemente in der Warteschlange zu informieren. Zusätzlich zu den Aktualisierungen des Medienstatus vom Empfänger kann deine App auf Änderungen an der Warteschlange 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 Warteschlange.

So erstellen Sie beispielsweise einen RecyclerView mit MediaQueueRecyclerViewAdapter:

Kotlin
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
}
Java
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 vorwärts oder rückwärts springen 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.