O Jetpack Media3 é o novo lar das bibliotecas de mídia que permitem que os apps Android mostrem experiências de áudio e visuais avançadas. A Media3 oferece uma arquitetura simples com personalização, confiabilidade e otimizações avançadas com base nos recursos do dispositivo para abstrair a complexidade da fragmentação.
Este documento apresenta as principais APIs para implementar casos de uso de reprodução e edição com a Media3.
Componentes de reprodução
O Media3 oferece vários componentes principais para casos de uso de reprodução. As classes que compõem esses componentes serão familiares se você já tiver trabalhado com bibliotecas de mídia do Android anteriores.
O diagrama a seguir mostra como esses componentes se unem em um app típico.
 
  O player de mídia
Um player de mídia é um componente do app que permite a reprodução de arquivos de mídia. No Media3, você encontra:
| Turma | Descrição | Observação sobre a implementação | 
|---|---|---|
| Player | Playeré uma interface que define recursos tradicionais de alto nível
      para um player de mídia, como a capacidade de reproduzir, pausar
      e buscar. | Na Media3, a interface Playeré uma API comum implementada
      ou usada por vários componentes, incluindoMediaSessioneMediaController, por exemplo. | 
| ExoPlayer | ExoPlayeré a implementação padrão da interfacePlayerna Media3. | 
Saiba mais sobre o ExoPlayer da Media3
A sessão de mídia
Uma sessão de mídia oferece uma maneira universal de interagir com um player de mídia. Isso permite que um app anuncie a reprodução de mídia para fontes externas e receba solicitações de controle de reprodução de fontes externas. No Media3, você encontra:
| Turma | Descrição | Observação sobre a implementação | 
|---|---|---|
| MediaSession | As sessões de mídia permitem que seu app interaja com um player de áudio ou vídeo. Eles anunciam a reprodução de mídia externamente e recebem comandos de reprodução de fontes externas. | No Media3, um MediaSessionprecisa de umPlayerpara
      executar comandos e receber o estado atual. | 
| MediaSessionService | O MediaSessionServicecontém uma sessão de mídia e o player associado em um serviço separado doActivityprincipal do app para facilitar a reprodução em segundo plano. | |
| MediaController | A classe MediaControllergeralmente é usada para enviar comandos
      de fora do app, por exemplo, de outros apps ou do próprio sistema.
      Os comandos são enviados aoPlayersubjacente doMediaSessionassociado. | A classe MediaControllerimplementa a interfacePlayer, mas, ao chamar um método,MediaControllerenvia o comando para oMediaSessionconectado. Apps clientes, como o Google Assistente,
      podem usarMediaControllerpara controlar a reprodução em uma sessão
      conectada. | 
| MediaLibraryService | Um MediaLibraryServiceé semelhante a umMediaSessionService, mas inclui APIs adicionais para que você possa veicular sua biblioteca de conteúdo em apps clientes. | |
| MediaBrowser | A classe MediaBrowserpermite que o usuário navegue pela biblioteca de conteúdo de um app de mídia e selecione quais itens reproduzir. | A classe MediaBrowserimplementa as interfacesMediaControllerePlayer. Semelhante aoMediaController, apps cliente como o Android Auto geralmente
      implementamMediaBrowser. | 
Saiba mais sobre a MediaSession do Media3
Os componentes da interface
O Media3 oferece componentes de interface padrão para assistir vídeos e controlar a reprodução.
| Turma | Descrição | Observação sobre a implementação | 
|---|---|---|
| PlayerView | Um Viewpadrão para mostrar controles de vídeo e reprodução. | Faz a conexão com ExoPlayer,MediaControllerou qualquer outroPlayerpersonalizado. | 
| PlayerSurface | Um elemento combinável que representa um desenho dedicado Surfacepara mostrar vídeo. | Conecta-se a qualquer Player, mas não contém controles de mídia.
      Usado apenas para renderização de frames e pode ser redimensionado de acordo com vários tipos de
      
      ContentScale. Esse e muitos outros elementos combináveis podem ser
      encontrados nas utilidades da interface do Compose. | 
Saiba mais sobre a interface do Media3
Como editar componentes
O Media3 inclui as APIs Transformer para casos de uso de edição de mídia, incluindo:
- Processamento de áudio e vídeo, como adição de filtros e efeitos
- Como lidar com formatos especiais, como vídeos em HDR e em câmera lenta
- Composição, como combinar vários arquivos de entrada
- Exportar a saída final para um arquivo
| Turma | Descrição | Observação sobre a implementação | 
|---|---|---|
| Transformer | Use a classe Transformerpara iniciar e interromper transformações
      e verificar atualizações de progresso em uma transformação em execução. | |
| Effects | Um objeto Effectsé um conjunto de efeitos de áudio e vídeo
      para aplicar a um item de mídia. | Use ExoPlayerpara visualizar os efeitos adicionados a um item de mídia antes de iniciar o processo de exportação. | 
| EditedMediaItem | Um EditedMediaItemrepresenta um item de mídia a ser processado e
      as edições a serem aplicadas a ele. | 
Saiba mais sobre a Media3 Transformer
Vídeo de introdução
Confira o vídeo abaixo para uma introdução à Media3 dos engenheiros que a criaram.
Links úteis
- Centro para desenvolvedores de mídia
- ExoPlayerdocumentos
- Guia de migração
- AndroidX Media3 no GitHub
- App de exemplo de sessão de mídia do Media3
- App de exemplo do Universal Android Music Player (link em inglês)
