Agregar a una cola

El framework de Cast proporciona clases en fila que admiten la creación de listas. de MediaQueueItem que se pueden compilar a partir de instancias MediaInfo, como audio o video de secuencias de comandos para que se reproduzcan de forma secuencial en la app receptora. Esta fila de elementos de contenido se puede editar, reordenar, actualizar, etc.

El SDK de la app receptora mantiene la cola y responde a las operaciones en la en espera, siempre que esta tenga al menos un elemento activo (en reproducción o se pausó). Los remitentes pueden unirse a la sesión y agregar elementos a la cola. El receptor mantiene una sesión para los elementos en cola hasta que el último elemento complete la reproducción o el emisor detiene la reproducción y finaliza la sesión, o hasta que carga una nueva cola en el receptor. El receptor no mantiene información sobre colas finalizadas de forma predeterminada. Cuando el último elemento en la fila finaliza la sesión multimedia y desaparece la cola.

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

Un elemento de la cola de contenido multimedia se representa en el framework de Cast como MediaQueueItem instancia. Cuando creas un elemento de la fila de contenido multimedia, si estás utilizando el Reproductor multimedia Biblioteca con contenido adaptable, puedes configurar tiempo de precarga para que el reproductor pueda comenzar a almacenar en búfer el elemento de la cola de medios antes de el elemento que se encuentra delante de él en la fila termina de reproducirse. Configuración de la reproducción automática del elemento como verdadero permite que el receptor lo reproduzca automáticamente. Por ejemplo: puedes usar un patrón de compilador para crear tu elemento de cola de contenido multimedia 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 contenido multimedia en la cola, usa el archivo queueLoad método de RemoteMediaClient.

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

Cuando el receptor carga un elemento de la fila de contenido multimedia, le asigna un ID único al elemento. que persiste durante toda la sesión (y la vida de la cola). Tu La app puede conocer el estado de la cola en cuanto al elemento cargado en ese momento (es posible que no se esté reproduciendo), cargando o precargado. El MediaStatus proporciona la siguiente información de estado:

  • getPreloadedItemId() método: Si el siguiente elemento se cargó previamente, muestra el ID del elemento precargado.
  • getLoadingItemId() método: Devuelve el ID del elemento que se está cargando actualmente (pero no se está cargando). activo en la cola) en el receptor.
  • getCurrentItemId() método: Devuelve el ID del elemento que estaba activo en la cola (es no se esté reproduciendo) cuando se produjo el cambio de estado del contenido multimedia.
  • getQueueItems() (Obsoleto, usa MediaQueue en su lugar): muestra la lista de MediaQueueItem instancias como una lista no modificable.

Tu app también puede obtener la lista de elementos con el MediaQueue . La clase es un modelo de datos dispersos de la cola de contenido multimedia. Lleva la lista de IDs de artículos en la cola, que se sincroniza automáticamente con el receptor. MediaQueue no conserva todos los MediaQueueItem porque consumirá demasiada memoria cuando la cola sea muy larga. Por el contrario, recupera los elementos a pedido y conserva un LruCache de a los que accediste recientemente. Puedes usar estos métodos para acceder a la fila de contenido multimedia:

  • getItemIds() método: Muestra la lista de todos los ID de artículos 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 un programa para recuperar el elemento. Si el elemento se recupera MediaQueue.Callback#itemsUpdatedAtIndexes() y volver a llamar a getItemAtIndex() con el mismo ID devolver el artículo.
  • fetchMoteItemsRelativeToIndex() se usa cuando el usuario se desplaza por 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 otros métodos de estado de contenido multimedia para informar a tu app sobre el estado y los elementos en esta. Además de actualizaciones de estado del contenido multimedia del receptor, la app puede detectar cambios en la implementando RemoteMediaClient.Callback y MediaQueue.Callback

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

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

Editar la cola

Para realizar operaciones en los elementos de la cola, usa los métodos de cola del RemoteMediaClient . Te permiten cargar un array de elementos en una cola nueva, insertar elementos actualizar las propiedades de los elementos en una cola, crear un elemento avanzar o retroceder en la cola, definir las propiedades de la cola (por ejemplo, cambia el algoritmo repeatMode que selecciona el siguiente elemento) eliminar elementos de la fila y reordenarlos en la fila.