El framework de Cast proporciona clases de cola que admiten la creación de listas de instancias de MediaQueueItem
, que se pueden compilar a partir de instancias de MediaInfo
, como transmisiones de audio o video, para reproducirse de forma secuencial en el receptor. Esta fila de elementos de contenido se puede editar, reordenar, actualizar, etcétera.
El SDK de Receiver mantiene la fila y responde a las operaciones en la fila, siempre que esta tenga al menos un elemento activo (reproducido o pausado). Los remitentes pueden unirse a la sesión y agregar elementos a la fila. El receptor mantiene una sesión para los elementos de la cola hasta que el último elemento completa la reproducción o el remitente detiene la reproducción y finaliza la sesión, o hasta que un remitente carga una cola nueva en el receptor. El receptor no mantiene información sobre las filas cerradas de forma predeterminada. Una vez que finaliza el último elemento de la fila, se cierra la sesión multimedia y desaparece la fila.
Crea y carga elementos de la fila multimedia
Un elemento de fila multimedia se representa en el framework de Cast como una instancia de MediaQueueItem
.
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. 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 generador para crear el elemento de la fila de contenido multimedia de la siguiente manera:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
Carga un array de elementos de fila multimedia en la fila con el método queueLoad
apropiado de RemoteMediaClient
.
Cómo recibir actualizaciones de estado de la fila de contenido multimedia
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 app puede conocer el estado de la fila en términos de qué elemento está cargado actualmente (es posible que no se esté reproduciendo), se está cargando o se precargó. La clase MediaStatus
proporciona la siguiente información de estado:
- Método
getPreloadedItemId()
: Si el siguiente artículo se precargó, muestra el ID del artículo precargado. - Método
getLoadingItemId()
: Muestra el ID del elemento que se está cargando (pero que no está activo en la cola) en el receptor. - Método
getCurrentItemId()
: 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 del contenido multimedia. - Método
getQueueItems()
(obsoleto, usaMediaQueue
en su lugar): Muestra la lista de instancias deMediaQueueItem
como una lista no modificable.
Tu app también puede obtener la lista de elementos con la clase MediaQueue
. La clase es un modelo de datos disperso de la fila 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. 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 fila de contenido multimedia:
- Método
getItemIds()
: Muestra la lista de todos los IDs de elementos 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 programará la recuperación del elemento. Cuando se recupere el elemento, se llamará aMediaQueue.Callback#itemsUpdatedAtIndexes()
y, si vuelves a llamar agetItemAtIndex()
con el mismo ID, se mostrará el elemento. fetchMoteItemsRelativeToIndex()
se usa cuando el usuario desplaza la IU de la fila hacia arriba o hacia abajo, y tu app quiere recuperar más elementos de la nube.
Usa estos métodos junto con los otros métodos de estado de contenido multimedia para informar a tu app sobre el estado de la fila y los elementos de la fila. Además de las actualizaciones de estado del contenido multimedia del receptor, tu app puede detectar cambios en la fila implementando RemoteMediaClient.Callback
y MediaQueue.Callback
.
Además, el SDK de Cast proporciona dos clases de utilidad para crear una IU para las filas.
MediaQueueRecyclerViewAdapter
, para crear una copia de seguridad de los datos deRecyclerView
MediaQueueListAdapter
, para crear una copia de seguridad de los datos deListAdapter
.
Por ejemplo, para crear un RecyclerView
con MediaQueueRecyclerViewAdapter
, haz lo siguiente:
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 }
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); }
Edita la cola
Para operar en los elementos de la cola, usa los métodos de cola de la clase RemoteMediaClient
. 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.