Nesta página, descrevemos como usar um gerenciador de pré-carregamento para gerenciar conteúdo de vídeo. Ao usar um gerenciador de pré-carregamento, você pode oferecer ao usuário uma experiência melhor. Quando o usuário alterna de um item de mídia para outro, a reprodução começa mais rápido porque o gerenciador já carregou parte do conteúdo.
Nesta página, abordamos os seguintes tópicos:
- Adicionar itens de mídia ao gerenciador de pré-carregamento
- Buscar e reproduzir mídia
- Remover itens do gerenciador de pré-carregamento
- Liberar o gerenciador de pré-carregamento quando terminar de usá-lo
Adicionar itens de mídia ao gerenciador de pré-carregamento
É necessário informar ao gerenciador de pré-carregamento sobre cada item de mídia que ele vai rastrear. Por exemplo, se o app tiver um carrossel de vídeos, adicione-os ao gerenciador de pré-carregamento. Dependendo do seu caso de uso, é possível adicionar todos os vídeos ou apenas os que estão próximos ao que está sendo reproduzido. Também é possível adicionar novos itens ao gerenciador de pré-carregamento mais tarde.
Para fazer isso, use um método de adição em lote, como addMediaItems. Como alternativa, você pode chamar add (ou
addMediaSource) para adicionar itens de mídia individualmente. No entanto, adicionar itens de mídia
individualmente não aciona o pré-carregamento de forma automática. Ao usar métodos
individuais, é necessário chamar explicitamente invalidate quando terminar de
adicionar itens para informar ao gerenciador de pré-carregamento que ele precisa atualizar as prioridades e iniciar
o pré-carregamento.
val initialMediaItems = pullMediaItemsFromService(count = 20) val rankingDataList = initialMediaItems.indices.toList() preloadManager.addMediaItems(initialMediaItems, rankingDataList)
Pontos principais sobre o código
- Este snippet mostra como preencher inicialmente o gerenciador de pré-carregamento no modo em lote
depois de criá-lo. É possível chamar
addMediaItemspara adicionar itens a um gerenciador de pré-carregamento preenchido. - Nesse snippet,
pullMediaItemsFromService()é a lógica do app para buscar a lista de conteúdo a ser reproduzido. O código chama esse método para buscar uma lista de até 20 itens. preloadManageré oDefaultPreloadManagercriado em Criar umDefaultPreloadManager.rankingDataé um valor que o gerenciador de pré-carregamento usa para determinar a prioridade de cada item de mídia. ParaDefaultPreloadManager,rankingDataé um número inteiro que representa a posição do item no carrossel. O gerenciador de pré-carregamento determina a prioridade de acordo com a distância de cada item em relação ao que está sendo reproduzido no momento.
Buscar e abrir mídia
Quando o usuário avança para um novo item de mídia, é necessário buscar o item no gerenciador de pré-carregamento. Se o gerenciador de pré-carregamento tiver carregado parte do conteúdo, ele será reproduzido mais rapidamente do que se você não tivesse usado o gerenciador. Se o gerenciador de pré-carregamento ainda não tiver carregado o conteúdo desse item, ele será reproduzido normalmente.
Você também precisa atualizar o índice de reprodução atual no gerenciador de pré-carregamento
chamando setCurrentPlayingIndex, o que permite que o gerenciador de pré-carregamento determine
as prioridades das operações de pré-carregamento futuras.
// When a media item is about to be displayed on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If the mediaSource is null, its mediaItem hasn't been added to the preload // manager yet. Send it directly to the player when it's about to play. player.setMediaItem(mediaItem) } player.prepare() // When the media item is being displayed at the center of the screen ("in focus") player.play() // Update the current playing index to let the preload manager know where the user // is in the carousel/pagination/list. preloadManager.setCurrentPlayingIndex(currentIndex)
Pontos principais sobre o código
playeré oExoPlayerdo Media3 que o app está usando para reproduzir o conteúdo. Crie esse player chamandoDefaultPreloadManager.Builder.buildExoPlayer()no mesmo builder usado para criar o gerenciador de pré-carregamento.- Quando o usuário muda para um novo item de mídia, o app chama
getMediaSource()para receber a fonte de mídia do gerenciador de pré-carregamento. Precisa ser ummediaItemque você já adicionou ao gerenciador de pré-carregamento. Não há problema se o gerenciador de pré-carregamento ainda não tiver começado a carregar o conteúdo. Nesse caso, ele retorna umMediaSourceque não tem dados pré-carregados. Por exemplo, isso pode acontecer se o usuário pular muito para frente no carrossel. - Depois que o usuário reproduzir o novo item de mídia, chame
setCurrentPlayingIndexpara informar ao gerenciador de pré-carregamento onde o novo item está no carrossel. O gerenciador precisa dessas informações para priorizar o carregamento do próximo item.
Remover itens do gerenciador de pré-carregamento
Para manter o gerenciador de pré-carregamento eficiente, remova os itens que ele não precisa mais rastrear. Você também pode remover itens que ainda estão no carrossel, mas estão longe da posição atual do usuário. Por exemplo, você pode decidir que, se um item estiver a mais de 15 itens de distância do que o usuário está assistindo, ele não precisa ser pré-carregado. Nesse caso, você removeria os itens quando eles ficassem muito distantes. Se o usuário voltar a usar esses itens removidos, você poderá adicioná-los novamente.
Se você tiver uma lista de itens de mídia para remover, use
removeMediaItems. Como alternativa, é possível
chamar remove (ou removeMediaSource) para remover itens de mídia
individualmente.
preloadManager.removeMediaItems(mediaItemsToRemove)
Pontos principais sobre o código
- Se você quiser remover todos os itens do gerenciador de pré-carregamento, chame
reset()em vez deremove(). Essa abordagem é útil se você precisar mudar todos os itens do carrossel. Nesse caso, depois de remover os itens, você precisará adicionar novos itens ao gerenciador de pré-carregamento.
Liberar o gerenciador de pré-carregamento quando terminar de usá-lo
Quando você não precisar mais do gerenciador de pré-carregamento, libere-o para liberar os recursos dele. Em particular, libere-o quando a atividade for destruída.
preloadManager.release()
Pontos principais sobre o código
- Não chame nenhum dos métodos do objeto depois de liberá-lo.
- Se você precisar criar outro gerenciador de pré-carregamento, crie um novo
DefaultPreloadManager.Buildere use-o para criar oDefaultPreloadManager. Não tente reutilizar o builder antigo.