Warteschlange

Das Cast-Framework stellt Warteschlangenklassen bereit, die das Erstellen von Listen mit MediaQueueItem-Instanzen unterstützen. Diese Listen können aus MediaInfo-Instanzen wie Video- oder Audiostreams erstellt werden, um sequenziell auf dem Empfänger wiederzugeben. Diese Warteschlange mit Inhaltselementen kann unter anderem bearbeitet, neu angeordnet, aktualisiert werden.

Das Receiver SDK verwaltet die Warteschlange und reagiert auf Vorgänge darin, solange in der Warteschlange mindestens ein Element aktiv ist (abgespielt oder angehalten). 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 die Wiedergabe abgeschlossen hat, der Sender die Wiedergabe anhält und die Sitzung beendet oder bis ein Sender eine neue Warteschlange beim Empfänger lädt. Der Empfänger speichert standardmäßig keine Informationen über beendete Warteschlangen. Sobald das letzte Element in der Warteschlange beendet ist, wird die Mediensitzung beendet und die Warteschlange verschwindet.

Elemente der Medienwarteschlange erstellen und laden

Ein Element der Medienwarteschlange wird im Cast-Framework als MediaQueueItem-Instanz dargestellt. Wenn Sie beim Erstellen eines Warteschlangenelements die Mediaplayer-Bibliothek mit adaptiven Inhalten verwenden, können Sie die Vorabladezeit so festlegen, dass der Player mit der Zwischenspeicherung des Warteschlangenelements beginnen kann, bevor das Element vor dem Element in der Warteschlange wiedergegeben wurde. Wenn das Attribut „Autoplay“ auf „true“ gesetzt ist, kann der Empfänger das Video automatisch wiedergeben. So können Sie beispielsweise ein Builder-Muster verwenden, um das Element in der Medienwarteschlange 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();

Mithilfe der entsprechenden Methode queueLoad von RemoteMediaClient kann ein Array von Elementen der Medienwarteschlange in die Warteschlange geladen werden.

Aktuelle Informationen zum Status der Medienwarteschlange erhalten

Wenn der Empfänger ein Medienwarteschlangenelement 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 in Bezug darauf ermitteln, welches Element gerade geladen (es wird möglicherweise nicht wiedergegeben), geladen oder vorab geladen wird. Die Klasse MediaStatus stellt die folgenden Statusinformationen bereit:

  • Methode getPreloadedItemId(): Wenn das nächste Element vorab geladen wurde, wird die vorab geladene Element-ID zurückgegeben.
  • Methode getLoadingItemId(): gibt die Element-ID des Elements zurück, das gerade auf den 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 Medienstatusänderung in der Warteschlange aktiv war (es wird möglicherweise nicht abgespielt).
  • Methode getQueueItems() (Verworfen, stattdessen MediaQueue verwenden): Gibt die Liste der Instanzen vom Typ MediaQueueItem als nicht änderbare Liste zurück.

Die Liste der Elemente kann auch mithilfe der Klasse MediaQueue abgerufen werden. Die Klasse ist ein dünnbesetztes Datenmodell der Medienwarteschlange. Die Liste der Element-IDs bleibt in der Warteschlange, die automatisch mit dem Empfänger synchronisiert wird. MediaQueue behält nicht alle MediaQueueItem bei, da bei einer sehr langen Warteschlange zu viel Arbeitsspeicher benötigt wird. 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 Element-IDs der Reihe nach zurück
  • Methode getItemAtIndex(): gibt das im Cache gespeicherte Element an einem bestimmten Index zurück. Wenn das Element nicht im Cache gespeichert wird, gibt MediaQueue null zurück und plant den Abruf des Elements. Sobald das Element abgerufen ist, 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 in der Warteschlangen-UI nach oben oder unten scrollt und Ihre App mehr Elemente aus der Cloud abrufen möchte.

Verwenden Sie diese Methoden zusammen mit den anderen Medienstatusmethoden, um Ihre Anwendung über den Status der Warteschlange und die Elemente in der Warteschlange zu informieren. Zusätzlich zu Aktualisierungen des Medienstatus vom Empfänger kann Ihre Anwendung durch Implementieren von RemoteMediaClient.Callback und MediaQueue.Callback auf Änderungen an der Warteschlange überwachen.

Darüber hinaus bietet das Cast SDK zwei Dienstprogrammklassen zum Erstellen einer Benutzeroberfläche für Wiedergabelisten.

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 zur Verarbeitung der Elemente in der Warteschlange die Warteschlangenmethoden der Klasse RemoteMediaClient. Mit ihnen 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, Elemente in der Warteschlange vor- oder zurückspringen, die Eigenschaften der Warteschlange selbst festlegen (z. B. den Algorithmus repeatMode ändern, durch den das nächste Element ausgewählt wird), Elemente aus der Warteschlange entfernen und die Elemente in der Warteschlange neu anordnen.