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:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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żyjMediaQueue
) – zwraca listę InstancjeMediaQueueItem
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 numeremgetItemAtIndex()
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.
MediaQueueRecyclerViewAdapter
do tworzenia kopii zapasowej danychRecyclerView
MediaQueueListAdapter
do tworzenia kopii zapasowej danychListAdapter
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 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ść.