El framework de Cast proporciona clases en 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 video o audio, a fin de que se reproduzcan de forma secuencial en el receptor. Esta fila de elementos de contenido se puede editar, reordenar, actualizar, etcétera.
El SDK de la app receptora mantiene la cola y responde a sus operaciones, siempre y cuando haya al menos un elemento activo (reproducción o pausado). Los remitentes pueden unirse a la sesión y agregar elementos a la cola. El receptor mantiene una sesión de elementos en 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 cargue una cola nueva en el receptor. De forma predeterminada, el receptor no mantiene información sobre las colas finalizadas. Una vez que finaliza el último elemento de la cola, la sesión multimedia finaliza y la cola desaparece.
Crea y carga elementos de la fila de contenido multimedia
Un elemento de la cola de medios se representa en el framework de Cast como una instancia de MediaQueueItem
.
Cuando creas un elemento de cola de contenido multimedia, si usas la biblioteca de Media Player con contenido adaptable, puedes configurar el tiempo de precarga para que el reproductor pueda comenzar a almacenar en búfer el elemento de la fila de medios antes de que el elemento anterior en la cola termine de reproducirse. Establecer el atributo de reproducción automática del elemento en 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 medios 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 la cola de contenido multimedia en la cola con el método queueLoad
correspondiente de RemoteMediaClient
.
Recibe actualizaciones de estado de las colas de contenido multimedia
Cuando el receptor carga un elemento de la cola de medios, asigna un ID único al elemento que persiste durante toda la sesión (y la vida 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 clase MediaStatus
proporciona la siguiente información de estado:
- Método
getPreloadedItemId()
: Si se cargó previamente el siguiente elemento, se mostrará el ID del elemento precargado. - Método
getLoadingItemId()
: Muestra el ID del elemento que se está cargando (pero 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 ocurrió el cambio de estado multimedia. getQueueItems()
(obsoleto; usaMediaQueue
en su lugar): Muestra la lista de instancias deMediaQueueItem
como una lista que no se puede modificar.
Tu app también puede obtener la lista de elementos mediante la clase MediaQueue
. La clase es un modelo de datos dispersos de la cola de medios. Mantiene la lista de ID de elementos en la cola, que se sincroniza automáticamente con el receptor.
MediaQueue
no conserva todos los MediaQueueItem
porque requerirá 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 contenido multimedia:
- Método
getItemIds()
: Muestra la lista de todos los ID 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 se volverá a llamar agetItemAtIndex()
con el mismo ID. fetchMoteItemsRelativeToIndex()
se usa cuando el usuario se desplaza por la IU de la cola hacia la parte superior o inferior y la 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 la app sobre el estado de la cola y los elementos en ella. Además de las actualizaciones de estado del receptor de contenido multimedia, tu app puede implementar cambios en la cola mediante la implementación de RemoteMediaClient.Callback
y MediaQueue.Callback
.
Además, el SDK de Cast proporciona dos clases de utilidades a fin de crear IU para las colas.
MediaQueueRecyclerViewAdapter
, para respaldar los datos deRecyclerView
MediaQueueListAdapter
, para respaldar 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); }
Editar la cola
Para operar en los elementos de la cola, usa los métodos de cola de la clase RemoteMediaClient
. Estas te permiten cargar un array de elementos en una cola nueva, insertar elementos en una cola existente, actualizar las propiedades de los elementos en la cola, hacer que un elemento salte hacia adelante o hacia atrás en la cola, configurar las propiedades de la cola en sí (por ejemplo, cambiar el algoritmo repeatMode
que selecciona el siguiente elemento), quitar elementos de la cola y reordenarlos.