Coda

Il framework Cast fornisce classi di coda che supportano la creazione di elenchi di istanze MediaQueueItem, che possono essere create da istanze MediaInfo come stream video o audio, per essere riprodotti 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 in 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 in coda finché l'ultimo elemento non termina la riproduzione o il mittente interrompe la riproduzione e termina la sessione oppure finché un mittente non carica una nuova coda sul ricevitore. Per impostazione predefinita, il destinatario non mantiene le informazioni sulle code terminate. Una volta terminato l'ultimo elemento della coda, la sessione multimediale termina e la coda scompare.

Creare e caricare elementi delle code di contenuti multimediali

Un elemento della coda multimediale è rappresentato nel framework Cast come un'istanza MediaQueueItem. Quando crei un elemento multimediale della coda, 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 multimediale della coda prima che la riproduzione dell'elemento davanti a quest'ultimo venga completata nella coda. Se imposti l'attributo della riproduzione automatica dell'elemento su true, il destinatario può riprodurlo automaticamente. Ad esempio, puoi utilizzare un pattern del builder 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 multimediali nella coda utilizzando il metodo queueLoad appropriato di RemoteMediaClient.

Ricevi aggiornamenti sullo stato della coda multimediale

Quando il destinatario carica un elemento coda di contenuti multimediali, assegna un ID univoco all'elemento che rimane per tutta la durata della sessione e la sua durata. L'app può conoscere lo stato della coda in termini di quale elemento è attualmente in fase di caricamento (potrebbe non essere in riproduzione), durante il caricamento o precaricato. Il corso MediaStatus fornisce queste informazioni sullo stato:

  • Metodo getPreloadedItemId(): se l'articolo successivo è stato precaricato, restituisce l'ID articolo precaricato.
  • Metodo getLoadingItemId(): restituisce l'ID elemento dell'elemento che sta caricando (ma non è attivo nella 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, utilizza MediaQueue) - Restituisce l'elenco di MediaQueueItem istanze 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. Conserva l'elenco degli ID elemento in coda, che vengono sincronizzati automaticamente con il ricevitore. MediaQueue non conserva tutto il contenuto di MediaQueueItem perché richiede troppa memoria quando la coda è molto lunga. Recupera invece gli elementi on demand e conserva una LruCache degli elementi a cui è stato eseguito l'accesso di recente. Per accedere alla coda multimediale puoi utilizzare i seguenti 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 è memorizzato nella cache, MediaQueue restituirà null e programmerà il recupero dell'elemento. Quando l'elemento viene recuperato, MediaQueue.Callback#itemsUpdatedAtIndexes() verrà chiamato e la chiamata di getItemAtIndex() con lo stesso ID restituirà l'elemento.
  • fetchMoteItemsRelativeToIndex() viene utilizzato quando l'utente scorre l'interfaccia utente in coda fino all'inizio o alla fine e la tua app vuole recuperare più elementi dal cloud.

Utilizza questi metodi insieme ad altri metodi relativi allo stato dei contenuti multimediali per informare l'app sullo stato della coda e sugli elementi in coda. Oltre agli aggiornamenti dello stato dei contenuti multimediali dal ricevitore, la tua app può rimanere in ascolto delle modifiche alla coda implementando RemoteMediaClient.Callback e MediaQueue.Callback.

Inoltre, l'SDK Cast fornisce due classi di utilità per la creazione dell'interfaccia utente per l'inserimento nella 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);
}

Modifica la coda

Per utilizzare gli elementi in coda, utilizza i metodi della coda della classe RemoteMediaClient. Consente di caricare un array di elementi in una nuova coda, inserire elementi in una coda esistente, aggiornare le proprietà degli elementi in coda, fare in modo che un elemento salti avanti o indietro nella coda, impostare le proprietà della coda stessa (ad esempio, cambiare l'algoritmo repeatMode che seleziona l'elemento successivo), rimuovere elementi dalla coda e riordinare gli elementi in coda.