Kolejkowanie

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

Pakiet SDK odbiornika utrzymuje kolejkę i odpowiada na operacje na 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. Domyślnie odbiornik nie przechowuje żadnych informacji o zakończonych kolejkach. Gdy ostatni element w kolejce zostanie odtworzony, sesja multimedialna się zakończy, a kolejka zniknie.

Tworzenie i wczytywanie elementów kolejki multimediów

Element kolejki multimediów jest reprezentowany w platformie Cast jako MediaQueueItem instancja. Gdy tworzysz element kolejki multimediów, możesz ustawić czas wstępnego wczytywania, 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 autoodtwarzania elementu na wartość true umożliwia odbiornikowi automatyczne odtwarzanie. Możesz na przykład użyć wzorca konstruktora, 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 tablicę elementów kolejki multimediów do kolejki za pomocą odpowiedniej queueLoad metody 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 poznać stan kolejki, np. który element jest obecnie wczytany (może nie być odtwarzany), wczytywany lub wstępnie wczytany. Informacje o stanie są dostępne w klasie MediaStatus:

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

Twoja aplikacja może też pobrać 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 elementów MediaQueueItem , ponieważ w przypadku bardzo długiej kolejki zajęłoby to zbyt dużo pamięci. Zamiast tego pobiera elementy na żądanie i przechowuje w pamięci podręcznej LruCache ostatnio używane elementy. Do uzyskiwania dostępu do kolejki multimediów możesz używać 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, MediaQueue zwróci wartość null i zaplanuje pobranie elementu. Gdy element zostanie pobrany, MediaQueue.Callback#itemsUpdatedAtIndexes() zostanie wywołana, a ponowne wywołanie getItemAtIndex() z tym samym identyfikatorem zwróci element.
  • fetchMoteItemsRelativeToIndex() jest używana, gdy użytkownik przewija interfejs kolejki do góry lub do dołu, a Twoja 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 jej elementów. Oprócz informacji o stanie multimediów z odbiornika Twoja aplikacja może nasłuchiwać zmian w kolejce, implementując RemoteMediaClient.Callback i MediaQueue.Callback.

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

Aby na przykład 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. Umożliwiają one wczytywanie tablicy elementów do nowej kolejki, wstawianie elementów do istniejącej kolejki, aktualizowanie właściwości elementów w kolejce, przesuwanie elementu do przodu lub do tyłu w kolejce, ustawianie właściwości samej kolejki (np. zmienianie algorytmu repeatMode, który wybiera następny element), usuwanie elementów z kolejki i zmienianie kolejności elementów w kolejce.