Para casos de uso simples, comenzar a usar ExoPlayer consiste en implementar los siguientes pasos:
- Agrega ExoPlayer como dependencia a tu proyecto.
- Crea una instancia de
ExoPlayer. - Adjunta el reproductor a una vista (para la salida de video y la entrada del usuario).
- Prepara el reproductor con un
MediaItempara reproducir. - Cuando termines, libera el reproductor.
Estos pasos se describen con más detalle a continuación. Para obtener un ejemplo completo, consulta
PlayerActivity en la app de demostración principal.
Agrega ExoPlayer como dependencia
Agrega módulos de ExoPlayer
La forma más sencilla de comenzar a usar AndroidX Media3 es agregar dependencias de Gradle en las bibliotecas que necesitas en el archivo build.gradle del módulo de tu app.
Por ejemplo, para depender de ExoPlayer con compatibilidad con la reproducción de DASH y componentes de IU, puedes agregar dependencias en los módulos de la siguiente manera:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.9.3")
implementation("androidx.media3:media3-exoplayer-dash:1.9.3")
implementation("androidx.media3:media3-ui:1.9.3")
implementation("androidx.media3:media3-ui-compose:1.9.3")
Groovy
implementation "androidx.media3:media3-exoplayer:1.9.3"
implementation "androidx.media3:media3-exoplayer-dash:1.9.3"
implementation "androidx.media3:media3-ui:1.9.3"
implementation("androidx.media3:media3-ui-compose:1.9.3")
donde 1.9.3 es tu versión preferida (puedes encontrar la versión más reciente consultando las notas de la versión). Todos los módulos deben ser de la misma versión.
AndroidX Media3 tiene módulos de biblioteca que dependen de bibliotecas externas para proporcionar funciones adicionales. Algunos están disponibles en el repositorio de Maven, mientras que otros se deben compilar de forma manual. Explora el directorio de bibliotecas y consulta los archivos README individuales para obtener más detalles.
Puedes encontrar más información sobre los módulos de biblioteca disponibles en la página de Google Maven AndroidX Media.
Activa la compatibilidad con Java 8
Si aún no está habilitado, debes activar al menos la compatibilidad con Java 8 en todos los archivos build.gradle que dependen de ExoPlayer. Para ello, agrega lo siguiente a la sección android:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Crea el reproductor
Puedes crear una instancia de ExoPlayer con ExoPlayer.Builder, que proporciona
una variedad de opciones de personalización. El siguiente código es el ejemplo más simple de creación de una instancia.
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Nota sobre el subprocesamiento
Se debe acceder a las instancias de ExoPlayer desde un solo subproceso de aplicación. En la gran mayoría de los casos, este debería ser el subproceso principal de la aplicación. Usar el subproceso principal de la aplicación es un requisito cuando se usan los componentes de IU de ExoPlayer o la extensión de IMA.
El subproceso en el que se debe acceder a una instancia de ExoPlayer se puede especificar de forma explícita pasando un Looper cuando se crea el reproductor. Si no se especifica ningún Looper, se usa el Looper del subproceso en el que se crea el reproductor o, si ese subproceso no tiene un Looper, se usa el Looper del subproceso principal de la aplicación. En todos los casos, se puede consultar el Looper del subproceso desde
el que se debe acceder al reproductor con
Player.getApplicationLooper.
Para obtener más información sobre el modelo de subprocesamiento de ExoPlayer, consulta la "sección Modelo de subprocesamiento" de ExoPlayer Javadoc.
Adjunta el reproductor a una vista
La biblioteca de ExoPlayer proporciona una variedad de componentes de IU precompilados para la reproducción de contenido multimedia. Estos incluyen PlayerView, que encapsula un PlayerControlView, un SubtitleView y una Surface en la que se renderiza el video. Se puede incluir un PlayerView en el diseño XML de tu aplicación.
Por ejemplo, para vincular el reproductor a la vista:
Kotlin
// Bind the player to the view. playerView.player = player
Java
// Bind the player to the view. playerView.setPlayer(player);
El uso de los componentes de IU precompilados de ExoPlayer es opcional. En el caso de las apps de video que
implementan su propia IU, se puede configurar el SurfaceView, TextureView, SurfaceHolder
o Surface de destino con los métodos setVideoSurfaceView,
setVideoTextureView, setVideoSurfaceHolder y setVideoSurface de ExoPlayer, respectivamente. Se puede usar la devolución de llamada Listener.onCues para recibir subtítulos que se deben renderizar durante la reproducción, y se puede usar setImageOutput para recibir imágenes decodificadas.
Para una experiencia del usuario más cómoda, considera agregar el atributo keepScreenOn. Puedes investigar otras acciones que mantienen el dispositivo activo en las
páginas de trabajo en segundo plano.
android:keepScreenOn="true"
Obtén más información para usar los componentes de IU de Media3 y su personalización en la página de IU.
Propaga la playlist y prepara el reproductor
En ExoPlayer, cada pieza de contenido multimedia está representada por un MediaItem. Para reproducir una pieza de contenido multimedia, debes compilar un MediaItem correspondiente, agregarlo al reproductor, preparar el reproductor y llamar a play para iniciar la reproducción:
Kotlin
// Build the media item. val mediaItem = MediaItem.fromUri(videoUri) // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare() // Start the playback. player.play()
Java
// Build the media item. MediaItem mediaItem = MediaItem.fromUri(videoUri); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
ExoPlayer admite playlists directamente, por lo que es posible preparar el reproductor con varios elementos multimedia para que se reproduzcan uno tras otro:
Kotlin
// Build the media items. val firstItem = MediaItem.fromUri(firstVideoUri) val secondItem = MediaItem.fromUri(secondVideoUri) // Add the media items to be played. player.addMediaItem(firstItem) player.addMediaItem(secondItem) // Prepare the player. player.prepare() // Start the playback. player.play()
Java
// Build the media items. MediaItem firstItem = MediaItem.fromUri(firstVideoUri); MediaItem secondItem = MediaItem.fromUri(secondVideoUri); // Add the media items to be played. player.addMediaItem(firstItem); player.addMediaItem(secondItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
La playlist se puede actualizar durante la reproducción sin necesidad de volver a preparar el reproductor. Obtén más información para propagar y manipular la playlist en la página de playlists. Obtén más información sobre las diferentes opciones disponibles cuando compilas elementos multimedia, como recortar y adjuntar archivos de subtítulos, en la página de elementos multimedia.
Controla el reproductor
Una vez que se prepara el reproductor, se puede controlar la reproducción llamando a los métodos del reproductor. Estos son algunos de los métodos más usados:
playypauseinician y pausan la reproducción.seekTopermite buscar dentro del contenido multimedia.hasPrevious,hasNext,previousynextpermiten navegar por la playlist.setRepeatModecontrola si se repite el contenido multimedia y cómo se hace.setShuffleModeEnabledcontrola la reproducción aleatoria de la playlist.setPlaybackParametersajusta la velocidad de reproducción y el tono de audio.
Si el reproductor está vinculado a un PlayerView o PlayerControlView, la interacción del usuario con estos componentes hará que se invoquen los métodos correspondientes en el reproductor.
Libera el reproductor
Es importante liberar el reproductor cuando ya no sea necesario para liberar recursos limitados, como decodificadores de video, para que los usen otras aplicaciones. Para ello, llama a ExoPlayer.release.