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:
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 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żyjMediaQueuezamiast tego) metoda – zwraca listę instancjiMediaQueueItemjako 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,MediaQueuezwróci wartośćnulli zaplanuje pobranie elementu. Gdy element zostanie pobrany,MediaQueue.Callback#itemsUpdatedAtIndexes()zostanie wywołana, a ponowne wywołaniegetItemAtIndex()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:
MediaQueueRecyclerViewAdapter, do obsługi danychRecyclerViewMediaQueueListAdapter, do obsługi danychListAdapter.
Aby na przykład utworzyć RecyclerView za pomocą 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 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.