O Jetpack Media3 é o novo lar das bibliotecas de mídia que permitem que os apps Android exibam experiências visuais e de áudio 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 que vem com a fragmentação.
Este documento apresenta as principais APIs para implementar casos de uso de reprodução e edição com o Media3.
Componentes de reprodução
A Media3 oferece vários componentes importantes para casos de uso de reprodução. As classes que compõem esses componentes serão familiares para você se já tiver trabalhado com outras bibliotecas de mídia do Android.
O diagrama abaixo demonstra 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. Na Media3, você vai encontrar:
| Class | Descrição | Observação sobre 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.
|
No Media3, a interface Player é uma API comum implementada
ou usada por vários componentes, incluindo MediaSession e
MediaController, por exemplo.
|
ExoPlayer |
ExoPlayer é a implementação padrão da
interface Player no 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 mídia de fontes externas. Na Media3, você vai encontrar:
| Class | Descrição | Observação sobre implementação |
|---|---|---|
MediaSession |
As sessões de mídia permitem que o 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 MediaSession precisa de um Player para
executar comandos e receber o estado atual.
|
MediaSessionService |
O MediaSessionService mantém uma sessão de mídia e o
player associado em um serviço separado da Activity principal
do app para facilitar a reprodução em segundo plano.
|
|
MediaController |
A classe MediaController geralmente é usada para enviar comandos
de fora do app, por exemplo, de outros apps ou do próprio sistema.
Os comandos são enviados para o Player subjacente do
MediaSession associado.
|
A classe MediaController implementa a interface Player,
mas, ao chamar um método, o MediaController envia
o comando para o
MediaSession conectado. Apps clientes, como o Google Assistente,
podem usar MediaController para controlar a reprodução em uma sessão
conectada.
|
MediaLibraryService |
Um MediaLibraryService é semelhante a um
MediaSessionService, mas inclui outras
APIs para que você possa disponibilizar sua biblioteca de conteúdo para apps clientes.
|
|
MediaBrowser |
A classe MediaBrowser permite que o usuário navegue pela
biblioteca de conteúdo de um app de música e selecione os itens que quer ouvir.
|
A classe MediaBrowser implementa as interfaces
MediaController e Player. Assim como
MediaController, os apps clientes, como o Android Auto, geralmente
implementam MediaBrowser.
|
Saiba mais sobre o MediaSession do Media3
Os componentes da interface
A Media3 oferece componentes de interface padrão para assistir vídeos e controlar a reprodução.
| Class | Descrição | Observação sobre implementação |
|---|---|---|
PlayerView |
Um View padrão para mostrar controles de vídeo e mídia.
|
Conecta-se a ExoPlayer, MediaController ou qualquer
outro Player personalizado.
|
PlayerSurface |
Um elemento combinável que representa uma superfície de desenho dedicada
Surface
para mostrar o vídeo.
|
Conecta-se a qualquer Player, mas não tem 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 que podem ser compostos estão
disponíveis nos utilitários de 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 processar 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
| Class | Descrição | Observação sobre implementação |
|---|---|---|
Transformer |
Use a classe Transformer para iniciar e interromper transformações
e verificar se há atualizações de progresso em uma transformação em execução.
|
|
Effects |
Um objeto Effects é uma coleção de efeitos de áudio e vídeo
para aplicar a um item de mídia.
|
Use ExoPlayer para visualizar os efeitos adicionados a um item de mídia
antes de iniciar o processo de exportação.
|
EditedMediaItem |
Um EditedMediaItem representa um item de mídia a ser processado e
as edições a serem aplicadas a ele.
|
Saiba mais sobre o Media3 Transformer
Vídeo de introdução
Assista este vídeo para uma introdução à Media3 feita pelos 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)