En casos de uso simples, comenzar a usar ExoPlayer
consiste en implementar
sigue estos pasos:
- Agrega ExoPlayer como una dependencia a tu proyecto.
- Crea una instancia de
ExoPlayer
. - Conecte el reproductor a una vista (para salida de video y entrada del usuario).
- Prepara el jugador con un
MediaItem
para jugar. - Suelta el reproductor cuando termines.
Estos pasos se describen con más detalle a continuación. Para ver un ejemplo completo, consulta
PlayerActivity
en la app de demostración principal
Agrega ExoPlayer como dependencia
Cómo agregar módulos de ExoPlayer
La forma más fácil de comenzar a usar AndroidX Media3 es agregar Gradle.
dependencias de las bibliotecas que necesitas en el archivo build.gradle
de tu app
módulo.
Por ejemplo, para depender de ExoPlayer con componentes de IU y compatibilidad con la reproducción DASH puedes agregar dependencias en los módulos de la siguiente manera:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.4.1") implementation("androidx.media3:media3-exoplayer-dash:1.4.1") implementation("androidx.media3:media3-ui:1.4.1")
Groovy
implementation "androidx.media3:media3-exoplayer:1.4.1" implementation "androidx.media3:media3-exoplayer-dash:1.4.1" implementation "androidx.media3:media3-ui:1.4.1"
donde 1.4.1 es tu versión preferida (la última versión puede encontrarse en consulta 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 y otras bibliotecas externas para brindar funciones adicionales. Algunos son disponibles desde el repositorio de Maven, mientras que otros se deben compilar manualmente. 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.
Cómo activar la compatibilidad con Java 8
Si aún no está habilitado, debes activar la compatibilidad con Java 8 en todos los build.gradle
archivos que dependen de ExoPlayer, agregando lo siguiente a la sección android
:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
Cómo habilitar multidex
Si tu minSdkVersion
de Gradle es 20 o inferior, deberías
habilitar multidex en orden
para evitar errores de compilación.
Cómo crear 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
la creación de una instancia.
Kotlin
val player = ExoPlayer.Builder(context).build()
Java
ExoPlayer player = new ExoPlayer.Builder(context).build();
Nota sobre los subprocesos
Se debe acceder a las instancias de ExoPlayer desde un solo subproceso de la aplicación. Para el en la gran mayoría de los casos, este debería ser el subproceso principal de la aplicación. Con el 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 acceder
que se especifica pasando un Looper
cuando se crea el reproductor Si no se indica Looper
se especifica, el Looper
del subproceso en el que se crea el reproductor se
usado o, si ese subproceso no tiene un Looper
, el Looper
de la
se usa el subproceso principal de la aplicación. En todos los casos, el Looper
del subproceso de
en las que se debe acceder al reproductor,
Player.getApplicationLooper
Para obtener más información sobre el modelo de subprocesos de ExoPlayer, consulta la “Modelo de subprocesos” de ExoPlayer Javadoc.
Cómo adjuntar el reproductor a una vista
La biblioteca de ExoPlayer ofrece una variedad de componentes de IU precompilados para contenido multimedia
reproducción. Estos incluyen PlayerView
, que encapsula un elemento
PlayerControlView
, SubtitleView
y Surface
en qué video se
se renderizan. Se puede incluir un PlayerView
en el XML de diseño 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);
También puedes usar PlayerControlView
como un componente independiente, que es
útil para casos de uso solo de audio.
El uso de los componentes de IU previamente compilados de ExoPlayer es opcional. Para apps de video
que implementan su propia IU, el SurfaceView
de destino, TextureView
SurfaceHolder
o Surface
se pueden configurar con la API de
setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
y
setVideoSurface
, respectivamente. El método addTextOutput
de ExoPlayer puede
usarse para recibir subtítulos que deben procesarse durante la reproducción.
Propagar la playlist y preparar el reproductor
En ExoPlayer, cada elemento multimedia se representa con un MediaItem
. Para reproducir un
elemento multimedia, debes crear un MediaItem
correspondiente, agregarlo al
prepara el reproductor y llama 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 que se reproducirán 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 preparar la de nuevo. Obtén más información sobre cómo completar y manipular la playlist en el Página de listas de reproducción. Lee más sobre las diferentes opciones disponibles cuando crear elementos multimedia, como recortes y archivos de subtítulos, en la Página Elementos multimedia.
Cómo controlar el reproductor
Una vez que el reproductor esté preparado, se podrá controlar la reproducción a través de métodos de llamada en el reproductor. Estos son algunos de los métodos más utilizados:
play
ypause
inician y pausan la reproducción.seekTo
permite la búsqueda dentro del contenido multimedia.hasPrevious
,hasNext
,previous
ynext
permiten navegar por la playlist.setRepeatMode
controla si el contenido multimedia se repite en bucle y de qué manera.setShuffleModeEnabled
controla la reproducción aleatoria de playlists.setPlaybackParameters
ajusta la velocidad de reproducción y el tono de audio.
Si el jugador está vinculado a un PlayerView
o PlayerControlView
,
la interacción del usuario con estos componentes generará los métodos correspondientes en
que se invocará al jugador.
Cómo liberar el reproductor
Es importante liberar el reproductor
cuando ya no sea necesario para liberarlo
recursos limitados, como decodificadores de video para que los usen otras aplicaciones. Esta
se puede hacer llamando a ExoPlayer.release
.