Kolejkowanie

Platforma Cast udostępnia klasy kolejkowania, które obsługują tworzenie list z MediaQueueItem które mogą być tworzone na podstawie instancji MediaInfo, takich jak wideo lub audio strumieniowych, aby odtwarzać je sekwencyjnie na odbiorniku. Ta kolejka elementów treści można edytować, zmieniać kolejność, aktualizować itd.

Platforma Receiver SDK obsługuje kolejkę i reaguje na operacje na kolejce, dopóki w kolejce znajduje się co najmniej 1 aktywny element (odtwarzany lub wstrzymany). Nadawcy 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 do momentu, gdy nadawca załaduje nową kolejkę na odbiorniku. Odbiorca nie przechowuje żadnych informacje o zakończonych kolejkach. Gdy ostatni element w kolejce kończy się sesja multimediów, a kolejka znika.

Tworzenie i wczytywanie elementów kolejki multimediów

Element kolejki multimediów jest reprezentowany w ramach platformy Cast jako instancjaMediaQueueItem. Jeśli podczas tworzenia elementu kolejki multimediów używasz odtwarzacza z biblioteki z treścią adaptacyjną, by odtwarzacz mógł rozpocząć buforowanie elementu kolejki element znajdujący się przed nim w kolejce zostanie odtworzony. ustawianie autoodtwarzania elementu; ma wartość true (prawda), dzięki czemu odbiorca może automatycznie odtworzyć dany materiał. Przykład: możesz użyć wzorca narzędzia, aby utworzyć element kolejki multimediów w następujący 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();

Ładuj tablicę elementów kolejki multimediów w kolejce, używając odpowiedniego queueLoad metoda RemoteMediaClient.

Odbieranie aktualizacji stanu kolejki multimediów

Gdy odbiorca wczytuje element kolejki multimediów, przypisuje mu unikalny identyfikator. która będzie aktywna przez cały czas trwania sesji (i całej kolejki). Twoje aplikacja może poznać stan kolejki pod kątem aktualnie załadowanego elementu (może się nie odtwarzać), wczytywać lub być wstępnie wczytywana. MediaStatus klasa zawiera następujące informacje o stanie:

  • getPreloadedItemId() metoda – jeśli następny element został wstępnie wczytany, zwraca jego identyfikator.
  • getLoadingItemId() metoda – zwraca identyfikator aktualnie wczytywanego elementu (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, zamiast niej użyj MediaQueue) – zwraca listę Instancje MediaQueueItem jako listę, której nie można zmienić.

Aplikacja może też pobrać listę elementów za pomocą funkcji MediaQueue zajęcia. Klasa to rozproszony model danych kolejki multimediów. Przechowuje ono listę identyfikatorów elementów w kolejce, która jest automatycznie synchronizowana z odbiornikiem. MediaQueue nie przechowuje wszystkich MediaQueueItem. ponieważ bardzo długa kolejka powoduje zużywanie zbyt dużej ilości pamięci. Zamiast tego pobiera produkty na żądanie i utrzymuje LruCache wartości ostatnio używane elementy. Dostęp do kolejki multimediów możesz uzyskać, korzystając z tych metod:

  • getItemIds() metoda – zwraca listę wszystkich identyfikatorów elementów w kolejności.
  • getItemAtIndex() method – zwraca element z pamięci podręcznej o podanym indeksie. Jeśli produkt nie jest przechowywany w pamięci podręcznej, MediaQueue zwróci wartość null i zaplanuje pobieranie elementu. Gdy element zostanie pobrany, MediaQueue.Callback#itemsUpdatedAtIndexes() zostanie wywołany i ponownie nawiąże połączenie z numerem getItemAtIndex() z tym samym identyfikatorem zwrócić produkt.
  • Znak fetchMoteItemsRelativeToIndex() jest używany, gdy użytkownik przewija interfejs kolejki w górę lub w dół. a aplikacja chce pobrać więcej elementów z chmury.

Korzystaj z tych metod razem z innymi metodami określania stanu multimediów, aby przekazywać o stanie kolejki i elementach w kolejce. Oprócz aktualizacji stanu multimediów z odbiornika aplikacja może monitorować zmiany w kole, stosując interfejsy RemoteMediaClient.CallbackMediaQueue.Callback.

Oprócz tego pakiet Cast SDK udostępnia 2 klasy narzędzia 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);
}

Edytowanie kolejki

Aby wykonywać operacje na elementach w kolejce, użyj metod dotyczących kolejki RemoteMediaClient zajęcia. Dzięki nim możesz załadować tablicę elementów do nowej kolejki, wstawić elementy do istniejącej kolejki, zaktualizować właściwości elementów w kolei, spowodować przesunięcie elementu w kolei do przodu lub do tyłu, ustawić właściwości samej kolejki (np. zmienić algorytm repeatMode, który wybiera następny element), usunąć elementy z kolei i zmienić ich kolejność.