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.

Pakiet SDK Receiver obsługuje kolejkę i odpowiada na operacje na jeśli jest w niej co najmniej jeden aktywny element (odtwarzany lub wstrzymane). 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 nadawca zatrzymuje odtwarzanie i kończy sesję lub dopóki nadawca wczytuje nową kolejkę do odbiornika. 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 na platformie Cast reprezentowany jako MediaQueueItem instancji. 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() metoda – zwraca identyfikator elementu, który był aktywny w kolejce (wartość może nie być odtwarzane) 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() metoda – zwraca element z pamięci podręcznej dla danego indeksu. Jeśli produkt nie jest przechowywany w pamięci podręcznej, MediaQueue zwróci wartość null i zaplanuje pobranie 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 aktualizacje stanu multimediów od odbiornika, aplikacja może nasłuchiwać zmian przez wdrożenie RemoteMediaClient.Callback oraz MediaQueue.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);
}

Edytuj kolejkę

Aby wykonywać operacje na elementach w kolejce, użyj metod dotyczących kolejki RemoteMediaClient zajęcia. Umożliwiają one wczytanie tablicy elementów do nowej kolejki, wstawianie elementów do istniejącą kolejkę, zaktualizować właściwości elementów w kolejce, utworzyć element przejście do przodu lub do tyłu w kolejce, ustaw właściwości samej kolejki (np. zmień algorytm repeatMode, który wybiera następny element). usuwać elementy z kolejki i zmieniać ich kolejność.