Cómo comenzar a usar la IU basada en objetos View

Agrega la dependencia

Kotlin

implementation("androidx.media3:media3-ui:1.7.1")

Groovy

implementation "androidx.media3:media3-ui:1.7.1"

PlayerView

El componente más importante es PlayerView, una vista para la reproducción de contenido multimedia. PlayerView muestra videos, imágenes, subtítulos y la portada del álbum durante la reproducción, así como los controles de reproducción.

PlayerView tiene un método setPlayer() para adjuntar y separar (pasando null) instancias de Player.

PlayerView se puede usar para la reproducción de video, imagen y audio. Renderiza videos y subtítulos en el caso de la reproducción de videos, mapas de bits para la reproducción de imágenes y puede mostrar el material gráfico incluido como metadatos en los archivos de audio. Puedes incluirlo en tus archivos de diseño como cualquier otro componente de la IU. Por ejemplo, se puede incluir un PlayerView con el siguiente XML:

<androidx.media3.ui.PlayerView
    android:id="@+id/player_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:show_buffering="when_playing"
    app:show_shuffle_button="true"/>

El fragmento anterior ilustra que PlayerView proporciona varios atributos. Estos atributos se pueden usar para personalizar el comportamiento de la vista, así como su apariencia. La mayoría de estos atributos tienen métodos setter correspondientes, que se pueden usar para personalizar la vista en el tiempo de ejecución. En la documentación de PlayerView, se enumeran estos atributos y métodos setter con más detalle.

Para una experiencia del usuario más cómoda, considera agregar el atributo keepScreenOn de Android o configurar un bloqueo de activación si usas ExoPlayer. Puedes investigar otras acciones que mantienen el dispositivo activo en las páginas de trabajo en segundo plano.

android:keepScreenOn="true"

Una vez que se declara la vista en el archivo de diseño, se puede buscar en el método onCreate de la actividad:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  // ...
  playerView = findViewById(R.id.player_view)
}

Java

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // ...
  playerView = findViewById(R.id.player_view);
}

Cuando se inicializa un reproductor, se puede adjuntar a la vista llamando a setPlayer:

Kotlin

// Instantiate the player.
val player = ExoPlayer.Builder(context).build()
// Attach player to the view.
playerView.player = player
// Set the media item to be played.
player.setMediaItem(mediaItem)
// Prepare the player.
player.prepare()

Java

// Instantiate the player.
player = new ExoPlayer.Builder(context).build();
// Attach player to the view.
playerView.setPlayer(player);
// Set the media item to be played.
player.setMediaItem(mediaItem);
// Prepare the player.
player.prepare();

PlayerControlView

PlayerControlView es una de las subvistas de PlayerView que contiene la barra de progreso y los botones para controlar la reproducción. Ten en cuenta que PlayerControlView no está diseñado para usarse como un componente independiente fuera de PlayerView. Se puede personalizar configurando atributos en PlayerView (que se pasarán a PlayerControlView) o proporcionando un controlador personalizado con android:id="@id/exo_controller.

Elige un tipo de superficie

El atributo surface_type de PlayerView te permite establecer el tipo de superficie que se usa para la reproducción de video. Los valores permitidos son surface_view, texture_view, spherical_gl_surface_view (que es un valor especial para la reproducción de video esférico), video_decoder_gl_surface_view (que es para la renderización de video con renderizadores de extensión) y none (solo para la reproducción de audio). Puedes encontrar más información sobre qué tipo de superficie elegir en la página Superficie.