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:
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()
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ż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()
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 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 aktualizacji stanu multimediów z odbiornika aplikacja może monitorować zmiany w kole, stosując interfejsy RemoteMediaClient.Callback
i 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); }
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ść.