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, w celu sekwencyjnego odtwarzania w odbiorniku. Kolejkę elementów treści można edytować, zmieniać ich kolejność, aktualizować itd.

Pakiet SDK odbiorcy utrzymuje kolejkę i reaguje na operacje w kolejce, dopóki co najmniej 1 element jest w niej aktywny (odtwarzany lub wstrzymany). Nadawcy mogą dołączyć do sesji i dodawać elementy do kolejki. Odbiornik utrzymuje sesję dotyczącą elementów w kolejce do momentu zakończenia odtwarzania ostatniego elementu, przez nadawcę zatrzymania odtwarzania i zakończenia sesji lub do momentu, gdy nadawca załaduje nową kolejkę w odbiorniku. Domyślnie odbiornik nie przechowuje żadnych informacji o zakończonych kolejkach. Po zakończeniu ostatniego elementu w kolejce sesja multimediów dobiega końca, a kolejka znika.

Tworzenie i wczytywanie elementów kolejki multimediów

Element kolejki multimediów jest reprezentowany w platformie przesyłania jako instancja MediaQueueItem. Jeśli podczas tworzenia elementu kolejki multimediów używasz biblioteki odtwarzacza multimediów z zawartością adaptacyjną, możesz ustawić czas wstępnego wczytywania, aby odtwarzacz mógł rozpocząć buforowanie elementu kolejki multimediów, zanim zostanie zakończony odtwarzanie elementu przed nim w kolejce. Jeśli atrybut autoodtwarzania elementu ma wartość Prawda, odbiorca może go automatycznie odtwarzać. Możesz np. użyć wzorca narzędzia do tworzenia elementu kolejki multimediów w taki 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 tablicę elementów kolejki multimediów w kolejce, używając odpowiedniej metody queueLoad RemoteMediaClient.

Odbieraj aktualizacje stanu kolejki multimediów

Po załadowaniu elementu z kolejki multimediów odbiornik przypisuje mu unikalny identyfikator, który zachowuje ważność przez czas trwania sesji (i czasu trwania kolejki). Aplikacja może poznać stan kolejki pod kątem tego, który element jest obecnie wczytywany (może się nie odtwarzać), wczytywany lub wstępnie wczytany. Klasa MediaStatus udostępnia te informacje o stanie:

  • getPreloadedItemId() – jeśli następny element został wczytany wstępnie, zwracany jest identyfikator tego elementu.
  • Metoda getLoadingItemId() – zwraca identyfikator elementu, który jest aktualnie wczytywany (ale nie jest aktywny w kolejce) w odbiorniku.
  • Metoda getCurrentItemId() – zwraca identyfikator elementu, który był aktywny w kolejce (może nie być odtwarzany) w momencie zmiany stanu multimediów.
  • getQueueItems()(Wycofano, zamiast tego użyj MediaQueue) – zwraca listę instancji MediaQueueItem w postaci listy, której nie można zmienić.

Aplikacja może też pobierać listę elementów za pomocą klasy MediaQueue. Klasa jest rozproszonym modelem danych kolejki multimediów. Przechowuje listę identyfikatorów produktów w kolejce, która jest automatycznie synchronizowana z odbiorcą. MediaQueue nie przechowuje całej MediaQueueItem, ponieważ gdy kolejka jest bardzo długa, może to zająć zbyt dużo pamięci. Zamiast tego pobiera elementy na żądanie i zachowuje LruCache ostatnio otwieranych elementów. Aby uzyskać dostęp do kolejki multimediów, możesz użyć tych metod:

  • Metoda getItemIds() – zwraca listę wszystkich identyfikatorów elementów w kolejności.
  • Metoda getItemAtIndex() – zwraca element zapisany w pamięci podręcznej w danym indeksie. Jeśli element nie jest przechowywany w pamięci podręcznej, MediaQueue zwraca kod null i zaplanuje jego pobieranie. Po pobraniu elementu funkcja MediaQueue.Callback#itemsUpdatedAtIndexes() zostanie wywołana, a wywołanie getItemAtIndex() z tym samym identyfikatorem spowoduje ponowne zwrócenie elementu.
  • Parametr fetchMoteItemsRelativeToIndex() jest używany, gdy użytkownik przewija interfejs kolejki na górę lub na dół, a aplikacja chce pobrać więcej elementów z chmury.

Korzystaj z tych metod razem z innymi metodami dotyczącymi stanu mediów, aby informować aplikację o stanie kolejki i jej elementów. Oprócz aktualizacji stanu multimediów z odbiorcy aplikacja może nasłuchiwać zmian w kolejce, implementując RemoteMediaClient.Callback i MediaQueue.Callback.

Dodatkowo pakiet SDK Cast udostępnia dwie klasy narzędzi do tworzenia UI do kolejkowania.

Aby na przykład utworzyć RecyclerView za pomocą właściwości 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);
}

Edytuj kolejkę

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