Coda

Il framework Cast fornisce classi di coda che supportano la creazione di elenchi di istanze MediaQueueItem, che possono essere create a partire da istanze MediaInfo, come gli stream video o audio, per la riproduzione sequenziale sul ricevitore. Questa coda di contenuti può essere modificata, riordinata, aggiornata e così via.

L'SDK ricevitore mantiene la coda e risponde alle operazioni in coda purché abbia almeno un elemento attivo in coda (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 a quando l'ultimo elemento non completa la riproduzione o il mittente interrompe la riproduzione e termina la sessione o fino a quando un mittente non carica una nuova coda sul destinatario. Per impostazione predefinita, il destinatario non conserva informazioni sulle code terminate. Al termine dell'ultimo elemento nella 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 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 eseguire il buffering dell'elemento nella coda multimediale prima che termini la riproduzione dell'elemento che precede l'elemento nella coda. Se l'attributo di riproduzione automatica dell'elemento è 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:

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

Carica un array di elementi in coda multimediali nella coda utilizzando il metodo queueLoad appropriato di RemoteMediaClient.

Ricevi aggiornamenti sullo stato delle code multimediali

Quando il destinatario carica un elemento della coda multimediale, assegna all'elemento un ID univoco che persiste per la durata della sessione (e per tutta la durata della coda). La tua app può conoscere lo stato della coda in termini di quale elemento è attualmente caricato (potrebbe non essere in riproduzione), caricamento o precaricato. La classe MediaStatus fornisce queste informazioni sullo stato:

  • Metodo getPreloadedItemId(): se l'articolo successivo è stato precaricato, restituisce l'ID articolo precaricato.
  • Metodo getLoadingItemId(): restituisce l'ID articolo dell'elemento attualmente in caricamento (ma non è attivo nella coda) sul destinatario.
  • Metodo getCurrentItemId(): restituisce l'ID elemento dell'elemento che era attivo nella coda (potrebbe non essere riprodotto) quando è avvenuta la modifica dello stato dei contenuti multimediali.
  • getQueueItems() (Deprecato, utilizza il metodo MediaQueue): restituisce l'elenco di istanze MediaQueueItem come elenco non modificabile.

La tua app può anche recuperare l'elenco di elementi utilizzando il corso MediaQueue. La classe è un modello di dati sparsi della coda multimediale. Mantiene in coda l'elenco degli ID elemento, che viene sincronizzato automaticamente con il destinatario. MediaQueue non conserva tutti i MediaQueueItem perché impiegherà troppa memoria quando la coda è molto lunga. Invece, recupera gli elementi on demand e conserva un LruCache di elementi a cui si è eseguito recentemente l'accesso. Per accedere alla coda multimediale puoi utilizzare i seguenti metodi:

  • getItemIds() method: 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 pianifica il recupero dell'elemento. Una volta recuperato l'elemento, verrà chiamato MediaQueue.Callback#itemsUpdatedAtIndexes() e la chiamata a getItemAtIndex() 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 relativi allo stato dei contenuti multimediali per informare la tua app sullo stato della coda e degli elementi in essa presenti. Oltre agli aggiornamenti dello stato dei contenuti multimediali dal destinatario, 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 un'interfaccia utente per le code.

Ad esempio, per creare un RecyclerView utilizzando MediaQueueRecyclerViewAdapter:

Kotlin
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
}
Java
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 eseguire operazioni sugli elementi in coda, utilizza i metodi in coda della classe RemoteMediaClient. che 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 retrocedere un elemento nella coda, impostare le proprietà della coda stessa (ad esempio modificare l'algoritmo repeatMode che seleziona l'elemento successivo), rimuovere gli elementi dalla coda e riordinare gli elementi in coda.