Media3 / ExoPlayer para Kotlin: guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Media3 / ExoPlayer para Kotlin: guía completa con ejemplos

1. ¿Qué es y para qué sirve?

Media3 (anteriormente conocido como ExoPlayer) es una biblioteca moderna, potente y flexible para la reproducción de audio y video en la plataforma Android, desarrollada por Google. Es la sucesora del obsoleto MediaPlayer del SDK de Android y ofrece una funcionalidad mucho más amplia, mejor rendimiento y un control total sobre el proceso de reproducción.

¿Para qué sirve Media3 / ExoPlayer? A diferencia del MediaPlayer estándar, que solo es adecuado para tareas simples, ExoPlayer le brinda al desarrollador control completo sobre el pipeline multimedia. Soporta múltiples formatos (DASH, HLS, SmoothStreaming, MP4, MP3, WebM, etc.), conmutación adaptativa de tasa de bits (ABR), personalización del renderizado, trabajo con subtítulos (incluyendo WebVTT, TTML), protección DRM (Widevine, PlayReady) y mucho más. La biblioteca se desarrolla activamente, se optimiza y se utiliza en aplicaciones como YouTube, Google Photos y muchos otros servicios populares.

Para los desarrolladores de Kotlin, Media3 es el estándar de facto para crear cualquier tipo de aplicación multimedia: desde un simple reproductor de música hasta un complejo reproductor de video con streaming adaptativo y soporte DRM. Permite escribir código limpio, modular y comprobable, controlando completamente el ciclo de vida de la reproducción.

2. Instalación

Media3 es una biblioteca para Android, por lo que se instala a través del sistema de compilación Gradle. Agrega las siguientes dependencias en tu archivo build.gradle.kts (o build.gradle) del módulo app:

// build.gradle.kts (Module :app)
dependencies {
    // Biblioteca base de Media3 (obligatorio)
    implementation("androidx.media3:media3-exoplayer:1.4.1")
    // Componentes de UI (PlayerView, PlayerControlView, etc.)
    implementation("androidx.media3:media3-ui:1.4.1")
    // Para trabajar con HLS (HTTP Live Streaming)
    implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
    // Para trabajar con DASH (Dynamic Adaptive Streaming over HTTP)
    implementation("androidx.media3:media3-exoplayer-dash:1.4.1")
    // Para trabajar con SmoothStreaming
    implementation("androidx.media3:media3-exoplayer-rtsp:1.4.1")
    // Para trabajar con subtítulos
    implementation("androidx.media3:media3-exoplayer-ima:1.4.1")
    // Para trabajar con DRM (Widevine)
    implementation("androidx.media3:media3-exoplayer-drm:1.4.1")
    // Para trabajar con sesiones (MediaSession) — obligatorio para integración con controles del sistema
    implementation("androidx.media3:media3-session:1.4.1")
    // Para trabajar con fuentes de datos personalizadas (ej. caché)
    implementation("androidx.media3:media3-datasource:1.4.1")
    // Para trabajar con códecs personalizados (ej. FFmpeg)
    implementation("androidx.media3:media3-decoder:1.4.1")
    // Para trabajar con efectos personalizados (ej. cambio de velocidad)
    implementation("androidx.media3:media3-effect:1.4.1")
    // Para trabajar con transformaciones personalizadas (ej. recorte de video)
    implementation("androidx.media3:media3-transformer:1.4.1")
}

Importante: Las versiones pueden cambiar. Siempre puedes encontrar la versión actualizada en la página oficial de lanzamientos.

Después de agregar las dependencias, realiza la sincronización de Gradle (Sync Now) en Android Studio.

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear un reproductor de video simple que reproduzca un video desde internet. Para ello necesitaremos un PlayerView en el diseño XML y el código en la Activity/Fragment.

Paso 1: Diseño (activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="htt                    

Recommendations