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, da riprodurre in sequenza sul ricevitore. Questa coda di elementi di contenuti può essere modificata, riordinata, aggiornata e così via.

L'SDK Receiver gestisce la coda e risponde alle operazioni sulla stessa finché contiene almeno un elemento attualmente attivo (in riproduzione o in pausa). I mittenti possono partecipare alla sessione e aggiungere elementi alla coda. Il ricevitore mantiene una sessione per gli elementi della coda fino al completamento della riproduzione dell'ultimo elemento o all'interruzione della riproduzione e alla chiusura della sessione da parte del mittente oppure fino a quando un mittente non carica una nuova coda sul ricevitore. Per impostazione predefinita, il destinatario non gestisce alcuna informazione sulle code terminate. Al termine dell'ultimo elemento della coda, la sessione multimediale termina e la coda scompare.

Creare e caricare elementi della coda multimediale

Un elemento della coda multimediale è rappresentato nel framework di trasmissione come un'istanza di MediaQueueItem. 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 di builder per creare l'elemento della coda multimediale come segue:

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 utilizzando il metodo queueLoad appropriato di RemoteMediaClient.

Ricevere aggiornamenti sullo stato della coda dei contenuti multimediali

Quando il ricevitore carica un elemento della coda multimediale, assegna all'elemento un ID univoco che persiste per la durata della sessione (e per la vita della coda). La tua app può conoscere 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 le seguenti informazioni sullo stato:

  • getPreloadedItemId() method: se l'elemento successivo è stato precaricato, restituisce l'ID dell'elemento precaricato.
  • Metodo getLoadingItemId(): restituisce l'ID articolo dell'articolo attualmente in carica (ma non attivo nella coda) sul destinatario.
  • metodo getCurrentItemId(): restituisce l'ID elemento dell'elemento attivo nella coda (potrebbe non essere in riproduzione) al momento della modifica dello stato dei contenuti multimediali.
  • Metodo getQueueItems() (deprecato, utilizza MediaQueue): restituisce l'elenco di MediaQueueItem come elenco non modificabile.

La tua app può anche ottenere l'elenco di elementi utilizzando la classe MediaQueue. La classe è un modello di dati sparsi della coda multimediale. Mantiene l'elenco degli ID elemento in coda, che viene sincronizzato automaticamente con il destinatario. MediaQueue non conserva tutti i MediaQueueItem perché occuperebbe troppa memoria quando la coda è molto lunga. Recupera gli elementi su richiesta e mantiene un LruCache degli elementi a cui hai eseguito l'accesso di recente. Per accedere alla coda dei contenuti multimediali, 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, viene chiamato MediaQueue.Callback#itemsUpdatedAtIndexes() e la chiamata di getItemAtIndex() con lo stesso ID consente di recuperarlo nuovamente.
  • 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 sugli elementi al suo interno. 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 eseguire operazioni sugli elementi della coda, utilizza i metodi della coda della classe RemoteMediaClient. 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 elementi dalla coda e riordinare gli elementi al suo interno.