Warteschlange

Das Cast-Framework bietet Warteschlangenklassen, die das Erstellen von Listen unterstützen von MediaQueueItem -Instanzen, die aus MediaInfo-Instanzen wie Video oder Audio erstellt werden können Streams, um sie der Reihe nach auf dem Receiver abzuspielen. Diese Warteschlange mit Inhaltselementen kann bearbeitet, neu angeordnet, aktualisiert usw. werden.

Das Receiver SDK verwaltet die Warteschlange und reagiert auf Vorgänge auf der solange diese aktuell mindestens ein aktives Element (Wiedergabe oder pausiert). Absender können der Sitzung beitreten und der Warteschlange Elemente hinzufügen. Der Empfänger unterhält eine Sitzung für Elemente der Wiedergabeliste, bis das letzte Element die Wiedergabe abgeschlossen hat, oder der Sender die Wiedergabe anhält und die Sitzung beendet, oder bis ein Sender lädt eine neue Warteschlange in den Empfänger. Der Empfänger behält Informationen zu beendeten Warteschlangen standardmäßig. Sobald das letzte Element in der Warteschlange beendet wird, endet die Mediensitzung und die Warteschlange verschwindet.

Elemente der Medienwarteschlange erstellen und laden

Elemente der Medienwarteschlange werden im Cast-Framework als MediaQueueItem Instanz. Wenn du ein Medienelement in der Wiedergabeliste erstellst und die Media Player Library mit adaptiven Inhalten verwendest, kannst du die Vorab-Ladezeit so festlegen, dass der Player mit dem Puffern des Medienelements in der Wiedergabeliste beginnt, bevor das Element davor in der Wiedergabeliste fertig wiedergegeben ist. Automatische Wiedergabe des Elements einstellen auf "true" setzen, kann der Empfänger die Wiedergabe automatisch starten. Beispiel: können Sie 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();

Laden Sie ein Array von Elementen der Medienwarteschlange in der Warteschlange mithilfe des entsprechenden queueLoad RemoteMediaClient-Methode.

Statusaktualisierungen für die Medienwarteschlange erhalten

Wenn der Empfänger ein Element aus der Medienwarteschlange lädt, weist er ihm eine eindeutige ID zu, die für die Dauer der Sitzung (und die Lebensdauer der Warteschlange) gültig ist. Ihr Die App kann den Status der Warteschlange in Bezug auf das aktuell geladene Element lernen wird möglicherweise nicht wiedergegeben, wird geladen oder vorab geladen. Die MediaStatus gibt die folgenden Statusinformationen an:

  • getPreloadedItemId() method: Wenn das nächste Element vorab geladen wurde, wird die vorab geladene Element-ID zurückgegeben.
  • getLoadingItemId() method: gibt die Element-ID des Artikels zurück, der gerade geladen wird. in der Warteschlange aktiv sind) auf dem Empfänger.
  • getCurrentItemId() method: gibt die Element-ID des Elements zurück, das in der Warteschlange aktiv war (sie möglicherweise nicht abgespielt wurde) zum Zeitpunkt der Änderung des Medienstatus.
  • getQueueItems() (Eingestellt, stattdessen MediaQueue verwenden): Gibt die Liste der MediaQueueItem Instanzen als nicht änderbare Liste.

Ihre App kann die Liste der Artikel auch mithilfe der MediaQueue . Die Klasse ist ein spärliches Datenmodell der Medienwarteschlange. Damit wird die Liste der Element-IDs in der Warteschlange, die automatisch mit dem Empfänger synchronisiert wird. MediaQueue behält nicht alle MediaQueueItem da es zu viel Arbeitsspeicher benötigt, wenn die Warteschlange sehr lang ist. Stattdessen werden sie ruft die Artikel nach Bedarf ab und behält ein LruCache von zuletzt aufgerufene Elemente. Mit den folgenden Methoden können Sie auf die Medienwarteschlange zugreifen:

  • getItemIds() method: gibt die Liste aller Element-IDs der Reihe nach zurück.
  • getItemAtIndex() method: gibt das im Cache gespeicherte Element an einem bestimmten Index zurück. Wenn das Element nicht im Cache gespeichert ist, MediaQueue gibt null zurück und plant den Abruf des Elements. Beim Abrufen des Artikels wird MediaQueue.Callback#itemsUpdatedAtIndexes() aufgerufen. Wenn getItemAtIndex() noch einmal mit derselben ID aufgerufen wird, wird der Artikel zurückgegeben.
  • fetchMoteItemsRelativeToIndex() wird verwendet, wenn der Nutzer in der Benutzeroberfläche der Warteschlangen nach oben oder unten scrollt. und Ihre App möchte mehr Elemente aus der Cloud abrufen.

Verwenden Sie diese Methoden zusammen mit den anderen Medienstatusmethoden, um Ihre -App über den Status der Warteschlange und die Elemente in der Warteschlange. Zusätzlich zu vom Empfänger erhalten, kann Ihre App Änderungen am in die Warteschlange stellen, indem Sie RemoteMediaClient.Callback und MediaQueue.Callback

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 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, in einer vorhandenen Warteschlange, aktualisieren die Eigenschaften von Elementen in der Warteschlange, erstellen ein Element In der Warteschlange vor- oder zurückspringen, Eigenschaften der Warteschlange selbst festlegen (Ändern Sie z. B. den repeatMode-Algorithmus, mit dem das nächste Element ausgewählt wird) um Elemente aus der Warteschlange zu entfernen und sie neu anzuordnen.