Warteschlange

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:

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();

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 stattdessen MediaQueue) Methode – Gibt die Liste der MediaQueueItem Instanzen 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, gibt MediaQueue null zurück und plant, das Element abzurufen. Wenn das Element abgerufen wurde, MediaQueue.Callback#itemsUpdatedAtIndexes() aufgerufen wird und der Aufruf von getItemAtIndex() 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.

So erstellen Sie beispielsweise ein 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 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.