Media3 / ExoPlayer para Kotlin: guia completo com exemplos práticos
1. O que é e para que serve
Media3 (anteriormente conhecido como ExoPlayer) é uma biblioteca moderna, poderosa e flexível para reprodução de áudio e vídeo na plataforma Android, desenvolvida pelo Google. Ela é a sucessora do obsoleto MediaPlayer do Android SDK e oferece funcionalidades muito mais amplas, melhor desempenho e controle total sobre o processo de reprodução.
Para que serve o Media3 / ExoPlayer? Diferente do MediaPlayer padrão, que só atende a tarefas simples, o ExoPlayer dá ao desenvolvedor controle completo sobre o pipeline de mídia. Ele suporta diversos formatos (DASH, HLS, SmoothStreaming, MP4, MP3, WebM e outros), troca adaptativa de bitrate (ABR), customização de renderização, suporte a legendas (incluindo WebVTT, TTML), proteção DRM (Widevine, PlayReady) e muito mais. A biblioteca é ativamente desenvolvida, otimizada e usada em aplicativos como YouTube, Google Fotos e muitos outros serviços populares.
Para desenvolvedores Kotlin, o Media3 é o padrão de facto para criar qualquer aplicativo de mídia: desde um simples player de música até um player de vídeo complexo com streaming adaptativo e suporte a DRM. Ele permite escrever código limpo, modular e testável, controlando completamente o ciclo de vida da reprodução.
2. Instalação
O Media3 é uma biblioteca para Android, portanto é instalada através do sistema de build Gradle. Adicione as seguintes dependências no arquivo build.gradle.kts (ou build.gradle) do seu módulo app:
// build.gradle.kts (Module :app)
dependencies {
// Biblioteca base do Media3 (obrigatório)
implementation("androidx.media3:media3-exoplayer:1.4.1")
// Componentes de UI (PlayerView, PlayerControlView, etc.)
implementation("androidx.media3:media3-ui:1.4.1")
// Para suporte a HLS (HTTP Live Streaming)
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
// Para suporte a DASH (Dynamic Adaptive Streaming over HTTP)
implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
// Para suporte a SmoothStreaming
implementation("androidx.media3:media3-exoplayer-rtsp:1.4.1")
// Para suporte a legendas
implementation("androidx.media3:media3-exoplayer-ima:1.4.1")
// Para suporte a DRM (Widevine)
implementation("androidx.media3:media3-exoplayer-drm:1.4.1")
// Para suporte a sessões (MediaSession) — obrigatório para integração com controles do sistema
implementation("androidx.media3:media3-session:1.4.1")
// Para fontes de dados personalizadas (ex: cache)
implementation("androidx.media3:media3-datasource:1.4.1")
// Para codecs personalizados (ex: FFmpeg)
implementation("androidx.media3:media3-decoder:1.4.1")
// Para efeitos personalizados (ex: alterar velocidade)
implementation("androidx.media3:media3-effect:1.4.1")
// Para transformações personalizadas (ex: cortar vídeo)
implementation("androidx.media3:media3-transformer:1.4.1")
}
Importante: As versões podem mudar. A versão mais recente pode ser encontrada na página oficial de releases.
Após adicionar as dependências, execute a sincronização do Gradle (Sync Now) no Android Studio.
3. Início rápido — exemplo mínimo funcional
Vamos criar um player de vídeo simples que reproduz um vídeo da internet. Para isso, precisaremos de um PlayerView no layout XML e código na Activity/Fragment.
Passo 1: Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="htt Também na biblioteca
Cliente OAuth para C# (.NET): implementação de autorização através de serviços terceiros
Cheerio para JavaScript (Node.js): guia completo com exemplos
Serilog para C# (.NET): guia completo com exemplos
Criação de aplicações CLI em TypeScript: visão geral de frameworks e ferramentas
Swashbuckle para C# (.NET): guia completo com exemplos práticos