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:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
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, usaMediaQueue
en su lugar): muestra la lista deMediaQueueItem
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 recuperaMediaQueue.Callback#itemsUpdatedAtIndexes()
y volver a llamar agetItemAtIndex()
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.
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 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.