Blog para desarrolladores de Android: Presentación de Jetpack Media3


Publicado por Don Turner, Ingeniero de Relaciones con Desarrolladores

Fondo azul con una ilustración de tableta azul oscuro.  El logotipo de Android Jetpack vuela por la pantalla

Presentamos Jetpack Media3

Hoy lanzamos el primer alfa de Jetpack Media3. Es una colección de bibliotecas de soporte de reproducción de medios, incluido ExoPlayer. Este artículo explicará por qué creamos Media3, qué contiene y cómo puede simplificar la arquitectura de su aplicación.

¿Por qué otra API multimedia?

Tenemos varias API multimedia existentes: Jetpack Media también conocido como MediaCompat, Jetpack Media2, Y ExoPlayer. Estas bibliotecas se han desarrollado con diferentes objetivos y tienen diferentes áreas de funcionalidad superpuestas.

Por ejemplo, ExoPlayer y Media2 contienen componentes de IU y MediaCompat y Media2 contienen clases para administrar sesiones multimedia.

Puede ser difícil decidir qué biblioteca usar para un caso de uso dado, y los objetos de diferentes bibliotecas a menudo no son compatibles, lo que requiere adaptadores o código de conexión. Media3 elimina estos desafíos al proporcionar un único conjunto de bibliotecas que funcionan bien juntas.

Para crear Media3:

  • Identificar áreas comunes de funcionalidad en nuestras bibliotecas de medios existentes, incluida la interfaz de usuario, la reproducción y la gestión de sesiones de medios.
  • Refinado y unido las mejores partes.
  • Creó una interfaz de jugador común para todos los objetos “parecidos a jugadores” (más sobre esto más adelante).

Qué hay en la caja

Media3 contiene muchas bibliotecas. A continuación se muestran los más relevantes para la reproducción multimedia simple.

Nombre de la biblioteca

Alcance

Clases útiles para la reproducción.

media3-exoplayer

Objetos para reproducir video y audio, proporcionados por ExoPlayer.

A ExoPlayer se puede utilizar para muchos casos de uso de reproducción. Crea uno usando un ExoPlayer.Builder

media3-ui

Vistas para mostrar controles de reproducción de medios, contenido y metadatos.

StyledPlayerView ver contenido de audio y video de un reproductor

media3-sesión

Objetos para crear e interactuar con un sesión multimedia.

MediaSession para anunciar lo que estás jugando

MediaLibraryService para anunciar su biblioteca de contenido

Un jugador común

Nuestras API de medios existentes tienen muchos objetos que aceptan comandos de reproducción, como “reproducir”, “pausar” y “saltar”. Identifique estos objetos “parecidos a un jugador” y asegúrese de que implementen un interfaz de jugador común fue una de las empresas más importantes en el desarrollo de Media3.

Hemos actualizado, mejorado y simplificado el Interfaz de jugador de ExoPlayer actuar como el municipio Player interfaz para Media3.

Clases como MediaController Y MediaSession que anteriormente contenía referencias a otros elementos “similares al jugador” se ha actualizado para hacer referencia al nuevo jugador.

Esto es útil cuando se comunica con los componentes de la interfaz de usuario. Ambos ExoPlayer Y MediaController ahora implementar Player, por lo que cualquiera de ellos se puede utilizar para comunicarse con StyledPlayerView u otros componentes de la interfaz de usuario.

Diagrama que muestra cómo MediaController y ExoPlayer implementan la interfaz del reproductor y se pueden usar para comunicarse con los componentes de la interfaz de usuario, como StyledPlayerView

Diagrama que muestra cómo MediaController y ExoPlayer implementan la interfaz del reproductor y se pueden usar para comunicarse con los componentes de la interfaz de usuario, como StyledPlayerView

Arquitectura simplificada

Usando esto Player la interfaz evita la necesidad de vincular componentes, lo que permite menos código y una arquitectura de la aplicación más simple.

En particular, esto facilita el trabajo con sesiones multimedia. En lugar de usar el MediaSessionConnector extensiono escribiendo su propio conector “reproductor a sesión multimedia”, puede crear un MediaSession utilizar una Player, como esto:

player = ExoPlayer.Builder(context).build()
session = MediaSession.Builder(context, player).build()

Ahora su sesión multimedia reflejará automáticamente el estado de su reproductor y todos los comandos enviados a su sesión multimedia se reenviarán automáticamente a su reproductor. ¡Todo esto en solo dos líneas de código!

Proporcionar una biblioteca de contenido.

Si su aplicación necesita exponer su biblioteca de contenido a otras aplicaciones, como Android Auto, use MediaLibraryService, preferible a MediaBrowserService por MediaCompat.

Entonces crearás un MediaLibrarySession e implementar un MediaLibrarySessionCallback cuyos métodos serán llamados por la aplicación de navegación para obtener su árbol de contenido.

Diagrama que muestra cómo usar MediaLibraryService para exponer una biblioteca de contenido

Diagrama que muestra cómo usar MediaLibraryService para exponer una biblioteca de contenido

Actualizaciones más fáciles

Una de las principales ventajas de utilizar las bibliotecas Jetpack es la estabilidad de las API. Si usa símbolos que son parte de la API estable, generalmente no necesita actualizar su código para usar una nueva versión de esa biblioteca dentro de la misma versión principal.

En Media3, algunos de los objetos más utilizados se marcan como estables, incluida la API del reproductor y las clases de sesión multimedia.

La mayor parte de la superficie de la API de ExoPlayer está marcada como inestable.

Diagrama que muestra áreas estables e inestables de Media API3

Diagrama que muestra áreas estables e inestables de Media API3

Para usar un método o una clase inestable, deberá agregar el OptIn anotación antes de usarlo.

@androidx.annotation.OptIn(UnstableApi::class)
private fun initializeExoPlayer() {
  // ...
}

Si su proyecto usa muchos métodos inestables, podría ser más conveniente agregar esta supresión a su lint.xml en el nivel del proyecto.

<issue id="UnsafeOptInUsageError">
  <ignore
      regexp='(markerClass = androidx.media3.UnstableApi.class)'/>
</issue>

El hecho de que parte de una API esté marcada como inestable no significa que la API no sea confiable o que no deba usarla; es solo una forma de hacerle saber que puede cambiar en el futuro.

Empezar

Media3 se lanzó hoy en versión alfa y nos encantaría que lo probaras.

Una de las mejores formas de hacerlo es comprobar la aplicación de demostración, que muestra cómo reproducir vídeo y audio e integrarlo con una sesión multimedia.

Puede agregar dependencias de Media3 a su aplicación agregando los siguientes artefactos a la suya build.gradle:

implementation 'androidx.media3:media3-ui:1.0.0-alpha01'
implementation 'androidx.media3:media3-exoplayer:1.0.0-alpha01'
implementation 'androidx.media3:media3-session:1.0.0-alpha01'

Si tiene algún comentario o problema, por favor presentar un problema. Realmente nos encantaría saber de ti.

Para obtener más información, consulte el “¿Cuáles son las perspectivas para AndroidX Media y ExoPlayer?”Discurso de la Cumbre de desarrolladores de Android 2021 y de Notas de la versión de Media3.



Compruebe también

El arsenal de Android: historias de usuarios

Puedes leerlo en portugués (https://github.com/welbert6/MaterialStoryView/edit/master/ReadmePT.md) Capturas de pantalla Introducción MaterialStoryView es una biblioteca de Android …

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *