Kolejkowanie

Platforma Cast udostępnia klasy kolejk, które obsługują tworzenie list instancji MediaQueueItem, które można tworzyć z instancji MediaInfo, takich jak strumienie wideo lub audio, aby odtwarzać je sekwencyjnie na odbiorniku. Ta kolejka elementów treści może być edytowana, zmieniana, aktualizowana itp.

Platforma Receiver SDK obsługuje kolejkę i reaguje na operacje na kolejce, o ile w kolejce znajduje się co najmniej 1 aktywny element (odtwarzany lub wstrzymany). Wysyłający mogą dołączyć do sesji i dodać elementy do kolejki. Odbiorca utrzymuje sesję dla elementów kolejki do momentu zakończenia odtwarzania ostatniego elementu lub do momentu, gdy nadawca zatrzyma odtwarzanie i zakończy sesję lub gdy nadawca załaduje nową kolejkę do odbiornika. Odbiornik domyślnie nie przechowuje żadnych informacji o zakończonych kolejkach. Gdy ostatni element w kolejce zakończy się, sesja multimediów zostanie zakończona, a kolejka zniknie.

Styled Media ReceiverDefault Media Receiver

Tworzenie i wczytywanie elementów kolejki multimediów

Element kolejki multimediów jest reprezentowany w ramach platformy Cast jako instancja MediaQueueItem. Podczas tworzenia elementu kolejki multimediów, jeśli używasz biblioteki odtwarzacza z treściami adaptacyjnymi, możesz ustawić czas wstępnego wczytywania, aby odtwarzacz mógł rozpocząć buforowanie elementu kolejki multimediów przed zakończeniem odtwarzania poprzedniego elementu. Ustawienie atrybutu automatycznego odtwarzania na wartość Prawda pozwala odtwarzać go automatycznie. Możesz na przykład użyć wzoru kreatora, aby utworzyć element kolejki multimediów w ten sposób:

KotlinJava
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

Załaduj tablicę elementów kolejki multimediów w kolejce, używając odpowiedniej metody queueLoad w funkcji RemoteMediaClient.

Otrzymywanie informacji o stanie kolejki multimediów

Gdy odbiornik wczyta element kolejki multimediów, przypisuje do niego unikalny identyfikator, który jest zachowywany przez czas trwania sesji (i całego okresu istnienia kolejki). Aplikacja może poznać stan kolejki, czyli który element jest obecnie wczytywany (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 załadowany, zwraca identyfikator wstępnie załadowanego elementu.
  • getLoadingItemId() method – zwraca identyfikator produktu, który jest obecnie wczytywany (ale nie jest aktywny w kolejce) na urządzeniu odbiorcy.
  • getCurrentItemId() method – zwraca identyfikator elementu, który był aktywny w kolejce (może nie być odtwarzany) w momencie zmiany stanu multimediów.
  • getQueueItems() (Używana tylko do celów kompatybilności wstecznej, użyj zamiast niej metody MediaQueue) – zwraca listę instancji MediaQueueItem jako listę niemodyfikowalną.

Aplikacja może też uzyskać listę elementów za pomocą klasy MediaQueue. Ta klasa to rzadki model danych kolejki multimediów. Przechowuje listę identyfikatorów elementów w kolejce, która jest automatycznie synchronizowana z odbiornikiem. MediaQueue nie przechowuje wszystkich MediaQueueItem, ponieważ zajmie to zbyt dużo pamięci, gdy kolejka będzie bardzo długa. Zamiast tego pobiera elementy na żądanie i przechowuje LruCache elementów ostatnio używanych elementów. Dostęp do kolejki multimediów możesz uzyskać w ten sposób:

  • getItemIds() method – zwraca listę wszystkich identyfikatorów produktów w porządku.
  • getItemAtIndex() method – zwraca element z pamięci podręcznej o podanym indeksie. Jeśli element nie jest przechowywany w pamięci podręcznej, MediaQueue zwróci wartość null i zaplanuje pobranie elementu. Gdy element zostanie pobrany, zostanie wywołana funkcja MediaQueue.Callback#itemsUpdatedAtIndexes(), a wywołanie funkcji getItemAtIndex() z tym samym identyfikatorem spowoduje zwrócenie elementu.
  • fetchMoteItemsRelativeToIndex() jest używane, gdy użytkownik przewija kolejkę w górę lub w dół, 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 elementach w niej. Oprócz aktualizacji stanu multimediów z odbiornika aplikacja może monitorować zmiany w kole, stosując interfejsy RemoteMediaClient.CallbackMediaQueue.Callback.

Pakiet Cast SDK udostępnia też 2 klasy pomocnicze do tworzenia interfejsu użytkownika do kolejkowania.

Aby na przykład utworzyć element RecyclerView za pomocą elementu MediaQueueRecyclerViewAdapter:

KotlinJava
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
}
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 operować na elementach w kolejce, użyj metod kolejki klasy RemoteMediaClient. Dzięki nim możesz wczytywać tablicę elementów do nowej kolejki, wstawiać elementy do istniejącej kolejki, aktualizować właściwości elementów w kolei, przesuwać elementy w kolei do przodu lub do tyłu, ustawiać właściwości samej kolejki (np. zmienić algorytm repeatMode, który wybiera następny element), usuwać elementy z kolejki i zmieniać ich kolejność.