Il framework Cast fornisce classi di accodamento che supportano la creazione di elenchi
di MediaQueueItem
istanze, che possono essere create da istanze MediaInfo, come stream audio o video
, da riprodurre in sequenza sul ricevitore. Questa coda di elementi di contenuti può essere modificata, riordinata, aggiornata e così via.
L'SDK del ricevitore 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 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. 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'
MediaQueueItem
istanza.
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 a eseguire il buffering dell'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 ricevitore può riprodurlo automaticamente. Ad esempio, puoi utilizzare un pattern di creazione per creare l'elemento della coda multimediale come segue:
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 appropriato
queueLoad
di RemoteMediaClient.
Ricevere aggiornamenti sullo stato della coda multimediale
Quando il ricevitore carica un elemento della coda multimediale, assegna all'elemento 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()metodo: se l'elemento successivo è stato precaricato, restituisce l'ID articolo precaricato.getLoadingItemId()metodo: restituisce l'ID articolo dell'elemento attualmente in caricamento (ma non attivo nella coda) sul ricevitore.getCurrentItemId()metodo: restituisce l'ID articolo dell'elemento attivo nella coda (potrebbe non essere in riproduzione) al momento della modifica dello stato multimediale.getQueueItems()(deprecato, utilizza inveceMediaQueue) metodo: restituisce l'elenco delle istanzeMediaQueueItemcome elenco non modificabile.
La tua app può anche recuperare l'elenco degli elementi utilizzando la
MediaQueue
classe. 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 gli
MediaQueueItem
perché occuperebbe troppa memoria quando la coda è molto lunga. Recupera invece gli elementi su richiesta e mantiene un LruCache di
elementi a cui è stato eseguito l'accesso di recente. Puoi utilizzare questi metodi per accedere alla coda multimediale:
getItemIds()metodo - Restituisce l'elenco di tutti gli ID degli elementi in ordine.getItemAtIndex()metodo: 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,MediaQueue.Callback#itemsUpdatedAtIndexes()verrà chiamato e la chiamata di nuovo agetItemAtIndex()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 multimediale per informare la tua app sullo stato della coda e degli elementi nella coda. Oltre agli
aggiornamenti dello stato multimediale 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 l'accodamento.
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); }
Modificare la coda
Per operare sugli elementi della coda, utilizza i metodi della coda della
RemoteMediaClient
classe. Questi metodi 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, spostare un elemento in avanti o indietro 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.