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 crei un elemento della coda multimediale, se utilizzi la libreria Media Player con contenuti adattabili, puoi impostare il tempo di precaricamento in modo che il player possa iniziare a mettere in buffer l'elemento della coda multimediale prima che l'elemento precedente nella coda finisca di essere riprodotto. 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 nella 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 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:

  • metodo getPreloadedItemId(): se l'elemento successivo è stato precaricato, restituisce l'ID dell'elemento 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 agli aggiornamenti dello stato dei contenuti multimediali dal ricevitore, la tua app può rilevare 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.

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);
}

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