Tutoriels

Media3 1.11 : nouveautés

Temps de lecture : 3 min
Afficher le profil de Toni Heidenreich
Toni Heidenreich Ingénieur logiciel, Android

Media3 1.11 est disponible. Cette version, qui alimente la grande majorité des meilleures applications multimédias Android, apporte de nouvelles fonctionnalités, des corrections de bugs et des améliorations au niveau de la lecture, de la modification et des composants d'interface utilisateur. Nous étendons nos modules d'interface utilisateur Jetpack Compose avec des emplacements Player personnalisables et des valeurs par défaut faciles à utiliser, des gestes interactifs, des observateurs d'état et le préchargement de vidéos courtes à l'aide de PlayerPool. Nous avons également modernisé l'intégration de Media3 Cast avec la prise en charge du sélecteur de sortie SystemUI, introduit une nouvelle extension réseau de client HTTP Ktor et ajouté de nouveaux utilitaires de multiplexage pour les fichiers Ogg et WAV.

Pour en savoir plus, consultez les points clés ci-dessous et les notes de version complètes pour obtenir la liste complète des modifications.

Interface utilisateur de lecture et Compose

Android étant désormais axé sur Compose, nous continuons à étendre les modules media3-ui-compose et media3-ui-compose-material3. Cette mise à jour offre un contrôle plus précis sur la mise en page de votre lecteur, des modèles d'interaction plus riches et une intégration plus poussée avec Material3.

Mise en page du lecteur personnalisable

Le composable Material 3 Player est désormais compatible avec les emplacements de contenu dédiés pour topControls, centerControls, bottomControls et errorOverlay. Vous pouvez insérer vos propres composables ou utiliser les valeurs par défaut prêtes à l'emploi publiées dans PlayerDefaults :

Player(
  player = player,
  topControls = { PlayerDefaults.TopControls(player) },
  centerControls = { PlayerDefaults.CenterControls(player) },
  bottomControls = { PlayerDefaults.BottomControls(player) },
)

Le composable Player intègre également la prise en charge de FocusRequester, ce qui permet une navigation fluide avec le pavé directionnel et le clavier sur Android TV, les appareils pliables et les environnements de bureau. 

player_video.png
Exemple de lecteur composable avec des commandes personnalisées

Gestes et contrôle de la vitesse de lecture

PlaybackSpeedState fournit désormais une API d'avance rapide/de ralenti. Le demo-compose app illustre cela avec un geste d'appui long pour avancer rapidement la lecture et une recherche avec un double appui. Combiné au ProgressSlider introduit dans la version 1.10, l'interface utilisateur du lecteur Compose offre désormais des interactions tactiles et gestuelles riches prêtes à l'emploi.

Préchargement de vidéos courtes avec PlayerPool

Pour les applications avec des flux multimédias à fenêtre glissante (par exemple, les vidéos verticales courtes), la gestion efficace de plusieurs instances ExoPlayer est un défi courant. Media3 1.11 introduit PlayerPool (dans common-ktx) et rememberPooledPlayer (dans ui-compose) pour gérer automatiquement le recyclage et le préchargement du lecteur.

Le nouveau ShortFormPlayerScreen dans demo-compose illustre cela en action, avec un flux de pagination verticale où les lecteurs sont mis en commun, préchargés et recyclés de manière transparente lorsque l'utilisateur fait défiler l'écran.

MiniController

Un nouveau composable MiniController dans media3-ui-compose-material3 fournit une barre de lecture compacte affichant le titre, l'artiste, la pochette et la progression de l'élément en cours, ainsi que les commandes de lecture/pause. Comme tous nos composables par défaut dans media3-ui-compose-material3, le MiniController est compatible avec l'intégration des couleurs dynamiques Material3, ce qui lui permet de s'adapter automatiquement au thème de fond d'écran de l'utilisateur.Cela est idéal pour les feuilles inférieures persistantes ou les mini-lecteurs, par exemple lorsque l'utilisateur navigue dans le contenu ou pendant les sessions Cast actives.

mini_player.png
Le MiniController Media3 affichant la pochette de l'album, les métadonnées multimédias et les commandes de base

Conteneurs d'état étendus pour les métadonnées et les erreurs

Nous avons ajouté plusieurs nouveaux conteneurs d'état réactifs à media3-ui-compose :

  • rememberCurrentMediaItemState : observe les métadonnées de l'élément en cours de lecture
  • rememberPlaylistState : observe la playlist complète et les index actifs
  • rememberErrorState : suit les erreurs de lecture, avec un composable ErrorText correspondant et un ErrorOverlay par défaut dans Material3

Nous continuerons à travailler sur de nouveaux ajouts et davantage d'options de personnalisation dans les prochaines versions. N'hésitez pas à nous faire part de vos commentaires dans le outil de suivi des problèmes du projet.

Intégration Cast modernisée

Media3 1.11 met à jour l'extension Cast avec des options de configuration programmatiques et la prise en charge du routage au niveau du système d'exploitation.

CastParams et sélecteur de sortie SystemUI

Vous pouvez désormais configurer l'extension Cast à l'aide de CastParams :

val castParams = CastParams.Builder()
  .setShowSystemOutputSwitcherOnCastButtonClick(true)
  .build()


Cast.getSingletonInstance(context).initialize(castParams)

La configuration de setShowSystemOutputSwitcherOnCastIconClick(true) permet au MediaRouteButton d'ouvrir le sélecteur de sortie SystemUI natif d'Android sur les versions de plate-forme compatibles, offrant ainsi une expérience unifiée de sélection de sortie.

État réactif de MediaRouteButton dans Compose

Les applications utilisant Jetpack Compose peuvent désormais facilement ajouter le bouton de routage multimédia (également appelé bouton Cast), qui observe automatiquement l'état de la boîte de dialogue et se met à jour en conséquence. Aucune autre logique n'est nécessaire lorsqu'il est utilisé avec le CastPlayer de Media3.

@Composable
fun TopAppBarWithCast() {
  Row {
    Text(text = "App Title")
    MediaRouteButton()
  }
}
cast_button_2.png
Bouton de routage multimédia Media3 dans une application lançant la boîte de dialogue du sélecteur de sortie par défaut

Améliorations de la lecture et de la session de base

Eclipsa Video : métadonnées HDR dynamiques HAGC (API 37+)

Eclipsa Video promet une expérience HDR plus cohérente sur tous les appareils, avec un blanc HDR de base cohérent, une marge adaptative en fonction de l'écran et de l'environnement, garantissant ainsi que l'intention créative est préservée sur tous les appareils.

ExoPlayer est désormais compatible avec la lecture des métadonnées temporelles HAGC (ST 2094-50) nécessaires pour les contenus multimédias progressifs (MP4, Matroska). Le lecteur fusionne automatiquement les pistes de métadonnées HAGC avec la piste vidéo associée et fournit les métadonnées hors bande au décodeur sur les appareils dotés de l'API 37 ou version ultérieure. Sur les anciens appareils, ExoPlayer revient de manière transparente à une expérience de lecture HDR standard sans les ajustements.  

eclipsa.png
Illustration montrant les avantages de la vidéo HDR Eclipsa, comme un contraste de couleurs plus cohérent

Nouvelle extension de client HTTP Ktor

Un nouveau module d'extension media3-datasource-ktor fournit KtorDataSource, basé sur la pile HTTP Ktor. Il s'agit d'une alternative Kotlin-first et compatible avec les coroutines aux modules de source de données Cronet et OkHttp existants.

Connexions MediaSession asynchrones

MediaSession.Callback inclut désormais onConnectAsync(), qui vous permet de traiter les tentatives de connexion du contrôleur de manière asynchrone, par exemple pour vérifier l'autorisation avant d'accepter une connexion. Vous pouvez renvoyer un Future immédiat avec Futures.immediateFuture(ConnectionResult) pour le même comportement que le onConnect existant. 

override fun onConnectAsync(
  session: MediaSession,
  controller: MediaSession.ControllerInfo
): ListenableFuture<MediaSession.ConnectionResult> {
  return authenticateControllerAsync(controller)
}

Valeurs par défaut MediaSession plus sécurisées

Pour les applications qui ne remplacent pas onConnect ou onConnectAsync dans MediaSession.Callback, la bibliothèque utilise désormais une configuration plus sécurisée par défaut. Plus précisément, les données de session ne sont plus partagées par défaut avec les contrôleurs non fiables, ce qui signifie que les applications tierces ou non système qui n'ont pas accès aux notifications ne peuvent pas accéder aux données de session, sauf si vous implémentez explicitement ces méthodes de rappel pour autoriser la connexion.

Nouvelles implémentations de Muxer et analyse de conteneurs

OggMuxer et WavMuxer

Nous avons ajouté deux nouveaux multiplexeurs dédiés : OggMuxer pour multiplexer les flux OPUS et VORBIS dans des fichiers .ogg standards, et WavMuxer pour générer des fichiers audio PCM .wav non compressés et à virgule flottante.

Analyse de conteneurs et références de pistes

  • Références de pistes MP4 (tref) : Mp4Muxer.addTrackReference permet de lier des métadonnées dépendantes ou des pistes auxiliaires à des flux vidéo principaux.
  • Extraction de chapitres : les chapitres QuickTime et Nero des fichiers MP4 (.m4a, .m4b) et les chapitres Matroska sont désormais extraits en tant qu'entrées de métadonnées Chapter pour la navigation dans les livres audio et les podcasts.

Veuillez utiliser l'outil de suivi des problèmes pour signaler tout bug ou si vous avez des questions ou des demandes de fonctionnalités. Nous attendons vos commentaires avec impatience !

Écrit par :
Continuer la lecture