Il framework Cast fornisce classi di accodamento che supportano la creazione di elenchi.
di MediaQueueItem
di istanze VM, che possono essere create da MediaInfo
istanze come video o audio
trasmessi in streaming, da riprodurre in sequenza sul ricevitore. Questa coda di contenuti
possono essere modificate, riordinate, aggiornate e così via.
L'SDK ricevitore mantiene la coda e risponde alle operazioni sul purché la coda abbia 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 in coda fino al completamento della riproduzione dell'ultimo elemento oppure il mittente interrompe la riproduzione e termina la sessione, o finché non viene carica una nuova coda sul destinatario. Il destinatario non mantiene e informazioni sulle code terminate. Una volta che l'ultimo elemento in coda termina la sessione multimediale e la coda svanisce.
Creare e caricare elementi della coda multimediale
Un elemento di coda di contenuti multimediali è rappresentato nel framework di trasmissione come un
MediaQueueItem
in esecuzione in un'istanza Compute Engine.
Quando crei un elemento della coda multimediale, se utilizzi la libreria Media Player con contenuti adattabili, puoi impostare il tempo di precaricamento in modo che il player possa iniziare a mettere in buffer l'elemento della coda multimediale prima che l'elemento precedente nella coda finisca di essere riprodotto. Se l'attributo riproduzione automatica dell'elemento viene impostato su true, il destinatario può riprodurlo automaticamente. Ad esempio:
puoi utilizzare un pattern del generatore 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
.
Ricevi aggiornamenti sullo stato della coda multimediale
Quando il destinatario carica un elemento della coda multimediale, assegna un ID univoco all'elemento
che persiste per tutta la durata della sessione (e per tutta la durata della coda). Il tuo
l'app può apprendere lo stato della coda in termini di quale elemento è attualmente caricato
(potrebbe non essere in riproduzione), caricato o precaricato. La
MediaStatus
fornisce le seguenti informazioni sullo stato:
- metodo
getPreloadedItemId()
: se l'elemento successivo è stato precaricato, restituisce l'ID dell'elemento precaricato. getLoadingItemId()
: restituisce l'ID articolo dell'elemento attualmente in caricamento (ma non attivo in coda) sul destinatario.getCurrentItemId()
: restituisce l'ID elemento dell'elemento che era attivo nella coda (ovvero potrebbero non essere riprodotti) nel momento in cui si è verificato il cambiamento dello stato dei contenuti multimediali.getQueueItems()
(Deprecato, usa inveceMediaQueue
): restituisce l'elenco diMediaQueueItem
istanze come elenco non modificabile.
L'app può anche recuperare l'elenco di elementi utilizzando
MediaQueue
. La classe è un modello di dati sparsi della coda multimediale. Mantiene l'elenco
ID elemento in coda, che vengono sincronizzati automaticamente con il destinatario.
MediaQueue
non conserva tutti i valori
MediaQueueItem
perché ci vorrà troppa memoria quando la coda è molto lunga. Invece,
recupera gli elementi on demand e conserva un LruCache
del
elementi a cui è stato eseguito l'accesso di recente. Per accedere alla coda multimediale, puoi utilizzare questi metodi:
getItemIds()
: restituisce l'elenco di tutti gli ID elemento in ordine.getItemAtIndex()
: restituisce l'elemento memorizzato nella cache in un determinato indice. Se l'articolo non è memorizzato nella cache,MediaQueue
restituirànull
e pianifica il recupero dell'articolo. Quando l'elemento viene recuperato,MediaQueue.Callback#itemsUpdatedAtIndexes()
verrà chiamato e richiamandogetItemAtIndex()
con lo stesso ID restituire l'articolo.fetchMoteItemsRelativeToIndex()
viene utilizzato quando l'utente fa scorrere l'interfaccia utente della coda verso l'alto o verso il basso. e la tua app vuole recuperare più elementi dal cloud.
Utilizza questi metodi insieme agli altri metodi relativi allo stato dei media per informare il tuo
app sullo stato della coda e sugli elementi in coda. Oltre agli aggiornamenti dello stato dei contenuti multimediali dal ricevitore, la tua app può rilevare le modifiche alla coda implementando RemoteMediaClient.Callback
e MediaQueue.Callback
.
Inoltre, l'SDK Cast fornisce due classi di utilità per creare l'interfaccia utente per la coda.
MediaQueueRecyclerViewAdapter
, per il backup dei datiRecyclerView
MediaQueueListAdapter
, per il backup dei datiListAdapter
.
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 intervenire sugli elementi in coda, utilizza i metodi della coda del
RemoteMediaClient
. Consentono di caricare un array di elementi in una nuova coda, inserire elementi
una coda esistente, aggiornare le proprietà degli elementi in coda, creare un elemento
per mandare avanti o indietro la coda, impostare le proprietà della coda stessa
(ad esempio, modifica l'algoritmo repeatMode
che seleziona l'elemento successivo),
rimuovi elementi dalla coda e riordinali.