Platforma Cast udostępnia klasy kolejkowania, które obsługują tworzenie list instancji MediaQueueItem
, które można skompilować na podstawie instancji MediaInfo
, takich jak strumienie wideo lub audio, i odtwarzać sekwencyjnie z odbiornika. Elementy w tej kolejce można edytować, zmieniać, aktualizować i aktualizować itd.
Pakiet SDK Receiver obsługuje kolejkę i reaguje na operacje, które się w niej znajdują, dopóki ma ona co najmniej 1 aktywny element (odtwarzany lub wstrzymany). Nadawcy mogą dołączyć do sesji i dodać elementy do kolejki. Odbiorca utrzymuje sesję elementów kolejki do momentu zakończenia odtwarzania ostatniego elementu lub do momentu zatrzymania odtwarzania i zakończenia sesji przez nadawcę albo do momentu załadowania nowej kolejki przez nadawcę. Domyślnie odbiorca nie przechowuje żadnych informacji o zakończonych kolejkach. Gdy skończy się ostatni element w kolejce, sesja multimediów się zakończy, a kolejka znika.
Tworzenie i wczytywanie elementów kolejki multimediów
Element kolejki multimediów jest na platformie Cast reprezentowany jako instancja MediaQueueItem
.
Jeśli podczas tworzenia elementu kolejki multimediów używasz biblioteki multimediów z treściami adaptacyjnymi, możesz ustawić czas wstępnego wczytywania, tak by odtwarzacz mógł rozpocząć buforowanie elementu kolejki, zanim skończy się odtwarzanie elementu, który się przed nim znajduje. Ustawienie wartości atrybutu autoodtwarzania elementu umożliwia odbiorcy jego automatyczne odtwarzanie. Na przykład możesz użyć wzorca kreatora do utworzenia elementu kolejki multimediów w ten 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
.
Odbieranie aktualizacji stanu kolejki multimediów
Gdy odbiorca wczytuje element kolejki multimediów, przypisuje mu unikalny identyfikator, który będzie widoczny przez cały czas trwania sesji (i okresu aktywności kolejki). Aplikacja może poznać stan kolejki pod kątem tego, który element jest obecnie wczytywany (może nie być odtwarzany), wczytywany lub wstępnie wczytywany. Klasa MediaStatus
zawiera te informacje o stanie:
- Metoda
getPreloadedItemId()
– jeśli następny element został wstępnie wczytany, zwraca identyfikator tego elementu. - Metoda
getLoadingItemId()
– zwraca identyfikator elementu, który aktualnie wczytuje (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()
(Wycofana, zamiast niej użyjMediaQueue
) – zwraca listęMediaQueueItem
instancji w postaci listy, której nie można zmienić.
Aplikacja może też pobrać listę elementów za pomocą klasy MediaQueue
. Klasa to rozproszony model danych kolejki multimediów. Na liście znajduje się lista identyfikatorów produktów w kolejce, która jest automatycznie synchronizowana z odbiornikiem.
MediaQueue
nie przechowuje wszystkich danych z MediaQueueItem
, bo gdy kolejka jest bardzo długa, zajmuje to za dużo pamięci. Zamiast tego pobiera elementy na żądanie i zachowuje LruCache
ostatnio używanych elementów. Dostęp do kolejki multimediów możesz uzyskać, korzystając z tych metod:
- Metoda
getItemIds()
– zwraca listę wszystkich identyfikatorów elementów w kolejności. - Metoda
getItemAtIndex()
– zwraca element z pamięci podręcznej dla danego indeksu. Jeśli element nie jest przechowywany w pamięci podręcznej,MediaQueue
zwrócinull
i zaplanuje jego pobieranie. Po pobraniu elementu funkcjaMediaQueue.Callback#itemsUpdatedAtIndexes()
zostanie wywołana. Ponowne wywołaniegetItemAtIndex()
z tym samym identyfikatorem zwróci element. 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.
Aby poinformować aplikację o stanie kolejki i jej elementach, używaj tych metod razem z innymi metodami dotyczącymi stanu multimediów. Oprócz aktualizacji stanu multimediów od odbiorcy aplikacja może nasłuchiwać zmian w kolejce, implementując metody RemoteMediaClient.Callback
i MediaQueue.Callback
.
Oprócz tego pakiet Cast SDK udostępnia 2 klasy narzędzia do tworzenia UI do kolejkowania.
MediaQueueRecyclerViewAdapter
, na potrzeby tworzenia kopii zapasowej danych z organizacjiRecyclerView
MediaQueueListAdapter
na 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 wykonywać operacje na elementach w kolejce, użyj metod kolejki klasy RemoteMediaClient
. Pozwalają one wczytać tablicę elementów do nowej kolejki, wstawiać elementy do istniejącej kolejki, aktualizować właściwości elementów w kolejce, przenosić elementy w kolejce do przodu lub do tyłu, określać właściwości samej kolejki (np. zmienić algorytm repeatMode
wybierający następny element), usuwać elementy z kolejki i zmieniać ich kolejność.