Enfileiramento

O framework do Cast fornece classes de enfileiramento compatíveis com a criação de listas. de MediaQueueItem instâncias, que podem ser criadas a partir de instâncias de MediaInfo, como vídeo ou áudio para reproduzir em sequência no receptor. Esta fila de itens de conteúdo pode ser editado, reordenado, atualizado e assim por diante.

O SDK do receptor mantém a fila e responde às operações no fila desde que tenha pelo menos um item ativo no momento (em reprodução ou pausado). Os remetentes podem entrar na sessão e adicionar itens à fila. O destinatário mantém uma sessão para itens da fila até que o último item conclua a reprodução ou o remetente interrompe a reprodução e encerra a sessão ou até que o remetente carrega uma nova fila no receptor. O destinatário não mantém nenhum informações sobre filas encerradas por padrão. Quando o último item na 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 um MediaQueueItem instância. Ao criar um item de fila de mídia, se você estiver usando o Media Player Biblioteca com conteúdo adaptável, é possível definir tempo de pré-carregamento para que o player possa começar a armazenar em buffer o item da fila de mídia antes o item anterior na fila termina a reprodução. Definir a reprodução automática do item como verdadeiro, permite que o receptor reproduza o conteúdo automaticamente. Por exemplo: é possível usar um padrão builder para criar o item da fila de mídia da seguinte maneira:

Kotlin
.
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
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 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 um ID exclusivo ao item. que persiste durante toda a sessão (e a vida útil da fila). Seu o app pode aprender o status da fila em termos de qual item está carregado no momento (pode não estar sendo reproduzido), carregando ou pré-carregado. A MediaStatus fornece estas 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 é ativo na fila) no receptor.
  • getCurrentItemId() método - retorna o ID do item que estava ativo na fila (ele pode não estar tocando) no momento em que o status da mídia foi alterado.
  • getQueueItems() (Descontinuado, use MediaQueue): retorna a lista de MediaQueueItem instâncias como uma lista não modificável.

Seu app também pode receber a lista de itens usando o 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 são automaticamente sincronizadas com o destinatário. O MediaQueue não armazena todas as MediaQueueItem porque ela ocupará muita memória quando a fila for muito longa. Em vez disso, 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:

  • getItemIds() método: retorna a lista de todos os IDs de item em ordem.
  • getItemAtIndex() method - retorna o item armazenado em cache em determinado índice. Se o item não estiver armazenado em cache, MediaQueue vai retornar null e programar a busca do item. Quando o item for buscado, MediaQueue.Callback#itemsUpdatedAtIndexes() será chamado, e chamar getItemAtIndex() com o mesmo ID de novo devolver o item.
  • fetchMoteItemsRelativeToIndex() é usado quando o usuário rola a interface da fila para cima ou para baixo. e seu app quiser buscar mais itens da nuvem.

Use esses métodos com os outros métodos de status de mídia para informar seu sobre o status da fila e dos itens nela. Além de atualizações de status de mídia pelo receptor, o app poderá detectar mudanças no 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.

Por exemplo, para criar um RecyclerView usando MediaQueueRecyclerViewAdapter:

Kotlin
.
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
}
Java
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 do 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, tornar um item avançar ou retroceder na fila, defina as propriedades da própria fila Por exemplo, mudar o algoritmo repeatMode que seleciona o próximo item. remover itens da fila e reordenar os itens na fila.