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 sequenziell auf dem Empfänger wiederzugeben. Diese Warteschlange von Inhaltselementen kann unter anderem bearbeitet, neu angeordnet, aktualisiert werden.

Das Receiver SDK verwaltet die Warteschlange und antwortet auf Vorgänge in der Warteschlange, solange in der Warteschlange mindestens ein Element aktiv ist (Wiedergabe oder Pause). Absender können der Sitzung beitreten und Einträge 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 stoppt und die Sitzung beendet oder der Sender eine neue Warteschlange beim Empfänger lädt. Der Empfänger bewahrt standardmäßig keine Informationen über beendete Warteschlangen auf. Sobald das letzte Element in der Warteschlange abgeschlossen ist, endet die Mediensitzung und die Warteschlange verschwindet.

Elemente in der Medienwarteschlange erstellen und laden

Ein Element der Medienwarteschlange wird im Cast-Framework als MediaQueueItem-Instanz dargestellt. Wenn Sie ein Element in der Wiedergabeliste erstellen und die Mediaplayer-Bibliothek mit adaptiven Inhalten verwenden, können Sie die Vorladezeit so festlegen, dass der Player mit der Zwischenspeicherung beginnen kann, bevor das vorangehende Element in der Wiedergabeliste abgespielt wird. Wird das Attribut „autoplay“ auf „true“ gesetzt, kann der Empfänger den Artikel automatisch wiedergeben. Beispielsweise können Sie ein Builder-Muster verwenden, um ein Medien-Warteschlangenelement wie folgt 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();

Laden Sie ein Array von Medienwarteschlangenelementen mit der entsprechenden queueLoad-Methode von RemoteMediaClient.

Statusaktualisierungen für Medienwarteschlangen erhalten

Wenn der Empfänger ein Medienwarteschlangenelement lädt, weist er diesem eine eindeutige ID zu, die für die Dauer der Sitzung (und für die Lebensdauer der Warteschlange) bestehen bleibt. Ihre App kann den Status der Warteschlange anhand des aktuell geladenen Elements erkennen (das Element wird möglicherweise nicht wiedergegeben), wird geladen oder vorab geladen. Die Klasse MediaStatus stellt folgende 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 auf dem Empfänger gerade geladen wird, aber in der Warteschlange nicht aktiv ist
  • Methode getCurrentItemId(): gibt die Element-ID des Elements zurück, das zum Zeitpunkt der Änderung des Medienstatus in der Warteschlange aktiv war (es wurde möglicherweise nicht wiedergegeben).
  • Methode getQueueItems() (Eingestellt, stattdessen MediaQueue verwenden): Gibt die Liste der MediaQueueItem-Instanzen als nicht änderbare Liste zurück.

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

  • getItemIds()-Methode: gibt die Liste aller Element-IDs der Reihe nach zurück
  • Methode getItemAtIndex(): Gibt das im Cache gespeicherte Element bei einem bestimmten Index zurück. Wenn das Element nicht im Cache gespeichert ist, gibt MediaQueue null zurück und plant den Abruf des Elements ein. Wenn das Element abgerufen wird, wird MediaQueue.Callback#itemsUpdatedAtIndexes() aufgerufen. Wenn getItemAtIndex() noch einmal mit derselben ID aufgerufen wird, wird das Element zurückgegeben.
  • fetchMoteItemsRelativeToIndex() wird verwendet, wenn der Nutzer in der Benutzeroberfläche 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 des Medienstatus, um Ihre Anwendung über den Status der Warteschlange und der Elemente in der Warteschlange zu informieren. Zusätzlich zu den Medienstatusaktualisierungen vom Empfänger kann deine Anwendung RemoteMediaClient.Callback und MediaQueue.Callback implementieren und auf Änderungen an der Warteschlange warten.

Außerdem bietet das Cast SDK zwei Dienstprogrammklassen zum Erstellen einer Benutzeroberfläche für Warteschlangen.

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