Visualizar edições com CompositionPlayer

A biblioteca Jetpack Media3 fornece a API CompositionPlayer, uma implementação Player eficiente para visualizar edições de vídeo em tempo real. Se o app permitir que os usuários editem vídeos, como aplicar efeitos, cortar ou compor vários itens de mídia de entrada, o CompositionPlayer ajuda a mostrar uma prévia precisa da saída. Isso pode ser útil quando você não precisa salvar as edições aplicadas ou para validar se elas estão configuradas conforme o esperado antes de serem incluídas no vídeo final para exportação.

O que é o CompositionPlayer?

CompositionPlayer é uma implementação especializada da interface Player, projetada especificamente para reproduzir objetos Composition. Um Composition define como os recursos de mídia de entrada, como clipes de vídeo e faixas de áudio, são organizados e quais efeitos de áudio e vídeo devem ser aplicados a eles. Para saber mais sobre a API Composition, consulte Definir um Composition de itens de mídia.

O objetivo principal do CompositionPlayer é renderizar esse Composition, com todas as edições especificadas, em tempo real, permitindo que os usuários vejam exatamente como as edições vão ficar antes de se comprometer com o processo de exportação, que pode consumir tempo e recursos. O mesmo objeto Composition pode ser usado com uma instância Transformer para exportação. Saiba mais em Exportar um Composition.

CompositionPlayer x ExoPlayer

Embora CompositionPlayer e ExoPlayer sejam implementações de Player na Media3, elas são otimizadas para diferentes casos de uso:

Recurso

CompositionPlayer

ExoPlayer

Inserir mídia

Recebe um único objeto Composition, que pode consistir em várias instâncias de EditedMediaItem com efeitos por item.

Aceita um único MediaItem ou uma playlist de instâncias de MediaItem.

Cronograma

A linha do tempo e a duração são baseadas na composição inteira.

A linha do tempo e a duração correspondem ao MediaItem em reprodução.

Efeitos

Os efeitos são definidos na composição e podem ser aplicados a um EditedMediaItem individual ou a toda a composição.

Os efeitos são definidos na própria instância do ExoPlayer com setVideoEffects(), e cada efeito é aplicado individualmente a cada item na playlist.

Em essência, o CompositionPlayer é mais útil quando você precisa renderizar um Composition complexo de mídia e efeitos, geralmente em um contexto de edição. Use ExoPlayer para reprodução de uso geral de conteúdo de áudio ou vídeo ou para visualizar edições de um único recurso com setVideoEffects().

CompositionPlayer para visualização

A integração do CompositionPlayer ao seu app envolve algumas etapas principais. Primeiro, use o padrão Builder para instanciar um CompositionPlayer e defina o Composition a ser reproduzido:

val compositionPlayer = CompositionPlayer.Builder(context).build()
compositionPlayer.setComposition(composition)
compositionPlayer.prepare()
compositionPlayer.play()

Para orientações sobre como criar um Composition, consulte a seção Criar um Composition.

Como CompositionPlayer implementa a interface Player, é possível definir a saída de destino e controlar o player usando métodos Player padrão.

Tratamento de erros

Anexe uma instância Player.Listener ao seu CompositionPlayer para reagir a eventos e erros de reprodução. O callback onPlayerError() também vai mostrar problemas de componentes específicos de edição, como o Composition ou o VideoGraph.Factory. Leia a documentação Eventos do player para saber mais.

Considerações importantes

Alguns recursos e limitações a serem considerados ao usar o CompositionPlayer:

Os seguintes casos de uso são compatíveis:

  • Prévia de um único recurso.
  • Visualização de sequência única (ou seja, itens de mídia sequenciais).
  • Prévia de uma sequência de vídeo + uma sequência de áudio (por exemplo, áudio de fundo).

Os seguintes casos de uso estão em desenvolvimento ativo:

  • Prévia de vários recursos, incluindo layouts como picture-in-picture, lado a lado e grade, em que várias sequências de vídeo estão envolvidas.
  • Personalizar o pipeline de edição com um mecanismo gráfico diferente.

Solicitações de recursos

Se você tiver solicitações de recursos ou feedback para CompositionPlayer, registre um problema no repositório do Media3 no GitHub.