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 fila multimedia, si usas la biblioteca del reproductor multimedia con contenido adaptable, puedes establecer el tiempo de carga previa para que el reproductor comience a almacenar en búfer el elemento de la fila multimedia antes de que termine de reproducirse el elemento anterior en la fila. 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 generador para crear el elemento de la fila 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 cola de contenido multimedia, le asigna un ID único que persiste durante la sesión (y la vida útil 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.
  • Método getLoadingItemId(): Muestra el ID del elemento que se está cargando (pero que no está 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 clase. La clase es un modelo de datos dispersos de la cola de contenido multimedia. Mantiene la lista de IDs de elementos en la cola, que se sincroniza automáticamente con el receptor. MediaQueue no conserva todos los MediaQueueItem porque ocuparía 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.
  • Método getItemAtIndex(): 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 los otros métodos de estado multimedia para informar a tu app sobre el estado de la fila y los elementos de la fila. 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 clase. Estos te permiten cargar un array de elementos en una fila nueva, insertar elementos en una fila existente, actualizar las propiedades de los elementos de la fila, hacer que un elemento salte hacia adelante o hacia atrás en la fila, establecer las propiedades de la fila (por ejemplo, cambiar el algoritmo repeatMode que selecciona el siguiente elemento), quitar elementos de la fila y reordenarlos.