Agregar a una cola

El framework de Cast proporciona clases de colas que admiten la creación de listas de MediaQueueItem instancias, que se pueden compilar a partir de instancias de MediaInfo, como transmisiones de video o audio , para reproducirse de forma secuencial en el receptor. Esta cola de elementos de contenido se puede editar, reordenar, actualizar, etcétera.

El SDK de Receiver mantiene la cola y responde a las operaciones en ella siempre que tenga al menos un elemento activo (en reproducción o en pausa). Los emisores pueden unirse a la sesión y agregar elementos a la cola. El receptor mantiene una sesión para los elementos de la cola hasta que el último elemento completa la reproducción o el emisor la detiene y finaliza la sesión, o hasta que un emisor carga una cola nueva en el receptor. De forma predeterminada, el receptor no mantiene ninguna información sobre las colas finalizadas. Una vez que finaliza el último elemento de la cola, la sesión multimedia termina y la cola desaparece.

Cómo crear y cargar elementos de la cola de medios

Un elemento de la cola de medios se representa en el framework de Cast como una MediaQueueItem instancia. Cuando creas un elemento de la cola de medios, si usas la biblioteca de Media Player con contenido adaptable, puedes establecer el tiempo de carga previa para que el reproductor pueda comenzar a almacenar en búfer el elemento de la cola de medios antes de que termine de reproducirse el elemento que está delante de él en la cola. Si estableces el atributo de reproducción automática del elemento como verdadero, el receptor podrá reproducirlo automáticamente. Por ejemplo, puedes usar un patrón de compilador para crear tu elemento de la cola de medios de la siguiente manera:

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

Para cargar un array de elementos de la cola de medios en la cola, usa el método queueLoad adecuado de RemoteMediaClient.

Cómo recibir actualizaciones de estado de la cola de medios

Cuando el receptor carga un elemento de la cola de medios, le asigna un ID único que persiste durante la sesión (y la vida útil de la cola). Tu app puede conocer el estado de la cola en términos de qué elemento está cargado actualmente (es posible que no se esté reproduciendo), cargando o precargado. La MediaStatus clase proporciona esta información de estado:

  • getPreloadedItemId() método: Si se precargó el siguiente elemento, muestra el ID del elemento precargado.
  • getLoadingItemId() método: Muestra el ID de artículo del elemento que se está cargando actualmente (pero no está activo en la cola) en el receptor.
  • getCurrentItemId() método: Muestra el ID del elemento que estaba activo en la cola (es posible que no se esté reproduciendo) en el momento en que se produjo el cambio de estado de los medios.
  • getQueueItems() (obsoleto, usa MediaQueue en su lugar) método: Muestra la lista de MediaQueueItem instancias como una lista no modificable.

Tu app también puede obtener la lista de elementos con la MediaQueue clase. La clase es un modelo de datos disperso de la cola de medios. Mantiene la lista de IDs de elementos en la cola, que se sincroniza automáticamente con el receptor. MediaQueue no mantiene todos los MediaQueueItem porque ocupará demasiada memoria cuando la cola sea muy larga. En su lugar, recupera los elementos a pedido y mantiene un LruCache de los elementos a los que se accedió recientemente. Puedes usar estos métodos para acceder a la cola de medios:

  • getItemIds() método: Muestra la lista de todos los IDs de elementos en orden.
  • getItemAtIndex() método: Muestra el elemento almacenado en caché en un índice determinado. Si el elemento no está almacenado en caché, MediaQueue mostrará null y programará la recuperación del elemento. Cuando se recupere el elemento , se llamará a MediaQueue.Callback#itemsUpdatedAtIndexes(), y volver a llamar a getItemAtIndex() con el mismo ID volverá a mostrar el elemento.
  • fetchMoteItemsRelativeToIndex() se usa cuando el usuario desplaza la IU de la cola hacia la parte superior o inferior, y tu app quiere recuperar más elementos de la nube.

Usa estos métodos junto con los otros métodos de estado de los medios para informar a tu app sobre el estado de la cola y los elementos que contiene. Además de las actualizaciones de estado de los medios del receptor, tu app puede escuchar los cambios en la cola implementando RemoteMediaClient.Callback y MediaQueue.Callback.

Además, el SDK de Cast proporciona dos clases de utilidad para crear la IU de las colas.

Por ejemplo, para crear un RecyclerView con MediaQueueRecyclerViewAdapter, haz lo siguiente:

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

Cómo editar la cola

Para operar con los elementos de la cola, usa los métodos de cola de la RemoteMediaClient clase. Estos te permiten cargar un array de elementos en una cola nueva, insertar elementos en una cola existente, actualizar las propiedades de los elementos de la cola, hacer que un elemento avance o retroceda en la cola, establecer las propiedades de la cola (por ejemplo, cambiar el algoritmo repeatMode que selecciona el siguiente elemento), quitar elementos de la cola y reordenar los elementos de la cola.