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 MediaInfo instancias, como transmisiones de audio o video
, 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 contenido multimedia
Un elemento de la cola de contenido multimedia se representa en el framework de Cast como una
MediaQueueItem
instancia.
Cuando creas un elemento de la cola de contenido multimedia, 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 contenido multimedia 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 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();
Cómo recibir actualizaciones de estado de la cola 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 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 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 del contenido multimedia.getQueueItems()(obsoleto, usaMediaQueueen su lugar) método: Muestra la lista deMediaQueueIteminstancias 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 contenido multimedia. 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 cambio, 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:
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é,MediaQueuemostraránully programará la recuperación del elemento. Cuando se recupere el elemento , se llamará aMediaQueue.Callback#itemsUpdatedAtIndexes(), y volver a llamar agetItemAtIndex()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 del contenido multimedia para informar a tu app sobre el estado de la cola y los elementos que contiene. Además de
las actualizaciones de estado del contenido multimedia 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 la cola.
MediaQueueRecyclerViewAdapter, para respaldar los datos deRecyclerViewMediaQueueListAdapter, 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); }
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 en sí (por ejemplo, cambiar el algoritmo repeatMode que selecciona el siguiente elemento), quitar elementos de la cola y reordenar los elementos de la cola.