Coda

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:

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 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 invece MediaQueue): restituisce l'elenco di MediaQueueItem 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 richiamando getItemAtIndex() 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.

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 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.