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 si crea un elemento della coda multimediale, se utilizzi il player multimediale
raccolta con contenuti adattivi, puoi impostare
il tempo di precaricamento in modo che il player possa iniziare il buffering dell'elemento della coda multimediale prima
la riproduzione dell'elemento precedente
in coda. Impostazione della riproduzione automatica dell'elemento
su true consente al ricevitore di 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 di coda multimediale in coda utilizzando il metodo
queueLoad
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:
getPreloadedItemId()
: se l'elemento successivo è stato precaricato, restituisce l'ID articolo 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 a
gli aggiornamenti sullo stato dei contenuti multimediali dal destinatario, la tua app può ascoltare le modifiche
in coda implementando
RemoteMediaClient.Callback
e
MediaQueue.Callback
.
Inoltre, l'SDK Cast fornisce due classi di utilità per creare un'interfaccia utente per l'accodamento.
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); }
Modifica 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.