Kolejkowanie

Platforma Cast udostępnia klasy kolejkowania, które obsługują tworzenie list instancji MediaQueueItem, które można tworzyć na podstawie instancji MediaInfo, takich jak strumienie wideo lub audio, aby odtwarzać je sekwencyjnie na odbiorniku. Kolejkę elementów treści można edytować, zmieniać jej kolejność, aktualizować itp.

Pakiet SDK odbiornika utrzymuje kolejkę i odpowiada na operacje w niej, dopóki zawiera ona co najmniej 1 aktywny element (odtwarzany lub wstrzymany). Nadawcy mogą dołączyć do sesji i dodawać elementy do kolejki. Odbiornik utrzymuje sesję dla elementów kolejki, dopóki ostatni element nie zostanie odtworzony lub nadawca nie zatrzyma odtwarzania i nie zakończy sesji albo dopóki nadawca nie wczyta nowej kolejki na odbiorniku. Odbiorca domyślnie nie przechowuje żadnych informacji o zakończonych kolejkach. Po zakończeniu odtwarzania ostatniego elementu w kolejce sesja multimediów kończy się, a kolejka znika.

Tworzenie i wczytywanie elementów kolejki multimediów

Element kolejki multimediów jest reprezentowany w platformie Cast jako instancja MediaQueueItem. Jeśli podczas tworzenia elementu kolejki multimediów używasz biblioteki odtwarzacza multimediów z treściami adaptacyjnymi, możesz ustawić czas wstępnego buforowania, aby odtwarzacz mógł rozpocząć buforowanie elementu kolejki multimediów, zanim skończy się odtwarzanie elementu znajdującego się przed nim w kolejce. Ustawienie atrybutu automatycznego odtwarzania elementu na wartość „true” umożliwia automatyczne odtwarzanie go przez odbiornik. Możesz na przykład użyć wzorca kreatora, aby utworzyć element kolejki multimediów w ten sposób:

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

Wczytaj do kolejki tablicę elementów kolejki multimediów, korzystając z odpowiedniej metody queueLoad RemoteMediaClient.

Otrzymywanie informacji o stanie kolejki multimediów

Gdy odbiornik wczytuje element kolejki multimediów, przypisuje mu unikalny identyfikator, który jest zachowywany przez cały czas trwania sesji (i kolejki). Twoja aplikacja może sprawdzać stan kolejki, czyli który element jest obecnie wczytany (może nie być odtwarzany), wczytywany lub wstępnie wczytany. Klasa MediaStatus zawiera te informacje o stanie:

  • getPreloadedItemId() method – jeśli następny element został wstępnie wczytany, zwraca jego identyfikator.
  • getLoadingItemId() method – zwraca identyfikator produktu, który jest obecnie wczytywany (ale nie jest aktywny w kolejce) na odbiorniku.
  • getCurrentItemId() method – zwraca identyfikator elementu, który był aktywny w kolejce (może nie być odtwarzany) w momencie zmiany stanu multimediów.
  • getQueueItems() (Wycofana, używaj MediaQueue) – zwraca listę instancji MediaQueueItem jako listę niemodyfikowalną.

Aplikacja może też pobrać listę produktów za pomocą klasy MediaQueue. Klasa jest modelem danych rzadkich kolejki multimediów. Zawiera listę identyfikatorów elementów w kolejce, która jest automatycznie synchronizowana z odbiornikiem. MediaQueue nie przechowuje wszystkich MediaQueueItem, ponieważ przy bardzo długiej kolejce zajmowałoby to zbyt dużo pamięci. Zamiast tego pobiera elementy na żądanie i przechowuje LruCache ostatnio używanych elementów. Aby uzyskać dostęp do kolejki multimediów, możesz użyć tych metod:

  • getItemIds() metoda – zwraca listę wszystkich identyfikatorów elementów w kolejności.
  • getItemAtIndex() metoda – zwraca element z pamięci podręcznej pod danym indeksem. Jeśli element nie jest w pamięci podręcznej, funkcjaMediaQueue zwróci wartość null i zaplanuje pobranie elementu. Gdy element zostanie pobrany, wywoływana jest funkcja MediaQueue.Callback#itemsUpdatedAtIndexes(), a ponowne wywołanie funkcji getItemAtIndex() z tym samym identyfikatorem spowoduje zwrócenie elementu.
  • fetchMoteItemsRelativeToIndex() jest używany, gdy użytkownik przewija interfejs kolejki do góry lub do dołu, a aplikacja chce pobrać więcej elementów z chmury.

Używaj tych metod razem z innymi metodami stanu multimediów, aby informować aplikację o stanie kolejki i elementów w niej. Oprócz aktualizacji stanu multimediów z odbiornika aplikacja może nasłuchiwać zmian w kolejce, implementując RemoteMediaClient.CallbackMediaQueue.Callback.

Pakiet Cast SDK udostępnia też 2 klasy narzędziowe do tworzenia interfejsu kolejkowania.

Na przykład aby utworzyć RecyclerView za pomocą 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);
}

Edytowanie kolejki

Aby wykonywać operacje na elementach w kolejce, użyj metod kolejki klasy RemoteMediaClient. Pozwalają one wczytywać tablicę elementów do nowej kolejki, wstawiać elementy do istniejącej kolejki, aktualizować właściwości elementów w kolejce, przesuwać element do przodu lub do tyłu w kolejce, ustawiać właściwości samej kolejki (np. zmieniać repeatMode algorytm, który wybiera następny element), usuwać elementy z kolejki i zmieniać kolejność elementów w kolejce.