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:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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żyjMediaQueue
) – zwraca listę instancjiMediaQueueItem
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 kodnull
i zaplanuje jego pobieranie. Po pobraniu elementu funkcjaMediaQueue.Callback#itemsUpdatedAtIndexes()
zostanie wywołana, a wywołaniegetItemAtIndex()
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.
MediaQueueRecyclerViewAdapter
, aby utworzyć kopię zapasową danych zRecyclerView
MediaQueueListAdapter
, aby utworzyć kopię zapasową danych zListAdapter
.
Aby na przykład utworzyć RecyclerView
za pomocą właściwości MediaQueueRecyclerViewAdapter
:
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); }
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.