Il framework Cast fornisce classi di coda 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é questa contiene almeno un elemento attualmente attivo (in riproduzione o in pausa). I mittenti possono partecipare alla sessione e aggiungere elementi alla coda. Il ricevitore mantiene una sessione per gli elementi della coda finché l'ultimo elemento non completa la riproduzione o il mittente non interrompe la riproduzione e termina la sessione oppure finché un mittente non carica una nuova coda sul ricevitore. Per impostazione predefinita, il ricevitore non conserva alcuna informazione sulle code terminate. Una volta terminato l'ultimo elemento della coda, la sessione multimediale termina e la coda scompare.
Crea e carica 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 Media Player con contenuti adattivi, puoi impostare il tempo di precaricamento in modo che il player possa iniziare il buffering dell'elemento della coda multimediale prima che l'elemento precedente nella coda termini la riproduzione. Se l'attributo autoplay dell'elemento è impostato su true, il ricevitore 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.
Ricevi aggiornamenti sullo stato della coda dei contenuti multimediali
Quando il ricevitore carica un elemento della coda multimediale, assegna un ID univoco all'elemento, 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 fase di caricamento o precaricato. La classe MediaStatus fornisce queste informazioni sullo stato:
getPreloadedItemId()method - Se l'elemento successivo è stato precaricato, restituisce l'ID articolo precaricato.getLoadingItemId()method - Restituisce l'ID articolo dell'elemento attualmente in fase di caricamento (ma non attivo nella coda) sul ricevitore.getCurrentItemId()- Restituisce l'ID articolo dell'elemento attivo nella coda (potrebbe non essere in riproduzione) al momento della modifica dello stato dei contenuti multimediali.- Metodo
getQueueItems()(ritirato, utilizzaMediaQueue): restituisce l'elenco di istanzeMediaQueueItemcome elenco non modificabile.
La tua app può anche ottenere l'elenco di elementi utilizzando la classe MediaQueue. La classe è un modello di dati sparse della coda multimediale. Mantiene l'elenco degli ID articolo nella coda, che viene sincronizzato automaticamente con il ricevitore.
MediaQueue non conserva tutti i
MediaQueueItem
perché occuperebbero troppa memoria quando la coda è molto lunga. Invece, recupera gli elementi on demand e conserva un LruCache degli elementi a cui è stato eseguito l'accesso di recente. Puoi utilizzare questi metodi per accedere alla coda di contenuti multimediali:
- Metodo
getItemIds(): restituisce l'elenco di tutti gli ID articolo in ordine. - Metodo
getItemAtIndex(): restituisce l'elemento memorizzato nella cache in un determinato indice. Se l'elemento non è memorizzato nella cache,MediaQueuerestituirànulle pianificherà il recupero dell'elemento. Quando l'elemento viene recuperato, verrà chiamatoMediaQueue.Callback#itemsUpdatedAtIndexes()e la chiamata digetItemAtIndex()con lo stesso ID restituirà di nuovo l'elemento. fetchMoteItemsRelativeToIndex()viene utilizzato quando l'utente scorre la UI 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 al suo interno. Oltre agli aggiornamenti dello stato dei contenuti multimediali dal ricevitore, la tua app può ascoltare 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 dati diRecyclerViewMediaQueueListAdapter, 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); }
Modifica la coda
Per operare sugli elementi della coda, utilizza i metodi della coda della classe RemoteMediaClient. Questi ti 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 indietreggiare 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.