Coda

Il framework Cast fornisce classi di accodamento che supportano la creazione di elenchi di istanze MediaQueueItem, che possono essere creati da istanze MediaInfo, come stream video o audio, per riprodurli in sequenza sul ricevitore. Questa coda di contenuti può essere modificata, riordinata, aggiornata e così via.

L'SDK ricevitore mantiene la coda e risponde alle operazioni sulla coda 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 della coda fino a quando l'ultimo elemento non completa la riproduzione o il mittente interrompe la riproduzione e termina la sessione oppure finché un mittente non carica una nuova coda sul destinatario. Il destinatario non mantiene alcuna informazione sulle code terminate per impostazione predefinita. Quando termina l'ultimo elemento in coda, la sessione multimediale termina e la coda scompare.

Creare e caricare elementi della coda multimediale

Un elemento di coda multimediale è rappresentato nel framework Cast come istanza MediaQueueItem. Quando crei un elemento della coda multimediale, se utilizzi la Raccolta del media player con i contenuti adattivi, puoi impostare il tempo di precaricamento in modo che il player possa iniziare il buffering dell'elemento della coda multimediale prima del termine della riproduzione dell'elemento precedente nella coda. 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:

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 della coda multimediale in 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 dell'intera durata della coda). La tua app può apprendere lo stato della coda in termini di quale elemento è attualmente caricato (potrebbe non essere in riproduzione), in fase di 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'articolo attualmente in caricamento (ma non attivo in coda) sul destinatario.
  • Metodo getCurrentItemId(): restituisce l'ID dell'elemento che era attivo nella coda (potrebbe non essere in riproduzione) al momento della modifica dello stato dei contenuti multimediali.
  • getQueueItems() (Deprecato, usa invece MediaQueue): restituisce l'elenco di istanze MediaQueueItem come elenco non modificabile.

La tua app può anche recuperare l'elenco di elementi utilizzando la classe MediaQueue. La classe è un modello di dati sparsi della coda multimediale. L'elenco degli ID elemento rimane in coda, che viene sincronizzata automaticamente con il destinatario. MediaQueue non conserva tutti i MediaQueueItem perché prenderà troppa memoria quando la coda è molto lunga. Recupera invece gli elementi on demand e conserva una LruCache degli elementi a cui hai eseguito l'accesso di recente. Per accedere alla coda multimediale, puoi utilizzare questi metodi:

  • 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 viene memorizzato nella cache, MediaQueue restituirà null e pianifica il recupero dell'elemento. Quando l'elemento viene recuperato, viene chiamato MediaQueue.Callback#itemsUpdatedAtIndexes() e, se chiami di nuovo getItemAtIndex() con lo stesso ID, l'elemento verrà restituito.
  • fetchMoteItemsRelativeToIndex() viene utilizzato quando l'utente fa scorrere l'interfaccia utente della coda verso l'alto o verso il basso e l'app vuole recuperare più elementi dal cloud.

Utilizza questi metodi insieme agli altri metodi relativi allo stato dei contenuti multimediali per comunicare alla tua app lo stato della coda e degli elementi in coda. 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 l'accodamento.

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 di coda della classe RemoteMediaClient. Ciò ti consente di caricare un array di elementi in una nuova coda, inserire elementi in una coda esistente, aggiornare le proprietà degli elementi in 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 elementi dalla coda e riordinare gli elementi in coda.