O framework do Cast oferece classes de enfileiramento que oferecem suporte à criação de listas
de instâncias de MediaQueueItem
,
que podem ser criadas com base em instâncias de MediaInfo
, como streams de vídeo ou
áudio, para reprodução sequencial 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 na fila enquanto ela tiver pelo menos um item ativo no momento (em reprodução ou pausado). Os remetentes podem entrar na sessão e adicionar itens à fila. O receptor mantém uma sessão para itens de fila até que o último item conclua a reprodução, o remetente interrompa a reprodução e encerre a sessão ou até que um remetente carregue uma nova fila no receptor. O receptor não mantém nenhuma informação sobre filas encerradas por padrão. Quando o último item da fila é concluído, a sessão de mídia é encerrada e a fila desaparece.
Criar e carregar itens da fila de mídia
Um item de fila de mídia é representado no framework do Cast como uma
instância
MediaQueueItem
.
Ao criar um item de fila de mídia, se você estiver usando a biblioteca
de 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 o item da fila de mídia em buffer antes
que o item que o anteceda na fila termine de ser reproduzido. Definir o atributo de reprodução automática
do item como "true" permite que o receptor o reproduza automaticamente. Por exemplo,
é possível usar um padrão builder para criar o item da 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 da fila de mídia usando o método
queueLoad
apropriado de RemoteMediaClient
.
Receber atualizações do status da fila de mídia
Quando o receptor carrega um item da fila de mídia, ele atribui ao item um ID exclusivo
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
(pode não estar em reprodução), carregando ou pré-carregado. A classe
MediaStatus
fornece estas informações de status:
- Método
getPreloadedItemId()
: se o próximo item foi pré-carregado, retorna o ID do item pré-carregado. - Método
getLoadingItemId()
: retorna o ID do item que está sendo carregado no momento, mas não está ativo na fila, no receptor. - Método
getCurrentItemId()
: retorna o ID do item que estava ativo na fila (pode não estar sendo reproduzido) no momento em que o status da mídia mudou. - Método
getQueueItems()
(descontinuado, useMediaQueue
): retorna a lista de instâncias deMediaQueueItem
como uma lista não modificável.
O app também pode receber a lista de itens usando a
classe
MediaQueue
. A classe é um modelo de dados esparsos da fila de mídia. Ele mantém a lista de
IDs de itens na fila, que é sincronizada automaticamente com o receptor.
MediaQueue
não mantém toda a
MediaQueueItem
porque vai ocupar muita memória quando a fila for muito longa. Em vez disso, ele
busca os itens sob demanda e mantém um LruCache
de
itens acessados recentemente. Use estes métodos para acessar a fila de mídia:
- Método
getItemIds()
: retorna a lista de todos os códigos de itens em ordem. - Método
getItemAtIndex()
: retorna o item armazenado em cache em um determinado índice. Se o item não estiver armazenado em cache,MediaQueue
vai retornarnull
e programar 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 a parte de cima ou de baixo e seu 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 dos itens na fila. Além das
atualizações de status da 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 fornece duas classes de utilitários para criar uma interface para enfileiramento.
MediaQueueRecyclerViewAdapter
, para fazer backup dos dados deRecyclerView
MediaQueueListAdapter
, 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 na fila, use os métodos de fila da
classe
RemoteMediaClient
. Eles permitem carregar uma matriz de itens em uma nova fila, inserir itens em
uma fila existente, atualizar as propriedades de itens na fila, fazer um item
avançar ou retroceder na fila, definir as propriedades da própria fila
(por exemplo, alterar o algoritmo repeatMode
que seleciona o próximo item),
remover itens da fila e reordenar os itens na fila.