O framework Cast oferece classes de enfileiramento que aceitam a criação de listas
de MediaQueueItem
instâncias, que podem ser criadas com instâncias de MediaInfo, como streams de vídeo ou áudio
, para serem reproduzidas sequencialmente no receptor. Essa fila de itens de conteúdo pode ser editada, reordenada, atualizada e assim por diante.
O SDK do receptor mantém a fila e responde às operações nela enquanto houver pelo menos um item ativo (em reprodução ou pausado). Os remetentes podem participar da sessão e adicionar itens à fila. O receptor mantém uma sessão para itens de fila até que o último item termine a reprodução ou o remetente a interrompa e encerre a sessão, ou até que um remetente carregue uma nova fila no receptor. Por padrão, o receptor não mantém nenhuma informação sobre filas encerradas. Quando o último item da fila termina, a sessão de mídia é encerrada e a fila desaparece.
Criar e carregar itens de fila de mídia
Um item de fila de mídia é representado no framework Cast como uma
MediaQueueItem
instância.
Ao criar um item de fila de mídia, se você estiver usando a Biblioteca
do Player de Mídia com conteúdo adaptável, poderá definir o
tempo de pré-carregamento para que o player possa começar a armazenar em buffer o item de fila de mídia antes que
o item à frente dele na fila termine a reprodução. Definir o atributo de reprodução automática do item como verdadeiro permite que o receptor o reproduza automaticamente. Por exemplo, você pode usar um padrão de builder para criar o item de fila de mídia da seguinte maneira:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
Carregue uma matriz de itens de fila de mídia na fila usando o método apropriado
queueLoad
de RemoteMediaClient.
Receber atualizações de status da fila de mídia
Quando o receptor carrega um item de fila de mídia, ele atribui um ID exclusivo ao item que persiste durante a sessão (e a vida útil da fila). Seu app pode aprender o status da fila em termos de qual item está carregado no momento (talvez não esteja sendo reproduzido), carregando ou pré-carregado. A classe
MediaStatus
fornece essas informações de status:
getPreloadedItemId()método: se o próximo item tiver sido pré-carregado, retorna o ID do item pré-carregado.getLoadingItemId()método: retorna o ID do item que está sendo carregado no momento (mas não está ativo na fila) no receptor.getCurrentItemId()método: retorna o ID do item que estava ativo na fila (talvez não esteja sendo reproduzido) no momento em que a mudança de status da mídia ocorreu.getQueueItems()(Descontinuado, useMediaQueueem vez disso) método - Retorna a lista deMediaQueueIteminstâncias como uma lista não modificável.
Seu app também pode receber a lista de itens usando a
MediaQueue
classe. A classe é um modelo de dados esparso da fila de mídia. Ela mantém a lista de IDs de itens na fila, que é sincronizada automaticamente com o receptor.
MediaQueue não mantém todos os
MediaQueueItem
porque isso ocupa muita memória quando a fila é muito longa. Em vez disso, ele
busca os itens sob demanda e mantém um LruCache de
itens acessados recentemente. Você pode usar esses métodos para acessar a fila de mídia:
getItemIds()método: retorna a lista de todos os IDs de itens em ordem.getItemAtIndex()método: retorna o item armazenado em cache em um determinado índice. Se o item não estiver armazenado em cache,MediaQueuevai retornarnulle agendar a busca do item. Quando o item for buscado,MediaQueue.Callback#itemsUpdatedAtIndexes()será chamado, e chamargetItemAtIndex()com o mesmo ID novamente vai retornar o item.fetchMoteItemsRelativeToIndex()é usado quando o usuário rola a interface da fila para cima ou para baixo, e o app quer buscar mais itens na nuvem.
Use esses métodos com os outros métodos de status de mídia para informar seu app sobre o status da fila e os itens nela. Além das
atualizações de status de mídia do receptor, seu app pode detectar mudanças na
fila implementando
RemoteMediaClient.Callback
e
MediaQueue.Callback.
Além disso, o SDK do Cast oferece duas classes de utilitários para criar a interface de enfileiramento.
MediaQueueRecyclerViewAdapter, para fazer backup dos dados deRecyclerViewMediaQueueListAdapter, para fazer backup dos dados deListAdapter.
Por exemplo, para criar um RecyclerView usando MediaQueueRecyclerViewAdapter:
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 a fila
Para operar nos itens da fila, use os métodos de fila da
RemoteMediaClient
classe. Eles permitem carregar uma matriz de itens em uma nova fila, inserir itens em uma fila atual, atualizar as propriedades dos itens na fila, fazer um item avançar ou retroceder na fila, definir as propriedades da fila em si (por exemplo, mudar o algoritmo repeatMode que seleciona o próximo item), remover itens da fila e reordenar os itens na fila.