La dernière itération de la bibliothèque Media3 d’Android, la version 1.9.0, vient d’être déployée, apportant dans ses bagages une pléthore d’améliorations et quatre modules inédits ou profondément remaniés. Attendez-vous à une refonte de l’expérience multimédia, de la gestion des performances à l’intégration des UIs modernes.
Quatre As dans la Manche et un Player Expérimental
Au-delà des habituelles corrections de bugs et optimisations de performance qui maintiennent le code propre et rapide, cette mise à jour majeure se distingue par l’introduction ou la refonte en profondeur de quatre modules clés. Ils promettent de transformer la façon dont les développeurs interagissent avec le contenu multimédia. De plus, Google lève le voile sur le très attendu CompositionPlayer, accessible en version expérimentale.
L’Inspecteur Multimédia : Quand le Diable se Cache dans les Détails (sans lecture)
Fini le temps où il fallait lancer une lecture pour glaner des informations sur un fichier multimédia ! Le tout nouveau module media3-inspector centralise désormais les outils essentiels pour examiner un média sans démarrer le moindre flux. Besoin de connaître la durée, le format, ou même d’extraire une vignette ? Le module regroupe des utilitaires comme MetadataRetriever, FrameExtractor, et MediaExtractorCompat, offrant une suite complète pour décortiquer vos fichiers.
Kristina Simakova, responsable de l’ingénierie, souligne : « Il y a beaucoup de cas où l’on souhaite inspecter le média sans lancer une lecture. Par exemple, pour détecter les formats qu’il contient, sa durée, ou récupérer des vignettes. »
Un simple appel à FrameExtractor.Builder(context, mediaItem).build().use { ... } permet par exemple de générer des miniatures en un clin d’œil, simplifiant grandement les tâches de prévisualisation et d’organisation.
Pour en savoir plus, consultez les nouvelles pages de guide dédiées.
Compose & Material3 : L’Épouse Parfaite pour votre UI Multimédia
Les développeurs célébreront l’arrivée de media3-ui-compose-material3, un module qui simplifie drastiquement la création d’interfaces utilisateur multimédia. Grâce à des boutons et éléments de contenu entièrement stylisés Material3, assembler une UI élégante ne prend que quelques étapes. Pour les puristes, les « blocs de construction » de base sont toujours là, gérant la logique de mise à jour et de connexion, vous laissant la liberté de concevoir votre propre esthétique.
L’exemple de code montre la simplicité de créer une interface minimale : quelques lignes suffisent pour un ContentFrame et des contrôles de base (lecture/pause, avance/retour rapide), transformant une tâche complexe en un jeu d’enfant. L’équipe promet également d’autres composants Compose à venir, comme une barre de recherche préintégrée et une intégration complète des sous-titres et des publicités.
Plongez dans les pages de guide étendues pour les modules UI de Compose.
CastPlayer Réécrit : Le Pont Invisible entre Lecture Locale et Streaming
Le module media3-cast reçoit une refonte majeure de son CastPlayer. Ce composant gère désormais de manière autonome les transitions fluides entre la lecture locale (par exemple avec ExoPlayer) et la diffusion distante via Google Cast. L’intégration est enfantine : enveloppez votre ExoPlayer dans un CastPlayer lors de la configuration de votre MediaSession et ajoutez un MediaRouteButton à votre interface utilisateur. Le tour est joué !
Cette automatisation simplifie grandement l’expérience utilisateur, qui peut passer d’un écran à l’autre sans interruption, offrant une continuité de lecture appréciable. Les développeurs n’ont plus à se soucier des logiques complexes de synchronisation et de transfert de contexte.
Pour en savoir plus, explorez le guide dédié à la création de CastPlayer.
AV1 : La Haute Définition Sous Contrôle avec dav1d
Pour les amateurs de vidéo de haute qualité, la version 1.9.0 introduit un module d’extension AV1 entièrement réécrit, basé sur la bibliothèque dav1d. Ce décodeur promet une lecture AV1 plus cohérente et fiable sur l’ensemble des appareils Android, garantissant une expérience visuelle optimale même avec ce codec de pointe. Attention, cette extension nécessite une compilation depuis la source pour inclure correctement le code natif nécessaire. Bien que cela assure une compatibilité étendue, l’exécution du décodage dans votre processus implique de faire confiance au contenu.
PreloadManager : Cache Intelligent et Gestion Mémoire au Scalpel
Le PreloadManager, déjà un atout majeur pour précharger le contenu multimédia en mémoire avant la lecture, monte en grade avec la version 1.9.0. Fini le casse-tête de la gestion de la mémoire ! Deux nouvelles fonctionnalités rendent ce module encore plus robuste :
-
Prise en charge du caching : Il est désormais possible de spécifier un état cible comme
PreloadStatus.specifiedRangeCached(0, 5000)pour que la plage de préchargement soit mise en cache sur le disque plutôt qu’en mémoire vive. Cela permet de précharger une quantité beaucoup plus importante de contenu sans saturer la RAM. -
Gestion automatique de la mémoire : Une limite supérieure de mémoire, fixée par défaut à 144 Mo, peut être définie pour tous les éléments préchargés en mémoire. Le
DefaultPreloadManagerarrête automatiquement le préchargement si cette limite est atteinte et libère intelligemment la mémoire des éléments de faible priorité. Un véritable coup de maître pour l’optimisation des ressources !
ExoPlayer : Plus Robuste, Plus Simple, Plus Malin
ExoPlayer, le cœur battant de Media3, ne cesse de s’améliorer avec cette nouvelle version. Plusieurs optimisations incrémentielles visent à rendre le lecteur plus performant et plus simple à manipuler :
-
Mute et Unmute Faciles : En plus de la méthode
setVolume, des fonctionsmuteetunmuteont été ajoutées pour restaurer le volume précédent sans effort, sans que le développeur ait à le suivre manuellement. -
Détection des Joueurs Bloqués : Pour lutter contre les cas rares où le lecteur se fige (en mode tampon ou lecture) sans progression, une
StuckPlayerExceptionest désormais signalée. Un diagnostic précieux pour des performances analytiques plus justes ! -
Wakelock par Défaut : La gestion du wake lock (maintien de l’écran ou du processeur actif) est maintenant activée par défaut, éliminant les retards de lecture en arrière-plan et simplifiant le code des développeurs.
-
Simplification des Sous-titres : Activer/désactiver les sous-titres via
TrackSelectionParametersétait un calvaire. Une option booléenne simple,selectTextByDefault, rend cette tâche désormais triviale.
MediaSession : Personnalisation des Boutons Multimédia Réinventée
Les préférences des boutons multimédia, notamment ceux affichés dans le tiroir de notifications sur Android Auto ou Wear OS, étaient une véritable corvée à configurer. Media3 1.9.0 change la donne avec une nouvelle fonctionnalité qui permet de définir ces préférences directement avec une commande de lecteur standard. Plus besoin de gérer des commandes personnalisées complexes : un simple session.setMediaButtonPreferences avec un CommandButton et une action prédéfinie suffit.
Le développeur peut désormais choisir une icône (ex: CommandButton.ICON_FAST_FORWARD), un nom d’affichage et l’action du lecteur associée (ex: Player.COMMAND_SEEK_FORWARD), rendant la personnalisation intuitive et rapide.
Découvrez comment définir vos préférences de boutons multimédia.
CompositionPlayer : Le Futur de l’Édition Multimédia en Temps Réel (Expérimental)
Une des annonces les plus excitantes de cette version est l’introduction, sous l’annotation @ExperimentalApi, du CompositionPlayer. Ce nouveau composant des API d’édition de Media3 est spécifiquement conçu pour la prévisualisation en temps réel des modifications multimédia. Basé sur l’interface Player de Media3, il permet aux utilisateurs de visualiser instantanément leurs montages avant l’exportation. En utilisant le même objet Composition que celui passé au Transformer, le flux de travail est fluidifié, unifiant le modèle de données pour la prévisualisation et l’exportation.
L’équipe encourage vivement les développeurs à expérimenter le CompositionPlayer et à partager leurs retours via le Media3 issue Tracker, promettant des mises à jour et de la documentation prochainement.
Transformer et InAppMuxer : Cohérence dans l’Exportation Multimédia
Le module Transformer, essentiel pour la manipulation et l’exportation de médias, adopte désormais InAppMp4Muxer comme multiplexeur par défaut. Cette transition assure une écriture des fichiers conteneurs multimédia plus cohérente et fiable sur toutes les versions d’API Android, car il s’appuie sur le module Muxer de Media3. Bien que le MediaMuxer de la plateforme Android ne soit plus utilisé par défaut, les développeurs ont toujours la possibilité de le réactiver via FrameworkMuxer.Factory si leurs besoins spécifiques l’exigent.
Nouvelles API de Réglage de Vitesse : La Maîtrise du Temps au Bout des Doigts
L’édition multimédia gagne en fluidité grâce à de nouvelles API simplifiées pour les ajustements de vitesse. La version 1.9.0 introduit des méthodes directement sur EditedMediaItem.Builder, rendant le contrôle de la vitesse plus intuitif. Il suffit d’appeler setSpeed(SpeedProvider provider) pour modifier le rythme d’un clip. Cette approche, qui remplace l’ancienne méthode Effects#createExperimentalSpeedChangingEffects() (désormais dépréciée), permet aux développeurs de définir des fournisseurs de vitesse personnalisés pour des effets temporels précis.
EditedMediaItemSequence : La Précision des Types de Piste
Pour une gestion plus explicite et robuste des pistes à travers les compositions, EditedMediaItemSequence exige désormais la spécification des types de piste de sortie souhaités lors de sa création. Cela se fait via un nouveau constructeur EditedMediaItemSequence.Builder acceptant un ensemble de types de piste (comme C.TRACK_TYPE_AUDIO ou C.TRACK_TYPE_VIDEO). Pour simplifier la vie des développeurs, des méthodes de commodité statiques ont été ajoutées, telles que EditedMediaItemSequence.withAudioFrom(...), .withVideoFrom(...), et .withAudioAndVideoFrom(...), permettant de créer des séquences audio, vidéo, ou les deux, en un clin d’œil.
Par exemple, la création d’une séquence uniquement vidéo devient plus limpide : EditedMediaItemSequence.Builder(setOf(C.TRACK_TYPE_VIDEO)).addItem(editedMediaItem).build().
Conclusion : Un Futur Multimédia Radieux
Avec la version 1.9.0, Media3 ne se contente pas de consolider ses fondations ; il élargit significativement ses capacités, offrant aux développeurs des outils plus puissants, plus intuitifs et plus fiables pour créer des expériences multimédias de pointe. Qu’il s’agisse de l’inspection de médias sans lecture, de l’intégration de Material3/Compose, de la gestion transparente de Cast, de la lecture AV1, ou des améliorations du PreloadManager et d’ExoPlayer, chaque module a été pensé pour maximiser l’efficacité. Le CompositionPlayer expérimental, quant à lui, promet de révolutionner le workflow d’édition en offrant une prévisualisation en temps réel.
Ces avancées préfigurent un avenir où la création et la consommation de contenu multimédia sur Android seront plus fluides et dynamiques que jamais. L’équipe de Media3 invite chaleureusement la communauté à tester ces nouveautés et à partager ses retours, contribuant ainsi à façonner les prochaines évolutions de cette bibliothèque essentielle.
Mots-clés : Media3, Android, ExoPlayer, Multimédia, Développement mobile
Source : Article original
