Il framework Cast fornisce classi di accodamento che supportano la creazione di elenchi
di istanze MediaQueueItem
, che possono essere create da istanze MediaInfo
come stream video o audio, da riprodurre in sequenza sul ricevitore. Questa coda di elementi di contenuti
può essere modificata, riordinata, aggiornata e così via.
L'SDK Receiver gestisce la coda e risponde alle operazioni sulla coda finché la coda ha almeno un elemento attualmente attivo (in riproduzione o in pausa). I mittenti possono partecipare alla sessione e aggiungere elementi alla coda. Il destinatario mantiene una sessione per gli elementi della coda finché l'ultimo elemento non viene riprodotto o il mittente non interrompe la riproduzione e termina la sessione oppure finché un mittente non carica una nuova coda sul destinatario. Il destinatario non gestisce alcuna informazione sulle code terminate per impostazione predefinita. Al termine dell'ultimo elemento della coda, la sessione multimediale termina e la coda scompare.
Creare e caricare elementi della coda multimediale
Un elemento della coda multimediale è rappresentato nel framework Cast come un'istanza di
MediaQueueItem
.
Quando crei un elemento della coda multimediale, se utilizzi la libreria
del lettore multimediale con contenuti adattivi, puoi impostare
il tempo di precaricamento in modo che il player possa iniziare a memorizzare nella cache l'elemento della coda multimediale prima
che l'elemento precedente nella coda termini la riproduzione. Se imposti l'attributo di riproduzione automatica
dell'elemento su true, il destinatario può riprodurlo automaticamente. Ad esempio,
puoi utilizzare un pattern builder per creare l'elemento della coda multimediale nel seguente modo:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
Carica un array di elementi della coda multimediale nella coda utilizzando il metodo
queueLoad
appropriato di RemoteMediaClient
.
Ricevere aggiornamenti sullo stato della coda dei contenuti multimediali
Quando il destinatario carica un elemento della coda multimediale, gli assegna un ID univoco
che persiste per la durata della sessione (e della coda). La tua
app può conoscere lo stato della coda in termini di elemento attualmente caricato
(potrebbe non essere in riproduzione), in caricamento o precaricato. La classe
MediaStatus
fornisce queste informazioni sullo stato:
getPreloadedItemId()
method - If the next item has been preloaded, returns the preloaded item ID.getLoadingItemId()
method - Returns the item ID of the item that is currently loading (but isn't active in the queue) on the receiver.getCurrentItemId()
method - Returns the item ID of the item that that was active in the queue (it might not be playing) at the time the media status change happened.- Metodo
getQueueItems()
(deprecato, utilizzaMediaQueue
) - Restituisce l'elenco delle istanzeMediaQueueItem
come elenco non modificabile.
La tua app può anche ottenere l'elenco degli elementi utilizzando la classe
MediaQueue
. La classe è un modello di dati sparsi della coda multimediale. Mantiene l'elenco degli ID
degli elementi nella coda, che viene sincronizzato automaticamente con il ricevitore.
MediaQueue
non conserva tutti i
MediaQueueItem
perché occuperebbe troppa memoria quando la coda è molto lunga. Recupera invece gli elementi su richiesta e conserva un LruCache
degli elementi a cui è stato eseguito l'accesso di recente. Puoi utilizzare questi metodi per accedere alla coda dei contenuti multimediali:
- Metodo
getItemIds()
: restituisce l'elenco di tutti gli ID elemento in ordine. - Metodo
getItemAtIndex()
: restituisce l'elemento memorizzato nella cache in un determinato indice. Se l'elemento non è memorizzato nella cache,MediaQueue
restituirànull
e pianificherà il recupero dell'elemento. Quando l'elemento viene recuperato,MediaQueue.Callback#itemsUpdatedAtIndexes()
verrà chiamato e la chiamata digetItemAtIndex()
con lo stesso ID restituirà l'elemento. fetchMoteItemsRelativeToIndex()
viene utilizzato quando l'utente scorre l'interfaccia utente della coda verso l'alto o verso il basso e la tua app vuole recuperare altri elementi dal cloud.
Utilizza questi metodi insieme agli altri metodi di stato dei contenuti multimediali per informare la tua
app sullo stato della coda e degli elementi in coda. Oltre agli aggiornamenti dello stato dei contenuti multimediali dal destinatario, la tua app può rilevare le modifiche alla coda implementando RemoteMediaClient.Callback
e MediaQueue.Callback
.
Inoltre, Cast SDK fornisce due classi di utilità per creare l'interfaccia utente per la messa in coda.
MediaQueueRecyclerViewAdapter
, per il backup dei dati diRecyclerView
MediaQueueListAdapter
, per il backup dei dati diListAdapter
.
Ad esempio, per creare un RecyclerView
utilizzando 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); }
Modificare la coda
Per operare sugli elementi della coda, utilizza i metodi della coda della classe
RemoteMediaClient
. Questi metodi consentono di caricare un array di elementi in una nuova coda, inserire elementi in una coda esistente, aggiornare le proprietà degli elementi nella coda, far avanzare o arretrare un elemento nella coda, impostare le proprietà della coda stessa (ad esempio, modificare l'algoritmo repeatMode
che seleziona l'elemento successivo), rimuovere elementi dalla coda e riordinare gli elementi nella coda.