Media3

Prenez en charge des bibliothèques pour les cas d'utilisation de contenus multimédias.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
12 avril 2024 1.3.1 - - 1.4.0-alpha01

Déclarer des dépendances

Pour ajouter une dépendance sur Media3, vous devez ajouter le dépôt Maven de Google à votre projet. Pour en savoir plus, consultez la section Dépôt Maven de Google.

Ajoutez les dépendances des artefacts dont vous avez besoin dans le fichier build.gradle de votre application ou module :

Groovy

dependencies {
    def media3_version = "1.3.1"

    // For media playback using ExoPlayer
    implementation "androidx.media3:media3-exoplayer:$media3_version"

    // For DASH playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-dash:$media3_version"
    // For HLS playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-hls:$media3_version"
    // For SmoothStreaming playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version"
    // For RTSP playback support with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version"
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation "androidx.media3:media3-exoplayer-midi:$media3_version"
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-ima:$media3_version"

    // For loading data using the Cronet network stack
    implementation "androidx.media3:media3-datasource-cronet:$media3_version"
    // For loading data using the OkHttp network stack
    implementation "androidx.media3:media3-datasource-okhttp:$media3_version"
    // For loading data using librtmp
    implementation "androidx.media3:media3-datasource-rtmp:$media3_version"

    // For building media playback UIs
    implementation "androidx.media3:media3-ui:$media3_version"
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation "androidx.media3:media3-ui-leanback:$media3_version"

    // For exposing and controlling media sessions
    implementation "androidx.media3:media3-session:$media3_version"

    // For extracting data from media containers
    implementation "androidx.media3:media3-extractor:$media3_version"

    // For integrating with Cast
    implementation "androidx.media3:media3-cast:$media3_version"

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version"

    // For transforming media files
    implementation "androidx.media3:media3-transformer:$media3_version"

    // For applying effects on video frames
    implementation "androidx.media3:media3-effect:$media3_version"

    // For muxing media files
    implementation "androidx.media3:media3-muxer:$media3_version"

    // Utilities for testing media components (including ExoPlayer components)
    implementation "androidx.media3:media3-test-utils:$media3_version"
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation "androidx.media3:media3-test-utils-robolectric:$media3_version"

    // Common functionality for reading and writing media containers
    implementation "androidx.media3:media3-container:$media3_version"
    // Common functionality for media database components
    implementation "androidx.media3:media3-database:$media3_version"
    // Common functionality for media decoders
    implementation "androidx.media3:media3-decoder:$media3_version"
    // Common functionality for loading data
    implementation "androidx.media3:media3-datasource:$media3_version"
    // Common functionality used across multiple media libraries
    implementation "androidx.media3:media3-common:$media3_version"
}

Kotlin

dependencies {
    val media3_version = "1.3.1"

    // For media playback using ExoPlayer
    implementation("androidx.media3:media3-exoplayer:$media3_version")

    // For DASH playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-dash:$media3_version")
    // For HLS playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-hls:$media3_version")
    // For SmoothStreaming playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version")
    // For RTSP playback support with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version")
    // For MIDI playback support with ExoPlayer (see additional dependency requirements in
    // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md)
    implementation("androidx.media3:media3-exoplayer-midi:$media3_version")
    // For ad insertion using the Interactive Media Ads SDK with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-ima:$media3_version")

    // For loading data using the Cronet network stack
    implementation("androidx.media3:media3-datasource-cronet:$media3_version")
    // For loading data using the OkHttp network stack
    implementation("androidx.media3:media3-datasource-okhttp:$media3_version")
    // For loading data using librtmp
    implementation("androidx.media3:media3-datasource-rtmp:$media3_version")

    // For building media playback UIs
    implementation("androidx.media3:media3-ui:$media3_version")
    // For building media playback UIs for Android TV using the Jetpack Leanback library
    implementation("androidx.media3:media3-ui-leanback:$media3_version")

    // For exposing and controlling media sessions
    implementation("androidx.media3:media3-session:$media3_version")

    // For extracting data from media containers
    implementation("androidx.media3:media3-extractor:$media3_version")

    // For integrating with Cast
    implementation("androidx.media3:media3-cast:$media3_version")

    // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer
    implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version")

    // For transforming media files
    implementation("androidx.media3:media3-transformer:$media3_version")

    // For applying effects on video frames
    implementation("androidx.media3:media3-effect:$media3_version")

    // For muxing media files
    implementation("androidx.media3:media3-muxer:$media3_version")

    // Utilities for testing media components (including ExoPlayer components)
    implementation("androidx.media3:media3-test-utils:$media3_version")
    // Utilities for testing media components (including ExoPlayer components) via Robolectric
    implementation("androidx.media3:media3-test-utils-robolectric:$media3_version")

    // Common functionality for reading and writing media containers
    implementation("androidx.media3:media3-container:$media3_version")
    // Common functionality for media database components
    implementation("androidx.media3:media3-database:$media3_version")
    // Common functionality for media decoders
    implementation("androidx.media3:media3-decoder:$media3_version")
    // Common functionality for loading data
    implementation("androidx.media3:media3-datasource:$media3_version")
    // Common functionality used across multiple media libraries
    implementation("androidx.media3:media3-common:$media3_version")
}

Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.

Commentaires

Vos commentaires nous aident à améliorer Jetpack. Vous pouvez utiliser l'outil Issue Tracker Media3 pour obtenir des réponses à vos questions, aux problèmes connus et aux demandes de fonctionnalités, et pour signaler de nouveaux problèmes.

Version 1.4.0

Version 1.4.0-alpha01

17 avril 2024

Publication d'androidx.media3:media3-*:1.4.0-alpha01. La version 1.4.0-alpha01 contient ces commits.

  • ExoPlayer:
    • Ajout de BasePreloadManager qui coordonne le préchargement de plusieurs sources en fonction des priorités définies par leur rankingData. Il est possible de le personnaliser en prolongeant ce cours. Ajout de DefaultPreloadManager, qui utilise PreloadMediaSource pour précharger en mémoire des échantillons multimédias des sources, ainsi qu'un rankingData entier qui indique l'index d'un élément sur l'interface utilisateur.
    • Ajout de PlayerId à la plupart des méthodes de LoadControl pour permettre aux implémentations LoadControl de prendre en charge plusieurs joueurs.
    • Suppression de Buffer.isDecodeOnly() et C.BUFFER_FLAG_DECODE_ONLY. Il n'est pas nécessaire de définir cet indicateur, car les moteurs de rendu et les décodeurs décident d'ignorer les tampons en fonction de l'horodatage. Les implémentations Renderer personnalisées doivent vérifier si le temps de mise en mémoire tampon est d'au moins BaseRenderer.getLastResetPositionUs() pour décider si un échantillon doit être affiché. Les implémentations SimpleDecoder personnalisées peuvent vérifier isAtLeastOutputStartTimeUs si nécessaire ou marquer d'autres tampons avec DecoderOutputBuffer.shouldBeSkipped pour les ignorer.
    • Autorise le renvoi d'une valeur nulle par TargetPreloadStatusControl.getTargetPreloadStatus(T) pour indiquer de ne pas précharger un MediaSource avec le rankingData donné.
    • Ajout de remove(MediaSource) à BasePreloadManager.
  • Transformateur :
    • Ajout de audioConversionProcess et videoConversionProcess à ExportResult pour indiquer comment la piste correspondante dans le fichier de sortie a été créée.
    • Assouplissement des vérifications de niveau H.264 d'optimisation de l'outil Couper.
    • Prise en charge du passage entre les contenus d'entrée SDR et HDR dans une séquence.
    • Prise en charge des effets audio au niveau de la composition.
    • Prise en charge du transcodage des images Ultra HDR en vidéos HDR.
    • Correction d'un problème qui empêchait DefaultAudioMixer de renvoyer le nombre correct d'octets après avoir été réinitialisé et réutilisé.
  • Vidéo :
    • Correction d'un problème qui entraînait l'arrivée trop tôt de Listener.onRenderedFirstFrame() lors du changement de surface en cours de lecture.
  • Source de données :
    • Implémentez la prise en charge des URI de ressources brutes android.resource://package/idpackage est différent du package de l'application actuelle. Cela n'a pas été documenté auparavant, mais il s'agit d'un moyen plus efficace d'accéder aux ressources d'un autre package que par leur nom.
    • Vérifiez rapidement que url n'est pas nul dans les constructeurs DataSpec. Ce paramètre a déjà été annoté comme étant non nul.
  • Effet :
    • Prise en charge de plusieurs changements de vitesse dans le même EditedMediaItem ou Composition dans SpeedChangeEffect.
    • Prise en charge de la sortie HLG et PQ à partir d'une entrée bitmap ultra HDR.
    • Ajout de la prise en charge de EGL_GL_COLORSPACE_BT2020_HLG_EXT, ce qui améliore la sortie de surface HLG dans ExoPlayer.setVideoEffect et la surface de débogage de Transformer.
    • Mettez à jour l'implémentation de la matrice de superposition pour la rendre cohérente avec la documentation en inversant les valeurs x et y appliquées dans setOverlayFrameAnchor(). Si vous utilisez OverlaySettings.Builder.setOverlayFrameAnchor(), inversez leurs valeurs x et y en les multipliant par -1.
  • Session:
    • Définissez la valeur par défaut CommandButton.enabled sur true et assurez-vous que la valeur peut rester "false" pour les manettes même si la commande associée est disponible.
    • Ajout de constantes d'icône pour CommandButton. Elles doivent être utilisées à la place des ressources d'icône personnalisée.
    • Ajout de MediaSessionService.isPlaybackOngoing() pour permettre aux applications de demander si le service doit être arrêté dans onTaskRemoved(). (#1219)
    • Ajout de MediaSessionService.pauseAllPlayersAndStopSelf(), qui permet de mettre en pause la lecture de toutes les sessions et d'appeler stopSelf pour mettre fin au cycle de vie de MediaSessionService.
    • Ignorez MediaSessionService.onTaskRemoved(Intent) pour fournir une implémentation par défaut sûre qui permet de maintenir le service au premier plan si la lecture est en cours ou l'arrête dans le cas contraire.
  • Téléchargements :
    • Assurez-vous que DownloadHelper ne fuit pas d'instances Renderer non publiées, car cela pourrait entraîner le plantage de l'application avec IllegalStateException: Too many receivers, total of 1000, registered for pid. (#1224)
  • Utilitaires de test :
    • Implémentez onInit() et onRelease() dans FakeRenderer.
    • Modifiez les méthodes TestPlayerRunHelper.runUntil/playUntil pour qu'elles échouent en cas d'erreurs non fatales (par exemple, celles signalées à AnalyticsListener.onVideoCodecError). Utilisez la nouvelle chaîne de méthodes TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() pour désactiver ce comportement.
  • Application de démonstration :
    • Utilisez DefaultPreloadManager dans l'application de démonstration pour les formats courts.
  • Suppression des symboles obsolètes :
    • Suppression de CronetDataSourceFactory. Utilisez plutôt CronetDataSource.Factory.
    • Suppression de certains constructeurs DataSpec. Utilisez plutôt DataSpec.Builder.

Version 1.3.0

Version 1.3.1

11 avril 2024

Publication d'androidx.media3:media3-*:1.3.1. La version 1.3.1 contient ces commits.

  • Bibliothèque commune :
    • Ajoutez Format.labels pour autoriser les libellés localisés ou d'autres libellés.
  • ExoPlayer:
    • Correction d'un problème qui empêchait PreloadMediaPeriod de conserver les flux lorsqu'ils sont à nouveau préchargés.
    • Appliquez le TrackSelectionResult correspondant correct à la période de lecture lors de la resélection de la piste.
    • Lancement des moteurs de rendu à activation anticipée uniquement après avoir avancé la période de lecture lors de la transition entre les éléments multimédias. (#1017)
    • Ajout du type renvoyé manquant à la règle -keepclasseswithmembers ProGuard pour DefaultVideoFrameProcessor.Factory.Builder.build(). (#1187)
  • Transformateur :
    • Ajout d'une solution de contournement pour l'exception générée, car MediaMuxer n'accepte pas les horodatages de présentation négatifs avant l'API 30.
  • Sélection de la piste :
    • DefaultTrackSelector: privilégiez les pistes vidéo dont la fréquence d'images est "raisonnable" (>=10 FPS) à celles dont la fréquence d'images est inférieure ou non définie. Cela garantit que le lecteur sélectionne la "véritable" piste vidéo dans les fichiers MP4 extraits de photos animées pouvant contenir deux pistes HEVC, dont l'une a une résolution plus élevée, mais un très petit nombre d'images. (#1051)
  • Extracteurs :
    • Correction d'un problème où le remplissage n'était pas ignoré lors de la lecture de fragments de taille impaire à partir de fichiers WAV. (#1117)
    • MP3: insérez Format.averageBitrate à partir d'images de métadonnées telles que XING et VBRI.
    • MPEG-TS: annulation d'une modification visant à garantir le rendu du dernier frame en transmettant la dernière unité d'accès d'un flux à l'exemple de file d'attente. (#7909) Cela est dû au fait que ce changement entraîne de nouveaux problèmes avec les flux HLS uniquement I-frame (#1150) et les flux HLS H.262 (#1126).
  • Audio:
    • Autorisez la récupération du moteur de rendu en désactivant le déchargement si la piste audio ne s'initialise pas en mode de déchargement.
  • Vidéo :
    • Ajout d'une solution de contournement à un problème d'appareil sur la Galaxy Tab S7 FE, Chromecast avec Google TV et Lenovo M10 FHD Plus, qui entraîne le marquage des flux H265 à 60 FPS comme non compatibles.
    • Ajout d'une solution de contournement qui garantit que la première image est toujours affichée lors de la création d'un tunnel, même si l'appareil ne le fait pas automatiquement comme requis par l'API. (#1169) (#966)
    • Correction d'un problème où la gestion des informations sur les couleurs HDR entraînait un comportement inapproprié du codec et empêche les changements de format adaptatifs pour les pistes vidéo SDR. (#1158)
  • Texte :
    • WebVTT: empêche les repères directs consécutifs de créer de fausses instances CuesWithTiming supplémentaires à partir de WebvttParser.parse. (#1177)
  • DRM:
    • Contournement d'une exception NoSuchMethodError qui peut être générée par le framework MediaDrm au lieu de ResourceBusyException ou NotProvisionedException sur certains appareils Android 14. (#1145)
  • Effet :
    • Amélioration du mappage des tons PQ en SDR grâce à la conversion des espaces colorimétriques
  • Session:
    • Correction du problème où la position actuelle revient en arrière lorsque le contrôleur remplace l'élément actuel. (#951)
    • Correction d'un problème qui empêchait la transmission d'une MediaMetadata contenant uniquement une valeur extras non nulle entre les contrôleurs multimédias et les sessions. (#1176)
  • UI:
    • Création de remplacement pour inclure le nom de la langue de la piste audio si Locale ne peut pas identifier de nom à afficher. (#988)
  • Extension DASH :
    • Renseignements sur tous les éléments Label du fichier manifeste dans Format.labels. (#1054)
  • Extension RTSP :
    • Les valeurs d'informations de session vides (i-tags) sont ignorées dans l'analyse SDP. (#1087)
  • Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • Désactivez par défaut l'extension MIDI en tant que dépendance locale, car elle nécessite la configuration d'un dépôt Maven supplémentaire. Les utilisateurs ayant besoin de ce module depuis une dépendance locale peuvent le réactiver.

Version 1.3.0

6 mars 2024

Publication d'androidx.media3:media3-*:1.3.0. La version 1.3.0 contient ces commits.

  • Bibliothèque commune :
    • Implémentez la prise en charge des URI de ressources brutes android.resource://package/[type/]namepackage est différent du package de l'application actuelle. Cette approche a toujours été documentée pour fonctionner, mais elle n'a pas été correctement mise en œuvre jusqu'à présent.
    • Normalisez les types MIME définis par le code de l'application ou lus à partir des contenus multimédias pour qu'ils soient entièrement en minuscules.
    • Définissez les annonces avec un MediaItem complet au lieu d'un seul Uri dans AdPlaybackState.
    • Augmentez minSdk à 19 (Android KitKat). Comme toutes les autres bibliothèques AndroidX, elles sont nécessaires pour passer aux dernières versions de nos dépendances AndroidX.
    • Renseignements artworkUri et artworkData dans MediaMetadata.Builder.populate(MediaMetadata) lorsqu'au moins l'un d'entre eux n'est pas nul (#964).
  • ExoPlayer:
    • Ajout de PreloadMediaSource et PreloadMediaPeriod pour permettre aux applications de précharger une source multimédia de contenu à une position de départ spécifique avant la lecture. PreloadMediaSource se charge de la préparation de la source multimédia de contenu pour recevoir le Timeline, de la préparation et de la mise en cache de la période à la position de départ donnée, de la sélection des pistes et du chargement des données multimédias pour cette période. Les applications contrôlent la progression du préchargement en implémentant PreloadMediaSource.PreloadControl et définissent la source préchargée sur le lecteur pour la lecture.
    • Ajout de ExoPlayer.setImageOutput qui permet aux applications de définir ImageRenderer.ImageOutput.
    • DefaultRenderersFactory fournit désormais un ImageRenderer au joueur par défaut avec des valeurs ImageOutput et ImageDecoder.Factory.DEFAULT nulles.
    • Émet un événement Player.Listener.onPositionDiscontinuity lorsque le silence est ignoré. (#765)
    • Ajout de la compatibilité expérimentale pour l'analyse des sous-titres lors de l'extraction. Vous pouvez l'activer à l'aide de MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Prenez en charge les sources multimédias adaptatives avec PreloadMediaSource.
    • Implémentez HttpEngineDataSource, un HttpDataSource à l'aide de l'API HttpEngine.
    • Empêche le sous-classement de CompositeSequenceableLoader. Ce composant a déjà été rendu extensible, mais n'a jamais été sous-classé dans la bibliothèque. Les personnalisations peuvent être effectuées en encapsulant une instance à l'aide du modèle décorateur et en implémentant un CompositeSequenceableLoaderFactory personnalisé.
    • Correction d'un problème où la répétition d'une même heure entraînait la suppression des métadonnées de cet élément. (#1007)
    • Changement de nom : les méthodes experimentalSetSubtitleParserFactory sur BundledChunkExtractor.Factory et DefaultHlsExtractorFactory deviennent setSubtitleParserFactory, et interdisent la transmission de null. Utilisez les nouvelles méthodes experimentalParseSubtitlesDuringExtraction(boolean) pour contrôler le comportement d'analyse.
    • Ajout de la possibilité de personnaliser le SubtitleParser.Factory utilisé lors de l'extraction. Pour ce faire, utilisez MediaSource.Factory.setSubtitleParserFactory().
    • Ajoutez un préfixe source à tous les champs Format.id générés à partir de MergingMediaSource. Cela permet d'identifier la source qui a généré un Format. (#883)
    • Correction de l'expression régulière utilisée pour valider les noms de clés CMCD (Common Media Client Data) personnalisés en la modifiant pour ne rechercher que les traits d'union. (#1028)
    • Arrêt du double encodage des paramètres de requête CMCD. (#1075)
  • Transformateur :
    • Prise en charge de l'aplatissement des vidéos au ralenti H.265/HEVC SEF.
    • Augmentez la vitesse de transmuxage, en particulier pour les modifications apportées à l'option "Supprimer une vidéo".
    • Ajout d'une API pour vérifier que le fichier de sortie commence sur une image vidéo. Cela peut améliorer la compatibilité de la sortie des opérations de découpage avec les implémentations du lecteur qui n'affichent pas la première image vidéo avant l'horodatage de présentation (#829).
    • Prise en charge de l'optimisation des opérations d'édition d'un élément MP4.
    • Ajoutez la compatibilité pour vous assurer qu'une image vidéo comporte le premier code temporel dans le fichier de sortie. Correction des fichiers de sortie commençant par un cadre noir sur les lecteurs iOS. (#829)
  • Sélection de la piste :
    • Ajout de DefaultTrackSelector.selectImageTrack pour activer la sélection de la piste d'image.
    • Ajout de TrackSelectionParameters.isPrioritizeImageOverVideoEnabled pour déterminer s'il faut sélectionner une piste d'image si une piste d'image et une piste vidéo sont disponibles. La valeur par défaut est false, ce qui signifie que la sélection d'une piste vidéo est prioritaire.
  • Extracteurs :
    • Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs ColorInfo.colorSpace, ColorInfo.colorTransfer et ColorInfo.colorRange. (#692)
    • MP3: utilisez la recherche à débit constant (CBR) pour les fichiers avec un en-tête Info (l'équivalent CBR de l'en-tête Xing). Nous avons précédemment utilisé la table de recherche à partir de l'en-tête Info, mais la recherche est moins précise que si nous l'ignorions et supposons que le fichier est CBR.
    • MPEG2-TS: ajout de la prise en charge de DTS, DTS-LBR et DTS:X Profile2 (#275).
    • Extraction des types audio à partir des descripteurs TS et les mapper à des indicateurs de rôle, ce qui permet aux utilisateurs de faire des sélections de pistes audio plus éclairées. (#973)
  • Audio:
    • Amélioration de l'algorithme de saut des silences avec une augmentation progressive du volume ; conservation d'un temps de silence minimal et de durées plus naturelles. (#7423)
    • Signalement plus déterministe du silence ignoré. (#1035)
  • Vidéo :
    • Modifiez le constructeur MediaCodecVideoRenderer, qui accepte un argument VideoFrameProcessor.Factory, et remplacez-le par un constructeur qui accepte un argument VideoSinkProvider. Les applications qui souhaitent injecter un VideoFrameProcessor.Factory personnalisé peuvent instancier un CompositingVideoSinkProvider qui utilise le VideoFrameProcessor.Factory personnalisé et transmettre le fournisseur de récepteur vidéo à MediaCodecVideoRenderer.
  • Texte :
    • Correction de la sérialisation des repères bitmap pour résoudre l'erreur Tried to marshall a Parcel that contained Binder objects lors de l'utilisation de DefaultExtractorsFactory.setTextTrackTranscodingEnabled. (#836)
    • CEA-708: ignorer la valeur rowLock. La spécification CEA-708-E S-2023 stipule que rowLock et columnLock doivent tous deux être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la compatibilité avec columnLock n'étant pas implémentée, on suppose que ce sera toujours "false").
  • Image:
    • Prise en charge des vignettes DASH. Les images de la grille sont recadrées, et des vignettes individuelles sont fournies à ImageOutput à l'heure de leur présentation.
  • DRM:
  • Extension IMA :
    • Résolution du problème empêchant la lecture des annonces DASH et HLS sans l'extension de fichier appropriée.
  • Session:
    • Désactivation de la détection des doubles clics pour les applications TV. (#962)
    • Correction d'un problème où MediaItem.RequestMetadata ne contenant que des éléments supplémentaires non nuls n'était pas transmis entre les contrôleurs multimédias et les sessions.
    • Ajout d'un constructeur à MediaLibrarySession.Builder qui n'accepte qu'un Context au lieu d'un MediaLibraryService.
  • Extension HLS :
    • Réduisez HlsMediaPeriod à une visibilité "privée pour les packages". Ce type ne doit pas dépendre directement de l'extérieur du package HLS.
    • La fonction "Resolve" recherche plus efficacement le début d'un segment. (#1031)
  • Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • Décodeur MIDI: ignore les messages d'événement SysEx. (#710)
  • Utilitaires de test :
    • Ne pas suspendre la lecture dans TestPlayerRunHelper.playUntilPosition. Le test maintient la lecture dans l'état de lecture, mais suspend la progression jusqu'à ce que le test puisse ajouter des assertions et d'autres actions.
  • Application de démonstration :
    • Ajoutez un module de démonstration court pour faire la démonstration de l'utilisation de PreloadMediaSource avec le cas d'utilisation de contenus courts.

Version 1.3.0-rc01

22 février 2024

Utilisez la version stable 1.3.0.

Version 1.3.0-beta01

7 février 2024

Utilisez la version stable 1.3.0.

Version 1.3.0-alpha01

15 janvier 2024

Utilisez la version stable 1.3.0.

Version 1.2.0

Version 1.2.1

9 janvier 2024

  • ExoPlayer:
    • Correction d'un problème où le décalage de la recherche manuelle en dehors de la plage de LiveConfiguration.min/maxOffset continue d'ajuster le décalage sur min/maxOffset.
    • Correction du problème d'erreur des mises en page de canaux OPUS et VORBIS pour 3, 5, 6, 7 et 8 canaux. (#8396)
    • Correction d'un problème qui entraînait le démarrage incorrect de la sélection de titres après un retour à zéro dans un flux en direct à sa position par défaut. (#9347)
    • Correction du problème où les nouvelles instances de CmcdData.Factory recevaient des valeurs négatives pour bufferedDurationUs provenant de sources de fragments, ce qui entraînait une IllegalArgumentException. (#888)
  • Transformateur :
    • Contournement d'un problème lié à l'encodeur, qui se produisait au moment de la configuration en raison de la définition d'un taux de fonctionnement élevé.
  • Extracteurs :
    • Marquez les pistes HEVC secondaires (non lisibles) dans les photos animées JPEG comme ROLE_FLAG_ALTERNATE pour éviter qu'elles ne soient automatiquement sélectionnées pour la lecture en raison de leur résolution plus élevée.
    • Correction d'une détection d'image clé incorrecte pour les flux TS H264. (#864)
    • Correction de l'estimation de la durée des flux TS de plus de 47 721 secondes. (#855)
  • Audio:
    • Correction de la gestion de la fin d'assistance pour SilenceSkippingAudioProcessor lorsqu'il est appelé plusieurs fois. (#712)
  • Vidéo :
    • Ajout d'une solution de contournement à un problème d'appareil sur Galaxy Tab S7 FE, Chromecast avec Google TV et Lenovo M10 FHD Plus, qui entraîne le marquage des flux AVC à 60 FPS comme non compatibles. (#693)
  • Métadonnées :
    • Correction d'un bug qui provoquait le remplissage de MediaMetadata uniquement à partir de commentaires Vorbis avec des clés en majuscules. (#876)
    • Récupérez OutOfMemoryError lors de l'analyse d'images ID3 très volumineuses, ce qui signifie que la lecture peut se poursuivre sans les informations de la balise au lieu d'échouer complètement.
  • DRM:
    • Extension de la solution de contournement à l'API 33 ou ultérieure pour les fausses URL de licence ClearKey https://default.url (#837).
    • Correction de ERROR_DRM_SESSION_NOT_OPENED lors du passage d'un contenu chiffré à un contenu clair sans surface attachée au lecteur. Cette erreur était due à l'utilisation incorrecte d'un décodeur sécurisé pour lire le contenu clair.
  • Session:
    • Insertion des clés et valeurs personnalisées de MediaMetadataCompat dans MediaMetadata.extras et de MediaMetadata.extras dans MediaMetadataCompat. (#756, #802).
    • Correction de la diffusion de notifyChildrenChanged pour les anciennes manettes. (#644)
    • Correction d'un bug qui provoquait un plantage sur certains appareils lorsque la définition d'un délai négatif sur un minuteur setWhen désactivé de la notification entraînait un plantage sur certains appareils. (#903)
    • Correction de IllegalStateException lorsque le contrôleur de notifications multimédias n'a pas fini de se connecter lorsque la première mise à jour des notifications est demandée. (#917)
  • UI:
    • Correction d'un problème qui empêchait les boutons d'avancer et de retour arrière lorsqu'ils étaient utilisés avec Material Design dans un BottomSheetDialogFragment. (#511)
    • Correction d'un problème d'alignement des chiffres sur le bouton d'avance rapide dans PlayerControlView. (#547)
  • Extension DASH :
    • Analyse "f800" comme le nombre de canaux 5 pour Dolby dans le fichier manifeste DASH. (#688)
  • Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • MIDI: correction du problème où la recherche vers l'avant ignorait les événements de modification du programme. (#704)
    • Migration vers FFmpeg 6.0 et mise à jour du NDK compatible vers r26b. (#707, #867)
  • Extension Cast :
    • Nettoyage de la création d'un Timeline pour ne pas faire planter l'application lorsque le chargement d'un contenu multimédia échoue sur l'appareil Cast. (#708)

Version 1.2.0

15 novembre 2023

  • Bibliothèque commune :
    • Ajoutez un paramètre @Nullable Throwable aux méthodes dans l'interface Log.Logger. Le paramètre message de ces méthodes ne contient plus d'informations sur le Throwable transmis aux méthodes Log.{d,i,w,e}(). Les implémentations devront donc ajouter manuellement ces informations si nécessaire (éventuellement à l'aide de Logger.appendThrowableString(String, Throwable)).
    • Correction d'un problème de compatibilité Kotlin où les paramètres de type génériques pouvant avoir une valeur nulle et les types d'éléments de tableau pouvant avoir une valeur nulle ne sont pas détectés comme pouvant avoir une valeur nulle. Exemples : paramètres des méthodes TrackSelectorResult et SimpleDecoder. (#6792)
    • Modification de l'interface utilisateur par défaut et du comportement des notifications dans Util.shouldShowPlayButton pour afficher un bouton de lecture lorsque la lecture est temporairement supprimée (par exemple, en raison d'une perte temporaire de mise au point audio). L'ancien comportement peut être conservé à l'aide de PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) ou MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false). (#11213)
    • Mettez à niveau androidx.annotation:annotation-experimental vers 1.3.1 pour résoudre le problème https://issuetracker.google.com/251172715.
    • Déplacez ExoPlayer.setAudioAttributes vers l'interface Player.
  • ExoPlayer:
    • Correction des problèmes de recherche dans les flux AC4 causés par une mauvaise identification des échantillons de type "décodage uniquement". (#11000)
    • Ajoutez la suppression de la lecture sur les périphériques de sortie audio inappropriés (par exemple, le haut-parleur intégré sur les appareils Wear OS) lorsque cette fonctionnalité est activée via ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. Le motif de suppression de la lecture est défini sur Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT si la lecture est lancée lorsqu'aucune sortie audio appropriée n'est disponible ou si toutes les sorties appropriées sont déconnectées pendant la lecture. Le motif de suppression sera supprimé lorsqu'une sortie appropriée sera connectée.
    • Ajoutez MediaSource.canUpdateMediaItem et MediaSource.updateMediaItem pour accepter les mises à jour de MediaItem après la création via Player.replaceMediaItem(s).
    • Autorisation des mises à jour de MediaItem pour toutes les classes MediaSource fournies par la bibliothèque via Player.replaceMediaItem(s). (#33, #9978)
    • MimeTypes.TEXT_EXOPLAYER_CUES a été renommé MimeTypes.APPLICATION_MEDIA3_CUES.
    • Ajoutez PngExtractor qui envoie et lit un fichier PNG entier dans TrackOutput comme un échantillon.
    • Amélioration de la méthode SequenceableLoader.continueLoading(long) dans l'interface SequenceableLoader pour SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contient des paramètres supplémentaires, y compris playbackSpeed et lastRebufferRealtimeMs, en plus du playbackPositionUs existant.
    • Amélioration de la méthode ChunkSource.getNextChunk(long, long, List, ChunkHolder) dans l'interface ChunkSource pour ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Ajout de champs supplémentaires à la journalisation CMCD (Common Media Client Data) : pénurie de mémoire tampon (bs), délai (dl), taux de lecture (pr) et démarrage (su) (#8699).
    • Ajout de la profondeur de bits de luma et de chroma à ColorInfo. (#491).
    • Ajout de champs supplémentaires à la journalisation CMCD (Common Media Client Data) : requête d'objet suivante (nor) et requête de plage suivante (nrr) (#8699).
    • Ajout d'une fonctionnalité permettant de transmettre des données CMCD (Common Media Client Data) à l'aide de paramètres de requête. (#553)
    • Correction de ConcurrentModificationException dans ExperimentalBandwidthMeter (#612).
    • Ajout du paramètre MediaPeriodId à CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Prise en charge de ClippingMediaSource (et d'autres sources avec des décalages de période/fenêtre) dans ConcatenatingMediaSource2. (#11226)
    • Modifiez BaseRenderer.onStreamChanged() pour recevoir également un argument MediaPeriodId.
  • Transformateur :
    • Analyser les données de rotation EXIF pour les entrées d'image.
    • Suppression du type d'annotation TransformationRequest.HdrMode et des constantes associées. Utilisez plutôt Composition.HdrMode et ses constantes associées.
    • Simplifier la OverlaySettings pour résoudre les problèmes de rotation.
    • Remplacement des paramètres frameRate et durationUs de SampleConsumer.queueInputBitmap par TimestampIterator.
  • Sélection de la piste :
    • Ajoutez DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness pour autoriser ou interdire explicitement une adaptation non fluide. La valeur par défaut conserve son comportement actuel (true).
  • Extracteurs :
    • MPEG-TS: permet de s'assurer que le dernier frame est affiché en transmettant la dernière unité d'accès d'un flux à l'exemple de file d'attente. (#7909)
    • Correction d'une faute d'orthographe lors de la détermination de rotationDegrees. Remplacement de projectionPosePitch par projectionPoseRoll (#461).
    • Supprimez l'hypothèse selon laquelle les instances Extractor peuvent être directement inspectées avec instanceof. Si vous souhaitez accéder à l'exécution des détails d'implémentation d'un Extractor, vous devez d'abord appeler Extractor.getUnderlyingInstance.
    • Ajout de BmpExtractor.
    • Ajout de WebpExtractor.
    • Ajout de HeifExtractor.
    • Ajout de la compatibilité QuickTime classique à Mp4Extractor.
  • Audio:
    • Prise en charge du PCM big-endian 24/32 bits en MP4 et Matroska, et analyse de l'encodage PCM pour lpcm en MP4.
    • Prise en charge de l'extraction du contenu audio Vorbis au format MP4.
    • Ajoutez AudioSink.getFormatOffloadSupport(Format) qui récupère le niveau de compatibilité du déchargement que le récepteur peut fournir pour le format via un DefaultAudioOffloadSupportProvider. Elle renvoie le nouveau AudioOffloadSupport contenant isFormatSupported, isGaplessSupported et isSpeedChangeSupported.
    • Ajout de AudioSink.setOffloadMode() via lequel la configuration de déchargement sur le récepteur audio est configurée. La valeur par défaut est AudioSink.OFFLOAD_MODE_DISABLED.
    • Le déchargement peut être activé via setAudioOffloadPreference dans TrackSelectionParameters. Si la préférence définie doit être activée, que l'appareil est compatible avec le déchargement pour ce format et que la piste sélectionnée ne correspond qu'à une seule piste audio, le déchargement audio est activé.
    • Si audioOffloadModePreference est défini sur AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector ne sélectionne une piste audio que si le format de cette piste est compatible avec le déchargement. Si aucune piste audio n'est compatible avec le déchargement, aucune piste n'est sélectionnée.
    • Désactivation de la prise en charge sans interruption du déchargement en cas de niveau d'API 33 antérieur en raison d'un problème de position de lecture après la transition de la piste.
    • Suppression du paramètre enableOffload de la signature de la méthode DefaultRenderersFactory.buildAudioSink.
    • Supprimez la méthode DefaultAudioSink.Builder.setOffloadMode.
    • Suppression de la valeur intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Ajout de la prise en charge des métadonnées Opus sans écarts pendant la lecture du déchargement.
    • Prise en charge de la récupération du moteur de rendu en désactivant le déchargement en cas d'échec lors de la première écriture. (#627)
    • Activez la planification de déchargement par défaut pour la lecture déchargée de l'audio uniquement.
    • Supprimez ExoPlayer.experimentalSetOffloadSchedulingEnabled et AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged a été renommé onSleepingForOffloadChanged et onExperimentalOffloadedPlayback onOffloadedPlayback.
    • Déplacement des interfaces et définitions TrackSelectionParameters liées au mode de déchargement audio vers une classe AudioOffloadPreferences interne.
    • Ajout des rappels onAudioTrackInitialized et onAudioTrackReleased à AnalyticsListener, AudioRendererEventListener et AudioSink.Listener.
    • Correction du problème de dépassement de capacité négatif de la mémoire tampon audio DTS Express (#650).
    • Correction d'un bug qui provoquait la vérification des fonctionnalités pour E-AC3-JOC générant une exception IllegalArgumentException. (#677)
  • Vidéo :
    • Autorisez MediaCodecVideoRenderer à utiliser un VideoFrameProcessor.Factory personnalisé.
    • Correction d'un bug qui empêchait l'affichage de la première image si le flux audio commençait par des codes temporels négatifs. (#291)
  • Texte :
    • Supprimez ExoplayerCuesDecoder. Les pistes de texte avec sampleMimeType = application/x-media3-cues sont désormais directement gérées par TextRenderer sans avoir besoin d'une instance SubtitleDecoder.
  • Métadonnées :
    • MetadataDecoder.decode ne sera plus appelé pour les exemples de type "décodage uniquement", car l'implémentation doit quand même renvoyer une valeur nulle.
  • Effet :
    • Ajout d'une entrée bitmap de mise en file d'attente VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) par horodatage.
    • Modifiez VideoFrameProcessor.registerInputStream() pour qu'il ne soit pas bloquant. Les applications doivent implémenter VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Remplacement des paramètres frameRate et durationUs de VideoFrameProcessor.queueInputBitmap par TimestampIterator.
  • Extension IMA :
    • Correction d'un bug qui provoquait une exception pour une diffusion en direct DASH multipériode qui n'est pas le premier élément d'une playlist. (#571)
    • Libérez StreamManager avant d'appeler AdsLoader.destroy()
    • Passage du SDK IMA vers la version 3.31.0.
  • Session:
    • Définition du comportement du service de premier plan des notifications sur FOREGROUND_SERVICE_IMMEDIATE dans DefaultMediaNotificationProvider. (#167)
    • N'utilisez android.media.session.MediaSession.setMediaButtonBroadcastReceiver() qu'au-dessus de l'API 31 pour éviter les problèmes liés à l'API obsolète sur les appareils Samsung. (#167)
    • Utilisez le contrôleur de notifications multimédias en tant que proxy pour définir les commandes disponibles et la mise en page personnalisée utilisée pour renseigner la notification et la session de la plate-forme.
    • Convertissez les événements de bouton multimédia reçus par MediaSessionService.onStartCommand() dans Media3 au lieu de les acheminer vers la session de la plate-forme, puis vers Media3. Ainsi, le contrôleur de l'appelant est toujours le contrôleur des notifications multimédias, et les applications peuvent facilement reconnaître les appels provenant de la notification de la même manière sur tous les niveaux d'API compatibles.
    • Correction d'un bug qui empêchait MediaController.getCurrentPosition() d'avancer lorsqu'il était connecté à un ancien MediaSessionCompat.
    • Pour plus de commodité, ajoutez MediaLibrarySession.getSubscribedControllers(mediaId).
    • Ignorez MediaLibrarySession.Callback.onSubscribe() pour confirmer la disponibilité de l'ID parent pour lequel le contrôleur s'abonne. En cas de succès, l'abonnement est accepté et notifyChildrenChanged() est appelé immédiatement pour informer le navigateur. (#561)
    • Ajout d'un module de démonstration de session pour Automotive OS et activation de la démo de session pour Android Auto.
    • Ne définissez pas la file d'attente de la session de framework lorsque COMMAND_GET_TIMELINE n'est pas disponible pour le contrôleur des notifications multimédias. Avec Android Auto comme contrôleur client lisant à partir de la session de framework, le bouton queue de l'interface utilisateur d'Android Auto ne s'affiche pas. (#339)
    • Utilisation de DataSourceBitmapLoader par défaut à la place de SimpleBitmapLoader (#271, #327).
    • Ajout de MediaSession.Callback.onMediaButtonEvent(Intent), qui permet aux applications d'ignorer la gestion des événements du bouton multimédia par défaut.
  • UI:
    • Ajout d'une implémentation Player.Listener pour les appareils Wear OS qui gère la suppression de la lecture en raison de Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT en lançant une boîte de dialogue système pour permettre à un utilisateur de connecter une sortie audio appropriée (par exemple, un casque Bluetooth). L'écouteur reprend automatiquement la lecture si un appareil approprié est connecté pendant un délai configurable (la valeur par défaut est de 5 minutes).
  • Téléchargements :
    • Déclarez le type de service de premier plan "synchronisation des données" pour DownloadService afin de garantir la compatibilité avec Android 14. Lorsque vous utilisez ce service, l'application doit également ajouter dataSync en tant que foregroundServiceType dans le fichier manifeste et ajouter l'autorisation FOREGROUND_SERVICE_DATA_SYNC. (#11239)
  • Extension HLS :
    • Actualisation de la playlist en direct HLS avec un intervalle calculé à partir de l'heure de début du dernier chargement plutôt que de l'heure de fin du dernier chargement. (#663)
  • Extension DASH :
    • Autorisez plusieurs fois le même identifiant DASH dans l'URL du modèle de segment.
    • Ajout de la compatibilité expérimentale pour l'analyse des sous-titres lors de l'extraction. Cela offre une meilleure prise en charge de la fusion des sous-titres qui se chevauchent, y compris la résolution des scintillements lors de la transition entre les segments de sous-titres. Vous pouvez l'activer à l'aide de DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction(). (#288)
  • Extension RTSP :
    • Correction d'une condition de concurrence pouvant entraîner une exception IndexOutOfBoundsException en cas de retour à TCP, ou un blocage de lecture dans certaines situations.
    • Vérification de l'état dans la configuration RTSP lors du renvoi de l'état de chargement RtspMediaPeriod. (#577)
    • Les méthodes de requête Rtsp personnalisées ont été ignorées dans l'en-tête public de la réponse des options. (#613)
    • Utilisation de la valeur du délai avant expiration de la réponse de configuration RTSP dans l'intervalle de temps d'envoi des requêtes d'options RTSP Keep-Alive. (#662)
  • Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • Libérez le module de décodeur MIDI, qui permet de lire des fichiers MIDI standards à l'aide de la bibliothèque Jsyn pour synthétiser l'audio.
    • Ajout de DecoderOutputBuffer.shouldBeSkipped pour marquer directement les tampons de sortie qui n'ont pas besoin d'être présentés. Cette méthode est préférable à C.BUFFER_FLAG_DECODE_ONLY, qui sera obsolète.
    • Ajout de Decoder.setOutputStartTimeUs et SimpleDecoder.isAtLeastOutputStartTimeUs pour permettre aux décodeurs d'abandonner les échantillons de décodage uniquement avant l'heure de début. Il doit être préféré à Buffer.isDecodeOnly, qui sera obsolète.
    • Correction d'un bug de publication de l'artefact de décodeur MIDI dans le dépôt Maven. Changement de nom : l'artefact est renommé media3-exoplayer-midi. (#734)
  • Extension Leanback :
    • Correction d'un bug qui provoquait l'affichage d'une ArithmeticException dans le code Leanback après la désactivation d'une surface. (#617)
  • Utilitaires de test :
    • Rend TestExoPlayerBuilder et FakeClock compatibles avec les tests de l'UI Espresso et les tests de l'UI Compose. Correction d'un bug qui provoquait une progression non déterministe de la lecture lors des interactions dans les vues Espresso ou Compose.
  • Suppression des symboles obsolètes :
    • Suppression de TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) et TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Utilisez Composition.Builder.setHdrMode(int) et transmettez Composition à Transformer.start(Composition, String) à la place.
    • Suppression de la méthode obsolète DownloadNotificationHelper.buildProgressNotification. Utilisez une méthode non obsolète qui accepte un paramètre notMetRequirements à la place.

Version 1.2.0-rc01

1er novembre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-beta01

19 octobre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-alpha02

29 septembre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-alpha01

17 août 2023

Utilisez la version stable 1.2.0.

Version 1.1.0

Version 1.1.1

16 août 2023

  • Bibliothèque commune :
    • Suppression de la dépendance multidex ajoutée accidentellement de tous les modules. (#499)
  • ExoPlayer:
    • Correction d'un problème dans PlaybackStatsListener où de faux PlaybackStats étaient créés après l'effacement de la playlist.
    • Ajout de champs supplémentaires à la journalisation CMCD : format de streaming (sf), type de flux (st), version (v), top birate (tb), durée d'objet (d), débit mesuré (mtp) et type d'objet (ot) (#8699).
  • Audio:
    • Correction d'un bug qui empêchait Player.getState() de passer à STATE_ENDED lors de la lecture de fichiers très courts. (#538)
  • Déchargement audio :
    • Ajoutez les pages d'en-tête d'ID Ogg et de commentaire à un flux de bits pour la lecture du format Opus déchargé, conformément à la norme RFC 7845.
  • Vidéo :
    • H.265/HEVC: correction de l'analyse SPS des informations sur les images de référence à court et à long terme.
  • Texte :
    • CEA-608: modification de la logique de troncation des repères pour ne tenir compte que du texte visible. Auparavant, le retrait et le décalage de tabulation étaient inclus pour limiter la longueur des repères à 32 caractères (ce qui était techniquement correct d'après la spécification). (#11019)
  • Extension IMA :
    • Passage du SDK IMA vers la version 3.30.3.
  • Session:
    • Ajoutez une mise en page personnalisée à l'état du contrôleur et fournissez un getter pour y accéder. Lorsque la mise en page personnalisée change, MediaController.Listener.onCustomLayoutChanged est appelé. Les applications qui souhaitent envoyer différentes mises en page personnalisées à différentes manettes Media3 peuvent le faire dans MediaSession.Callback.onConnect en utilisant un AcceptedResultBuilder pour s'assurer que la mise en page personnalisée est disponible pour la manette une fois la connexion terminée.
    • Correction des cas où MediaLibraryServiceLegacyStub envoyait une erreur à une Result non compatible, ce qui générait une erreur UnsupportedOperationException. (#78)
    • Correction de la façon dont PlayerWrapper crée un VolumeProviderCompat en déterminant volumeControlType à l'aide des anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUME et COMMAND_SET_DEVICE_VOLUME) et des nouvelles commandes (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS et COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Version 1.1.0

5 juillet 2023

  • Bibliothèque commune :
    • Ajout d'un motif de suppression pour la route audio inappropriée et du motif de la lecture lorsque l'appareil est prêt pour la suppression du contenu trop long. (#15)
    • Ajoutez des commandes au lecteur :
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Ajout de méthodes surchargées au lecteur, qui permettent aux utilisateurs de spécifier des indicateurs de volume :
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • Ajout de Builder pour DeviceInfo et abandon du constructeur existant.
    • Ajout de DeviceInfo.routingControllerId afin de spécifier l'ID du contrôleur de routage pour les lectures à distance.
    • Ajout de Player.replaceMediaItem(s) comme raccourci pour ajouter et supprimer des éléments à la même position. (#8046)
  • ExoPlayer:
    • Autorisez ExoPlayer à ne contrôler les méthodes de volume de l'appareil que s'il est explicitement activé. Utilisez ExoPlayer.Builder.setDeviceVolumeControlEnabled pour accéder aux éléments suivants :
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) et setDeviceVolume(int, int)
      • increaseDeviceVolume(int) et increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) et decreaseDeviceVolume(int, int)
    • Ajout de FilteringMediaSource, qui permet de filtrer les types de pistes disponibles à partir d'un MediaSource.
    • Possibilité d'inclure des données CMCD (Common Media Client Data) dans les requêtes sortantes des formats de streaming adaptatifs DASH, HLS et SmoothStreaming. Les champs suivants, br, bl, cid, rtp et sid, ont été intégrés. (#8699). Structure et méthodes d'API :
      • La journalisation CMCD est désactivée par défaut. Utilisez MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) pour l'activer.
      • Toutes les clés sont activées par défaut. Remplacez CmcdConfiguration.RequestConfig.isKeyAllowed(String key) pour filtrer les clés consignées.
      • Ignorez CmcdConfiguration.RequestConfig.getCustomData() pour activer la journalisation des clés personnalisées.
    • Ajout d'une action supplémentaire au fichier manifeste de la démo principale pour faciliter le démarrage de l'application de démonstration avec un fichier *.exolist.json personnalisé. (#439)
    • Ajout de ExoPlayer.setVideoEffects() pour utiliser Effect pendant la lecture de la vidéo.
    • Mettez à jour SampleQueue pour stocker sourceId en tant que long plutôt que int. Cela modifie les signatures des méthodes publiques SampleQueue.sourceId et SampleQueue.peekSourceId.
    • Ajoutez des paramètres aux méthodes LoadControl shouldStartPlayback et onTracksSelected pour associer ces méthodes au MediaPeriod approprié.
    • Modifiez la signature de ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) en ajoutant un paramètre de chronologie contenant les périodes avec les UID utilisés comme clés dans la carte. Cela est nécessaire pour éviter les problèmes de simultanéité avec les diffusions en direct multipériodes.
    • Abandon de EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) et BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). La variante des méthodes sans mediaTimeOffsetUs peut être appelée à la place. Notez que même pour les variantes obsolètes, le décalage n'est plus ajouté à startTimeUs et endTimeUs des objets MediaLoadData envoyés par le coordinateur.
    • ExoTrackSelection.blacklist a été renommé excludeTrack et isBlacklisted a été renommé isTrackExcluded.
    • Correction d'un comportement incohérent entre ExoPlayer.setMediaItem(s) et addMediaItem(s) lorsqu'il est appelé sur une playlist vide.
  • Transformateur :
    • Supprimez Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilisez plutôt ExoPlayerAssetLoader.Factory(MediaSource.Factory) et Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory).
    • Supprimez Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • Correction d'un bug qui entraînait le blocage de la transformation (provoquant un délai d'expiration du multiplexeur) si la fin du flux vidéo était signalée au moment où une image d'entrée était en attente de traitement.
    • Interrogez les codecs via MediaCodecList au lieu d'utiliser les utilitaires findDecoder/EncoderForFormat pour étendre la compatibilité.
    • Suppression de la configuration de la structure B dans DefaultEncoderFactory, car elle ne fonctionne pas sur certains appareils.
  • Sélection de la piste :
    • Ajout de DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, qui est désactivé par défaut. Lorsque cette option est activée, DefaultTrackSelector déclenche une nouvelle sélection de piste lorsque les fonctionnalités du moteur de rendu changent.
  • Extracteurs :
    • Ogg: correction d'un bug lors de la recherche dans des fichiers de longue durée. (#391)
    • FMP4: correction du problème où TimestampAdjuster initialise un décalage d'horodatage incorrect avec le temps d'échantillonnage des métadonnées de l'atome emsg. (#356)
  • Audio:
    • Correction d'un bug qui entraînait l'échec de certaines lectures lorsque la tunnelisation est activée et que les AudioProcessors étaient actifs, par exemple pour le découpage sans interruption. (#10847)
    • Encapsule les trames Opus dans des paquets Ogg dans les lectures directes (déchargement).
    • Extrapolez la position actuelle pendant le sommeil avec la planification de déchargement.
    • Ajoutez Renderer.release() et AudioSink.release() pour libérer les ressources à la fin du cycle de vie du joueur.
    • Écoutez les modifications apportées aux fonctionnalités audio dans DefaultAudioSink. Ajoutez un paramètre obligatoire context dans le constructeur de DefaultAudioSink, avec lequel DefaultAudioSink s'enregistrera en tant qu'écouteur dans AudioCapabilitiesReceiver et mettra à jour sa propriété audioCapabilities lorsqu'il sera informé d'un changement de capacité.
    • Propagez les modifications des fonctionnalités audio via un nouvel événement onAudioCapabilitiesChanged dans l'interface AudioSink.Listener et une nouvelle interface RendererCapabilities.Listener qui déclenche des événements onRendererCapabilitiesChanged.
    • Ajout de ChannelMixingAudioProcessor pour appliquer le scaling/mixage aux canaux audio.
    • Ajout d'une valeur entière DISCARD_REASON_AUDIO_BYPASS_POSSIBLE à DecoderDiscardReasons pour supprimer le décodeur audio lorsque le mode de contournement est possible après le changement des fonctionnalités audio.
    • Ajout de la prise en charge de la lecture directe pour DTS Express et DTS:X. (#335)
  • Vidéo :
    • Définissez MediaCodecVideoRenderer pour qu'il signale un VideoSize avec une largeur et une hauteur de 0 lorsque le moteur de rendu est désactivé. Player.Listener.onVideoSizeChanged est appelé en conséquence lorsque Player.getVideoSize() change. Avec cette modification, la taille de vidéo d'ExoPlayer avec MediaCodecVideoRenderer a une largeur et une hauteur de 0 lorsque Player.getCurrentTracks n'est pas compatible avec la vidéo ou que la taille de la piste vidéo compatible n'est pas encore déterminée.
  • DRM:
    • Réduisez la visibilité de plusieurs méthodes internes uniquement sur DefaultDrmSession qui ne sont pas censées être appelées en dehors du package DRM :
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxer:
    • Ajoutez une bibliothèque multiplexeur qui peut être utilisée pour créer un fichier de conteneur MP4.
  • Extension IMA :
    • Activez les flux DASH en direct multipériodes pour l'insertion dynamique d'annonce. Veuillez noter que l'implémentation actuelle n'est pas encore compatible avec la recherche dans les diffusions en direct. (#10912)
    • Correction d'un bug qui provoquait l'insertion d'un nouveau groupe d'annonces dans des diffusions en direct, car la position du contenu calculée sur des chronologies consécutives varie légèrement.
  • Session:
    • Ajout de la méthode d'assistance MediaSession.getControllerForCurrentRequest pour obtenir des informations sur le contrôleur qui appelle actuellement une méthode Player.
    • Ajout de androidx.media3.session.MediaButtonReceiver pour permettre aux applications d'implémenter la reprise de la lecture avec des événements de bouton multimédia envoyés par un casque Bluetooth, par exemple. (#167)
    • Ajout d'une implémentation par défaut à MediaSession.Callback.onAddMediaItems pour permettre la transmission des MediaItems demandés à Player s'ils disposent de LocalConfiguration (par exemple, l'URI) (#282).
    • Ajout par défaut des boutons de commande "Rechercher jusqu'à l'élément précédent" et "Rechercher jusqu'à la suivante" dans l'affichage des notifications de contenus multimédias compacts sur Android 12 ou version antérieure. (#410)
    • Ajout d'une implémentation par défaut à MediaSession.Callback.onAddMediaItems pour permettre la transmission des MediaItems demandés à Player s'ils disposent de LocalConfiguration (par exemple, l'URI) (#282).
    • Ajout par défaut des boutons de commande "Rechercher jusqu'à l'élément précédent" et "Rechercher jusqu'à la suivante" dans l'affichage des notifications de contenus multimédias compacts sur Android 12 ou version antérieure. (#410)
  • UI:
    • Ajout des méthodes Util shouldShowPlayButton et handlePlayPauseButtonAction pour écrire des éléments d'interface utilisateur personnalisés avec un bouton lecture/pause.
  • Extension RTSP :
    • Pour MPEG4-LATM, utilisez la valeur d'ID au niveau du profil par défaut si elle n'est pas spécifiée dans le message SDP de description de la réponse. (#302)
    • Utilisation de l'URI de base pour la résolution du chemin relatif à partir de la session RTSP si celui-ci est présent dans l'en-tête de réponse DESCRIBE (#11160).
  • Extension DASH :
    • Supprimez le décalage temporel média de MediaLoadData.startTimeMs et MediaLoadData.endTimeMs pour les flux DASH multipériodes.
    • Correction d'un bug qui provoquait une IndexOutOfBoundsException lors de la repréparation d'une source multimédia Dash en direct à plusieurs périodes. (#10838)
  • Extension HLS :
    • Ajoutez HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) pour définir un délai avant que le thread de chargement attende l'initialisation de TimestampAdjuster. Si l'initialisation ne se termine pas avant l'expiration du délai, une exception PlaybackException est générée pour éviter que la lecture ne se bloque en continu. Le délai avant expiration est défini sur zéro par défaut. (#323)
  • Utilitaires de test :
    • Vérifiez l'insensibilité à la casse du schéma d'URI dans DataSourceContractTest.
  • Suppression des symboles obsolètes :
    • Supprimez les constructeurs DefaultAudioSink et utilisez plutôt DefaultAudioSink.Builder.
    • Supprimez HlsMasterPlaylist et utilisez HlsMultivariantPlaylist à la place.
    • Supprimez Player.stop(boolean). Utilisez plutôt Player.stop() et Player.clearMediaItems() (si reset est true).
    • Suppression de deux constructeurs SimpleCache obsolètes et utilisez un constructeur non obsolète qui accepte plutôt un DatabaseProvider pour améliorer les performances.
    • Supprimez le constructeur DefaultBandwidthMeter et utilisez plutôt DefaultBandwidthMeter.Builder.
    • Supprimez les constructeurs DefaultDrmSessionManager et utilisez plutôt DefaultDrmSessionManager.Builder.
    • Suppression de deux constructeurs HttpDataSource.InvalidResponseCodeException obsolètes et utilisez un constructeur non obsolète qui accepte des champs supplémentaires(cause, responseBody) pour améliorer la journalisation des erreurs.
    • Supprimez DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash et DownloadHelper.forSmoothStreaming, puis utilisez DownloadHelper.forMediaItem à la place.
    • Suppression du constructeur DownloadService obsolète. Utilisez un constructeur non obsolète incluant la possibilité de fournir un paramètre channelDescriptionResourceId.
    • Suppression des constantes de chaîne obsolètes pour les charsets (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME et UTF16LE_NAME). Utilisez plutôt les charsets Kotlin à partir du package kotlin.text, java.nio.charset.StandardCharsets ou com.google.common.base.Charsets.
    • Suppression du constructeur WorkManagerScheduler obsolète. Utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètre Context à la place.
    • Suppression des méthodes obsolètes createVideoSampleFormat, createAudioSampleFormat, createContainerFormat et createSampleFormat, qui ont été utilisées pour instancier la classe Format. Utilisez plutôt Format.Builder pour créer des instances de Format.
    • Supprimez les méthodes obsolètes copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate et copyWithVideoSize, et utilisez plutôt les méthodes Format.buildUpon() et setter.
    • Supprimez les ExoPlayer.retry() obsolètes. Utilisez prepare() à la place.
    • Suppression du constructeur DefaultTrackSelector à zéro argument obsolète. Utilisez DefaultTrackSelector(Context) à la place.
    • Suppression du constructeur OfflineLicenseHelper obsolète. Utilisez plutôt OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Suppression du constructeur obsolète DownloadManager. Utilisez plutôt le constructeur qui accepte un Executor.
    • Suppression des constructeurs Cue obsolètes. Utilisez plutôt Cue.Builder.
    • Suppression du constructeur OfflineLicenseHelper obsolète. Utilisez plutôt OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Suppression de quatre méthodes AnalyticsListener obsolètes :
      • onDecoderEnabled, utilisez plutôt onAudioEnabled et/ou onVideoEnabled.
      • onDecoderInitialized, utilisez plutôt onAudioDecoderInitialized et/ou onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, utilisez onAudioInputFormatChanged et/ou onVideoInputFormatChanged à la place.
      • onDecoderDisabled, utilisez plutôt onAudioDisabled et/ou onVideoDisabled.
    • Supprimez les Player.Listener.onSeekProcessed et AnalyticsListener.onSeekProcessed obsolètes. Utilisez plutôt onPositionDiscontinuity avec DISCONTINUITY_REASON_SEEK.
    • Supprimez ExoPlayer.setHandleWakeLock(boolean) et utilisez plutôt setWakeMode(int).
    • Suppression de DefaultLoadControl.Builder.createDefaultLoadControl(), devenu obsolète. Utilisez plutôt build().
    • Supprimez les MediaItem.PlaybackProperties obsolètes et utilisez MediaItem.LocalConfiguration à la place. Le champ MediaItem.playbackProperties, désormais obsolète, est désormais de type MediaItem.LocalConfiguration.

Version 1.1.0-rc01

21 juin 2023

Utilisez la version stable 1.1.0.

Version 1.1.0-beta01

7 juin 2023

Utilisez la version stable 1.1.0.

Version 1.1.0-alpha01

10 mai 2023

Utilisez la version stable 1.1.0.

Version 1.0.0

Version 1.0.2

18 mai 2023

Publication d'androidx.media3:media3-*:1.0.2. Liste des commits de la version 1.0.2

Cette version correspond à la version 2.18.7 d'ExoPlayer.

Cette version contient les modifications suivantes depuis la version 1.0.1:

  • Bibliothèque principale :
    • Ajout de Buffer.isLastSample(), qui indique si Buffer contient l'indicateur C.BUFFER_FLAG_LAST_SAMPLE.
    • Résolution du problème d'affichage du dernier frame si le dernier échantillon avec des frames est retiré de la file d'attente sans lire l'échantillon de fin de flux. (#11079)
  • Extracteurs :
    • Correction de l'analyse du SPS H.265 dans les fichiers MPEG-TS en réutilisant la logique d'analyse déjà utilisée par les extracteurs RTSP et MP4. (#303)
  • Texte :
    • SSA: ajout de la prise en charge des fichiers UTF-16 s'ils commencent par un symbole d'ordre des octets. (#319)
  • Session:
    • Correction d'un problème où MediaController ne met pas à jour ses commandes disponibles lorsqu'il est connecté à un ancien MediaSessionCompat qui met à jour ses actions.
    • Correction d'un bug qui empêchait MediaLibraryService de renvoyer une valeur nulle pour un appel de l'UI du système vers Callback.onGetLibraryRoot avec params.isRecent == true sur l'API 30. (#355)
    • Correction de la fuite de mémoire de MediaSessionService ou MediaLibraryService (#346).
    • Correction d'un bug qui provoquait la génération d'une IllegalStateException en raison d'une mise à jour combinée de Timeline et de la position dans une MediaSession.MediaController

Version 1.0.1

18 avril 2023

Publication d'androidx.media3:media3-*:1.0.1. Liste des commits de la version 1.0.1

Cette version correspond à la version 2.18.6 d'ExoPlayer.

  • Bibliothèque principale :
    • Réinitialisation du forçage du flux en direct cible lors de la recherche à la position par défaut. (#11051)
    • Correction d'un bug qui empêchait le blocage de la lecture d'échantillons de flux vides dans le contenu multimédia.
  • Session:
    • Correction d'un bug qui provoquait une exception dans MediaController pour plusieurs éléments de file d'attente identiques publiés par un ancien MediaSessionCompat. (#290)
    • Ajout du transfert manquant de MediaSession.broadcastCustomCommand à l'ancien MediaControllerCompat.Callback.onSessionEvent. (#293)
    • Correction d'un bug qui empêchait l'appel de MediaSession.setPlayer de mettre à jour les commandes disponibles.
    • Correction du problème qui empêchait les instances TrackSelectionOverride envoyées à partir d'un MediaController d'être ignorées si elles référencent un groupe avec Format.metadata. (#296)
    • Correction du problème où Player.COMMAND_GET_CURRENT_MEDIA_ITEM devait être disponible pour accéder aux métadonnées via l'ancien MediaSessionCompat.
    • Correction d'un problème qui provoquait le plantage des instances MediaSession sur un thread en arrière-plan lorsqu'elles étaient utilisées dans MediaSessionService. (#318)
    • Correction d'un problème qui entraînait la déclaration d'un récepteur de bouton multimédia par la bibliothèque alors que l'application ne l'avait pas prévue. (#314)
  • DASH:
    • Correction du traitement des chronologies de segments vides. (#11014)
  • RTSP:
    • Nouvelle tentative avec TCP si la configuration RTSP avec UDP échoue avec l'erreur RTSP 461 UnsupportedTransport (#11069).

Version 1.0.0

22 mars 2023

Publication d'androidx.media3:media3-*:1.0.0. Liste des commits de la version 1.0.0

Cette version correspond à la version 2.18.5 d'ExoPlayer.

Aucune modification n'a été apportée depuis la version 1.0.0-rc02.

Version 1.0.0-rc02

2 mars 2023

Publication d'androidx.media3:media3-*:1.0.0-rc02. Liste des commits de la version 1.0.0-rc02

Cette version correspond à la version 2.18.4 d'ExoPlayer.

  • Bibliothèque principale :
    • Correction de la détection du type de réseau sur l'API 33. (#10970)
    • Correction de NullPointerException lors de l'appel de ExoPlayer.isTunnelingEnabled. (#10977)
  • Téléchargements :
    • La différence maximale entre l'heure de début et l'heure de début de la fusion est configurable dans SegmentDownloader et ses sous-classes. (#248)
  • Audio:
    • Résolution du problème de lecture des fichiers MP3 sans interruption sur les appareils Samsung. (#8594)
    • Correction d'un bug qui provoquait le remplacement des vitesses de lecture définies immédiatement après la désactivation du son par un changement de vitesse précédent. (#10882)
  • Vidéo :
    • Mapper le format HEVC HDR10 sur HEVCProfileMain10HDR10 au lieu de HEVCProfileMain10.
    • Ajout d'une solution de contournement à un problème d'appareil sur Chromecast avec Google TV et Lenovo M10 FHD Plus qui entraîne le marquage des flux AVC à 60 FPS comme non compatibles. (#10898)
    • Correction des problèmes de performances de libération des frames lors de la lecture de contenus multimédias avec une fréquence d'images largement supérieure à la fréquence d'actualisation de l'écran.
  • Cast:
    • Correction des STATE_IDLE temporaires lors de la transition entre des éléments multimédias. (#245)
  • RTSP:
    • Correction de l'exception IllegalArgumentException générée lors de l'analyse des messages de réponse RTSP non valides. Décrivez les messages de réponse. (#10971)
  • Session:
    • Correction d'un bug qui empêchait le bouton de lecture/pause de la notification de se mettre à jour avec l'état du lecteur. (#192)
  • Extension IMA :
    • Correction d'un bug qui empêchait le démarrage des flux d'insertion dynamique d'annonce sans annonce, car le premier événement LOADED (et dans le cas sans annonces) n'était pas reçu.

Version 1.0.0-rc01

16 février 2023

Publication d'androidx.media3:media3-*:1.0.0-rc01. Liste des commits de la version 1.0.0-rc01

Cette version correspond à la version 2.18.3 d'ExoPlayer.

  • Bibliothèque principale :
    • Ajustement de la logique de tri du moteur de rendu pour respecter les préférences de MediaCodecSelector, même si un décodeur indique qu'il ne peut pas lire les contenus multimédias de manière performante. Par exemple, avec le sélecteur par défaut, un décodeur physique qui ne propose qu'une prise en charge fonctionnelle est privilégié par rapport à un décodeur logiciel qui prend entièrement en charge le format. (#10604)
    • Ajout d'ExoPlayer.Builder.setPlaybackLooper qui définit un thread de lecture préexistant pour une nouvelle instance ExoPlayer.
    • Ajout de la possibilité d'effacer les assistants du gestionnaire de téléchargement. (#10776)
    • Ajout d'un paramètre à BasePlayer.seekTo pour indiquer également la commande utilisée pour la recherche.
    • Utilisation d'un thème lors du chargement des drawables sur l'API 21 ou une version ultérieure. (#220)
    • Ajout de ConcatenatingMediaSource2 qui permet de combiner plusieurs éléments multimédias dans une seule fenêtre. (#247)
  • Extracteurs :
    • Exception ParserException générée au lieu de NullPointerException si l'exemple de table (stbl) ne comporte pas d'exemple de description obligatoire (stsd) lors de l'analyse des atomes trak.
    • Extraits correctement ignorés lors d'une recherche directe sur un frame synchronisé au format fMP4. (#10941)
  • Audio:
    • Utilisation du débit au format audio compressé pour calculer la taille minimale de la mémoire tampon pour AudioTrack dans les lectures directes (passthrough).
  • Texte :
    • Correction de TextRenderer en transmettant un index (négatif) non valide à Subtitle.getEventTime si un fichier de sous-titres ne contient aucun signal.
    • SubRip : les fichiers UTF-16 sont acceptés s'ils commencent par un ordre d'octet.
  • Métadonnées :
    • Analyse de plusieurs valeurs séparées par des valeurs nulles à partir des images ID3, comme autorisé par ID3 v2.4.
    • Ajout de MediaMetadata.mediaType pour indiquer le type de contenu ou le type de dossier décrit par les métadonnées.
    • Ajout de MediaMetadata.isBrowsable pour remplacer MediaMetadata.folderType. Le type de dossier sera abandonné dans la prochaine version.
  • DASH:
    • Ajout d'une analyse complète pour les ensembles d'adaptation d'image, y compris le nombre de cartes. (#3752)
  • UI:
    • Correction du PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener) obsolète pour que les modifications de visibilité soient transmises à l'écouteur enregistré. (#229)
    • Correction de l'ordre des commandes du lecteur central dans PlayerView avec une mise en page de droite à gauche. (#227)
  • Session:
    • Ajout du SimpleBasePlayer abstrait afin de faciliter l'implémentation de l'interface Player pour les lecteurs personnalisés.
    • Ajout d'une méthode d'assistance pour convertir le jeton de session de la plate-forme en SessionToken Media3. (171)
    • Utilisation de onMediaMetadataChanged pour déclencher les mises à jour de la session multimédia de la plate-forme. (#219)
    • Ajout de la session multimédia en tant qu'argument getMediaButtons() de DefaultMediaNotificationProvider et utilisation des listes immuables pour plus de clarté. (#216)
    • Ajout d'un écouteur de rappel onSetMediaItems pour fournir un moyen de modifier/définir la liste MediaItem, l'index de départ et la position par session avant de passer au lecteur. (#156)
    • La détection du double appui est évitée pour les événements de bouton multimédia non Bluetooth. (#233)
    • Renforcement de la robustesse de QueueTimeline en cas d'état de session hérité douteux. (#241)
  • Métadonnées :
    • Analyse de plusieurs valeurs séparées par des valeurs nulles à partir des images ID3, comme autorisé par ID3 v2.4.
    • Ajout de MediaMetadata.mediaType pour indiquer le type de contenu ou le type de dossier décrit par les métadonnées.
    • Ajout de MediaMetadata.isBrowsable pour remplacer MediaMetadata.folderType. Le type de dossier sera abandonné dans la prochaine version.
  • Extension Cast :
    • Passage du SDK Cast à la version 21.2.0.
  • Extension IMA :
    • Suppression de l'écouteur du lecteur de ImaServerSideAdInsertionMediaSource sur le thread de l'application pour éviter les problèmes de thread.
    • Ajout d'une propriété focusSkipButtonWhenAvailable à ImaServerSideAdInsertionMediaSource.AdsLoader.Builder pour demander à mettre en surbrillance le bouton "Ignorer" sur les appareils TV et le définir sur "true" par défaut.
    • Ajout d'une méthode focusSkipButton() à ImaServerSideAdInsertionMediaSource.AdsLoader pour demander par programmation de mettre en surbrillance le bouton "Ignorer".
    • Passage du SDK IMA vers la version 3.29.0.
  • Application de démonstration :
    • Demande de l'autorisation d'envoyer des notifications de téléchargement lors de l'exécution. (#10884)

Version 1.0.0-beta03

22 novembre 2022

Publication d'androidx.media3:media3-*:1.0.0-beta03. Liste des commits de la version 1.0.0-beta03.

Cette version correspond à la version 2.18.2 d'ExoPlayer.

  • Bibliothèque principale :
    • Ajout de ExoPlayer.isTunnelingEnabled pour vérifier si la tunnellisation est activée pour les canaux actuellement sélectionnés. (#2518)
    • Ajout de WrappingMediaSource pour simplifier l'encapsulation d'une seule MediaSource (#7279).
    • Suppression du tampon arrière avant que la lecture ne soit bloquée en raison d'une mémoire disponible insuffisante.
    • Fermeture du bloc de traçage "doSomeWork" lorsque le déchargement est activé.
    • Correction du problème de suivi de session lors de recherches rapides dans PlaybackStatsListener (#180).
    • Envoi du rappel onMediaItemTransition manquant lors de l'appel de seekToNext ou de seekToPrevious dans une playlist contenant un seul élément (#10667).
    • Ajout de Player.getSurfaceSize qui renvoie la taille de la surface sur laquelle la vidéo est affichée.
    • Correction d'un bug où la suppression des écouteurs pendant la libération du lecteur peut générer une exception IllegalStateException (#10758).
  • Compilation :
    • Applique un nombre minimal de compileSdkVersion pour éviter les erreurs de compilation (#10684).
    • Permet d'éviter la publication d'un bloc lorsqu'il est inclus dans une autre compilation Gradle.
  • Sélection de la piste :
    • Privilégie d'autres pistes à Dolby Vision si l'écran ne prend pas en charge cette technologie. (#8944).
  • Téléchargements :
    • Correction d'une boucle infinie dans ProgressiveDownloader pouvant être provoquée par le téléchargement et la lecture simultanés avec le même PriorityTaskManager (#10570).
    • Affichage immédiat de la notification de téléchargement (#183)
    • Limitation du nombre de suppressions de téléchargements parallèles à 1 pour éviter la création d'un nombre excessif de threads (#10458).
  • Vidéo :
    • Essaie un autre décodeur pour Dolby Vision si l'écran ne le prend pas en charge. (#9794).
  • Audio:
    • Utilisation de SingleThreadExecutor pour le lancement d'instances AudioTrack afin d'éviter les erreurs de mémoire insuffisante lors de la libération de plusieurs lecteurs en même temps (#10057).
    • Ajout de AudioOffloadListener.onExperimentalOffloadedPlayback pour l'état de décharge audio d'une piste audio. (#134).
    • Conversion de AudioTrackBufferSizeProvider en interface publique.
    • Ajout de ExoPlayer.setPreferredAudioDevice pour définir l'appareil de sortie audio préféré (#135).
    • androidx.media3.exoplayer.audio.AudioProcessor a été renommé androidx.media3.common.audio.AudioProcessor.
    • Mappage de l'audio à 8 canaux et 12 canaux aux masques de canaux 7.1 et 7.1.4 respectivement sur toutes les versions d'Android (#10701).
  • Métadonnées :
    • MetadataRenderer peut désormais être configuré pour afficher les métadonnées dès qu'elles sont disponibles. Créez une instance avec MetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean) pour spécifier si le moteur de rendu doit générer les métadonnées de manière anticipée ou synchronisée avec la position du lecteur.
  • DRM:
    • Contournement d'un bug dans l'implémentation ClearKey d'Android 13 qui renvoie une URL de licence non vide, mais non valide.
    • Correction de l'erreur setMediaDrmSession failed: session not opened lors du passage d'un schéma DRM à un autre dans une playlist (par exemple, de Widevine à ClearKey).
  • Texte :
    • CEA-608 : permet d'assurer que les commandes de changement de service dans le champ 2 sont traitées correctement (#10666).
  • DASH:
    • Analyse EventStream.presentationTimeOffset à partir des fichiers manifestes (#10460).
  • UI:
    • Utilisation de remplacements actuels du lecteur comme préréglage dans TrackSelectionDialogBuilder (#10429)
  • Session:
    • Permet d'assurer que les commandes sont toujours exécutées dans le bon ordre, même si certaines nécessitent une résolution asynchrone (#85).
    • Ajout de DefaultMediaNotificationProvider.Builder pour créer des instances DefaultMediaNotificationProvider. Le compilateur peut configurer l'ID de notification, l'ID du canal de notification et le nom du canal de notification utilisé par le fournisseur. Ajoutez également la méthode DefaultMediaNotificationProvider.setSmallIcon(int) pour définir la petite icône des notifications. (#104).
    • Permet d'assurer que les commandes envoyées avant MediaController.release() ne sont pas supprimées (#99).
    • SimpleBitmapLoader peut charger le bitmap à partir des URI file:// (#108).
    • Correction d'une assertion qui empêche MediaController de rechercher une annonce dans une période (#122).
    • À la fin de la lecture, MediaSessionService est arrêté du premier plan et une notification est affichée pour relancer la lecture du dernier élément multimédia lu (#112).
    • Permet d'empêcher le lancement du service de premier plan avec un intent en attente pour la mise en veille (#167).
    • Option de masquer manuellement le "badge" associé à la notification créée par DefaultNotificationProvider sur l'API 26 et l'API 27 (le badge est automatiquement masqué à partir de l'API 28) (131 ).
    • Correction d'un bug à cause duquel une deuxième connexion de liaison d'une ancienne session MediaSession à une instance MediaController Media3 génère des exceptions IllegalStateExceptions (#49).
  • RTSP:
    • Ajout de la gestion des paquets fragmentés H263 (#119).
    • Ajout de la prise en charge de MP4A-LATM (#162).
  • IMA:
    • Ajout d'un délai d'attente pour le chargement des informations sur l'annonce dans les cas où le SDK IMA se bloque lors du chargement d'une annonce (#10510).
    • Permet d'éviter d'ignorer les annonces vidéo mid-roll lorsque l'utilisateur accède à la fin du contenu (#10685).
    • Permet de calculer correctement la durée de la fenêtre pour les flux en direct avec des annonces insérées côté serveur, par exemple l'insertion dynamique d'annonce IMA (#10764).
  • Extension FFmpeg :
    • Ajout des indicateurs nouvellement requis pour associer les bibliothèques FFmpeg aux versions 23.1.7779620 et ultérieures de NDK (#9933).
  • Extension AV1 :
    • Mise à jour de la version de CMake pour éviter les incompatibilités avec les dernières versions d'Android Studio (# 9933).
  • Extension Cast :
    • Implémentation de getDeviceInfo() pour pouvoir identifier CastPlayer lors du contrôle de la lecture avec MediaController (#142).
  • Transformateur :
    • Ajout d'un minuteur watchdog pour détecter quand la génération d'un échantillon de sortie est trop lente.
  • Suppression des symboles obsolètes :
    • Suppression de Transformer.Builder.setOutputMimeType(String). Cette fonctionnalité a été supprimée. Le type MIME sera toujours MP4 lorsque le multiplexeur par défaut est utilisé.

Version 1.0.0-beta02

21 juillet 2022

Publication d'androidx.media3:media3-*:1.0.0-beta02. Liste des commits de la version 1.0.0-beta02

Cette version correspond à la version 2.18.1 d'ExoPlayer.

  • Bibliothèque principale :
    • S'assure que la modification de ShuffleOrder avec ExoPlayer.setShuffleOrder entraîne un appel de Player.Listener#onTimelineChanged avec reason=Player.TIMELINE_CHANGE_REASON_PLAYLIST_CHANGED (#9889).
    • Pour les médias progressifs, n'inclut que les pistes sélectionnées en position tampon (#10361).
    • L'enregistreur personnalisé est autorisé pour toutes les consignations ExoPlayer (#9752).
    • Correction de l'implémentation de setDataSourceFactory dans DefaultMediaSourceFactory, qui n'était pas fonctionnelle dans certains cas (#116).
  • Extracteurs :
    • Correction de l'analyse des ensembles d'images de référence à court terme H265 (#10316).
    • Correction de l'analyse des débits provenant des esds (#10381).
  • DASH:
    • Analyse l'URL de licence ClearKey à partir des fichiers manifestes (#10246).
  • UI:
    • S'assure que TalkBack annonce l'option de vitesse actuelle dans le menu des commandes de lecture (#10298).
  • RTSP:
    • Ajoute la gestion de paquets fragmentés VP8 (#110).
  • Extension Leanback :
    • Écoute les modifications de playWhenReady dans LeanbackAdapter (10420).
  • Cast:
    • Utilise le MediaItem qui a été transmis aux méthodes de la playlist en tant que Window.mediaItem dans CastTimeline (#25, #8212).
    • Prise en charge de Player.getMetadata() et Listener.onMediaMetadataChanged() avec CastPlayer (#25).

Version 1.0.0-beta01

16 juin 2022

Publication d'androidx.media3:media3-*:1.0.0-beta01. Liste des commits de la version 1.0.0-beta01

Cela correspond à la version 2.18.0 d'ExoPlayer.

  • Bibliothèque principale :
    • Active la prise en charge des diagnostics de la plate-forme Android via MediaMetricsManager. ExoPlayer transfère les événements de lecture et les données de performances à la plate-forme, ce qui permet de fournir des informations sur les performances du système et le débogage sur l'appareil. Ces données peuvent également être collectées par Google si le partage des données d'utilisation et de diagnostic est activé par l'utilisateur de l'appareil. Les applications peuvent cesser de contribuer aux diagnostics de plate-forme pour ExoPlayer avec ExoPlayer.Builder.setUsePlatformDiagnostics(false).
    • Correction d'un bug qui provoque la réinitialisation trop fréquente d'une piste lors de l'utilisation de MergingMediaSource, par exemple lors du téléchargement indépendant des sous-titres et de la modification du sous-titre sélectionné en cours de lecture (#10248).
    • Arrêt de la détection du type de réseau 5G-NSA sur les API 29 et 30. Ces lectures reposent sur un réseau 4G.
    • Interdiction de la transmission de null à MediaSource.Factory.setDrmSessionManagerProvider et MediaSource.Factory.setLoadErrorHandlingPolicy. Les instances de DefaultDrmSessionManagerProvider et DefaultLoadErrorHandlingPolicy peuvent être transmises explicitement si nécessaire.
    • Ajout de MediaItem.RequestMetadata pour représenter les métadonnées nécessaires à la lecture de contenus multimédias lorsque l'élément LocalConfiguration exact n'est pas connu. Suppression de MediaMetadata.mediaUrl, qui est maintenant inclus dans RequestMetadata.
    • Ajout de Player.Command.COMMAND_SET_MEDIA_ITEM pour permettre aux joueurs de définir un seul élément.
  • Sélection de la piste :
    • Réduction de la classe TrackSelectionOverrides qui devient TrackSelectionParameters et promotion de TrackSelectionOverride en classe de niveau supérieur.
    • TracksInfo a été renommé Tracks et TracksInfo.TrackGroupInfo a été renommé Tracks.Group. Player.getCurrentTracksInfo et Player.Listener.onTracksInfoChanged ont également été renommés Player.getCurrentTracks et Player.Listener.onTracksChanged. Cela permet d'annuler l'abandon du nom de la méthode Player.Listener.onTracksChanged, mais avec différents types de paramètres.
    • Remplacement de DefaultTrackSelector.buildUponParameters et DefaultTrackSelector.Parameters.buildUpon pour renvoyer DefaultTrackSelector.Parameters.Builder au lieu de DefaultTrackSelector.ParametersBuilder.
    • Ajout de DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, qui est activé par défaut. Lorsque cette option est activée, DefaultTrackSelector privilégie les pistes audio dont le nombre de canaux ne dépasse pas les capacités de sortie de l'appareil. Sur les appareils portables, DefaultTrackSelector préfère les formats stéréo/mono aux formats audio multicanaux, sauf si le format multicanal peut être spatialisé (Android 12L ou version ultérieure) ou est un format de son surround Dolby. De plus, sur les appareils compatibles dotés de spatialisation audio, DefaultTrackSelector surveille les modifications apportées aux propriétés de spatialisation et déclenche une nouvelle sélection de pistes. Les appareils avec un mode UI television ne sont pas concernés par ces contraintes et privilégient le format présentant le plus grand nombre de canaux. Pour activer cette fonctionnalité, l'instance DefaultTrackSelector doit être créée avec un Context.
  • Vidéo :
    • DummySurface a été renommé PlaceholderSurface.
    • Ajout de la prise en charge du format d'image AV1 au MediaCodecVideoRenderer.getCodecMaxInputSize.
  • Audio:
    • Utilise un encodeur audio LG AC3 qui diffuse du type MIME non standard.
    • Remplace le type de retour de AudioAttributes.getAudioAttributesV21() par android.media.AudioAttributes par une nouvelle classe de wrapper AudioAttributesV21 afin d'empêcher la validation ART lente sur les versions d'API antérieures à la version 21.
    • Interroge la plate-forme (API 29 ou version ultérieure) ou suppose que le nombre de canaux d'encodage audio est activé pour le transfert audio lorsque le format du canal audio n'est pas défini, ce qui se produit lors de la préparation HLS sans fragment. (10 204)
    • Configure AudioTrack avec le masque de canal AudioFormat.CHANNEL_OUT_7POINT1POINT4 si le décodeur génère l'audio PCM à 12 canaux (#10322.
  • DRM :
    • Assurez-vous que la session DRM est toujours correctement mise à jour lorsque vous effectuez une recherche immédiatement après un changement de format (10274).
  • Texte :
    • Modification de Player.getCurrentCues() pour renvoyer CueGroup au lieu de List<Cue>.
    • SSA : Prise en charge du paramètre de style OutlineColour lorsque BorderStyle == 3 (c'est-à-dire lorsque OutlineColour définit l'arrière-plan du cue) (#8435).
    • CEA-708 : Analyse les données en plusieurs blocs de service et ignore les blocs qui ne sont pas associés au numéro de service sélectionné actuellement.
    • Suppression de RawCcExtractor, qui n'était utilisé que pour gérer un format de sous-titre interne à Google.
  • Extracteurs :
    • Ajout de la prise en charge du format AVI (#2092).
    • Matroska : Analyse le titre DiscardPadding pour les titres Opus.
    • MP4 : Analyse les débits des conteneurs esds.
    • Ogg : Autorise l'ID d'Opus et les en-têtes de commentaires en double (#10038).
  • UI:
    • Correction de la diffusion des événements dans les OnClickListener définis sur PlayerView, lorsque useController=false. (#9605) Correction de la diffusion des événements dans OnLongClickListener pour toutes les configurations de vue.
    • Correction du traitement incorrect d'une séquence d'événements tactiles qui sortent des limites de PlayerView avant un clic ACTION_UP. (#9861)
    • Résolution d'un problème d'accessibilité PlayerView : un appui sur l'écran pouvait activer/désactiver la lecture au lieu de masquer les commandes (#8627).
    • Réécriture de TrackSelectionView et TrackSelectionDialogBuilder pour qu'elles fonctionnent avec l'interface Player au lieu de ExoPlayer. Cela permet d'utiliser les vues avec d'autres implémentations Player et supprime la dépendance du module d'UI vers le module ExoPlayer. Il s'agit d'une modification destructive.
    • Pas d'affichage forcé des pistes de texte dans le sélecteur de piste PlayerView, et conservation forcée de la sélection d'une piste de texte appropriée si l'option "Aucune" est sélectionnée. (#9432)
  • DASH:
    • Analyse le nombre de canaux à partir des éléments AudioChannelConfiguration de DTS. Cela permet de réactiver le passthrough audio pour les flux DTS (#10159).
    • Interdiction de la transmission de null à DashMediaSource.Factory.setCompositeSequenceableLoaderFactory. Les instances de DefaultCompositeSequenceableLoaderFactory peuvent être transmises explicitement si nécessaire.
  • HLS:
    • Création de remplacement sur la préparation en blocs si l'attribut de playlist CODECS ne contient pas le codec audio (#10065).
    • Interdiction de la transmission de null à HlsMediaSource.Factory.setCompositeSequenceableLoaderFactory, HlsMediaSource.Factory.setPlaylistParserFactory et HlsMediaSource.Factory.setPlaylistTrackerFactory. Les instances de DefaultCompositeSequenceableLoaderFactory ou DefaultHlsPlaylistParserFactory, ou une référence à DefaultHlsPlaylistTracker.FACTORY peuvent être transmises explicitement si nécessaire.
  • Streaming fluide :
    • Interdiction de la transmission de null à SsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Les instances de DefaultCompositeSequenceableLoaderFactory peuvent être transmises explicitement si nécessaire.
  • RTSP:
    • Ajout d'un lecteur RTP pour H263 (#63).
    • Ajout d'un lecteur RTP pour MPEG4 (#35).
    • Ajout d'un lecteur RTP pour HEVC (#36).
    • Ajout d'un lecteur RTP pour AMR. Actuellement, seuls les flux AMR monocanaux et non entrelacés sont acceptés. La charge utile RMR composée d'AMR n'est pas prise en charge. (#46)
    • Ajout d'un lecteur RTP pour VP8 (#47).
    • Ajout d'un lecteur RTP pour WAV (#56).
    • Correction de l'en-tête d'autorisation de base RTSP. (#9544).
    • Arrêt de la vérification des champs SDP obligatoires, car ExoPlayer n'en a pas besoin (#10049).
    • Génération d'une exception vérifiée lors de l'analyse de la durée RTSP (#10165).
    • Ajout d'un lecteur RTP pour VP9 (#47).
    • Ajout d'un lecteur RTP pour OPUS (#53).
  • Sources de données :
    • DummyDataSource a été renommé PlaceholderDataSource.
    • Solution de contournement de la gestion des interruptions OkHttp.
  • Session:
    • Remplacement de MediaSession.MediaItemFiller par MediaSession.Callback.onAddMediaItems pour permettre la résolution asynchrone des requêtes.
    • Utilisation des méthodes setMediaItems(s) lorsque MediaController se connecte à une ancienne session multimédia.
    • Suppression de MediaController.setMediaUri et MediaSession.Callback.onSetMediaUri. Vous pouvez obtenir la même fonctionnalité en utilisant MediaController.setMediaItem et MediaSession.Callback.onAddMediaItems.
    • Transfert des anciens appels MediaController pour lire des contenus multimédias vers MediaSession.Callback.onAddMediaItems au lieu de onSetMediaUri.
    • Ajout de MediaNotification.Provider et DefaultMediaNotificationProvider pour personnaliser la notification.
    • Ajout de BitmapLoader et SimpleBitmapLoader pour télécharger des images d'œuvres d'art.
    • Ajout de MediaSession.setCustomLayout() pour assurer la rétrocompatibilité avec l'ancienne session.
    • Ajout de MediaSession.setSessionExtras() pour assurer la parité des fonctionnalités avec l'ancienne session.
    • MediaSession.MediaSessionCallback a été renommé MediaSession.Callback, MediaLibrarySession.MediaLibrarySessionCallback a été renommé MediaLibrarySession.Callback et MediaSession.Builder.setSessionCallback a été renommé setCallback.
    • Correction des exceptions NPE dans MediaControllerImplLegacy (#59).
    • Mise à jour des informations de position de session lors d'un changement de chronologie (#51).
    • Correction des exceptions NPE dans MediaControllerImplBase après le relâchement du contrôleur (#74).
  • Lecture des annonces / IMA :
    • Fait passer le taux d'interrogation des annonces de 100 à 200 ms, conformément aux recommandations du Media Rating Council (MRC).
  • Extension FFmpeg :
    • Définit la version CMake sur 3.21.0+ pour éviter un bug CMake qui entraînerait l'échec de la synchronisation Gradle d'Android Studio (#9933).
  • Suppression des symboles obsolètes :
    • Suppression de Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Utilisation de Player.Listener.onTracksChanged(Tracks) à la place.
    • Suppression de Player.getCurrentTrackGroups et Player.getCurrentTrackSelections. Utilisation de Player.getCurrentTracks à la place. Vous pouvez également continuer à utiliser ExoPlayer.getCurrentTrackGroups et ExoPlayer.getCurrentTrackSelections, bien que ces méthodes restent obsolètes.
    • Suppression des constantes DownloadHelper DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT et DEFAULT_TRACK_SELECTOR_PARAMETERS. Utilisation de getDefaultTrackSelectorParameters(Context) si possible, et DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT dans le cas contraire.
    • Suppression du constructeur DefaultTrackSelector(ExoTrackSelection.Factory). Utilisez DefaultTrackSelector(Context, ExoTrackSelection.Factory) à la place.
    • Suppression de Transformer.Builder.setContext. Context doit être transmis au constructeur Transformer.Builder.

Version 1.0.0-alpha03

14 mars 2022

Publication d'androidx.media3:media3-*:1.0.0-alpha03. Liste des commits de la version 1.0.0-alpha03

Cela correspond à la version 2.17.1 d'ExoPlayer.

  • Audio:
    • Corrige les erreurs de vérification des capacités audio de Dolby Atmos (E-AC3-JOC) dans HLS.
  • Extracteurs :
    • FMP4 : correction d'un problème d'ordre de sortie des exemples de métadonnées emsg pour les flux contenant à la fois des atomes emsg v0 et v1 (#9996).
  • Texte :
    • Corrige l'interaction entre SingleSampleMediaSource.Factory.setTrackId et MediaItem.SubtitleConfiguration.Builder.setId pour donner la priorité au champ SubtitleConfiguration, et utilisation de la valeur Factory si celle-ci n'est pas définie (#10016).
  • Lecture des annonces :
    • Correction des sous-diffusions audio entre les périodes d'annonces dans les flux SSAI HLS en direct.

Version 1.0.0-alpha02

2 mars 2022

Publication d'androidx.media3:media3-*:1.0.0-alpha02. Liste des commits de la version 1.0.0-alpha02.

Cela correspond à la version 2.17.0 d'ExoPlayer.

  • Bibliothèque principale :
    • Ajout de la méthode protégée DefaultRenderersFactory.getCodecAdapterFactory(), afin que les sous-classes de DefaultRenderersFactory qui ignorent buildVideoRenderers() ou buildAudioRenderers() puissent accéder à la fabrique d'adaptateurs de codec et les transmettre aux instances MediaCodecRenderer. qu'ils créent.
    • Propagation des champs d'en-tête ICY name et genre respectivement sur MediaMetadata.station et MediaMetadata.genre afin qu'ils atteignent l'application via Player.Listener.onMediaMetadataChanged(). (#9677).
    • Suppression des clés nulles de DefaultHttpDataSource#getResponseHeaders.
    • Mise en veille et nouvelle tentative en cas d'échec de création d'une instance MediaCodec. Ainsi, le problème survenant sur certains appareils lors du passage d'une surface d'un codec sécurisé à un autre codec est résolu (#8696).
    • Ajout de MediaCodecAdapter.getMetrics() pour permettre aux utilisateurs d'obtenir des données de métriques à partir de MediaCodec. (#9766).
    • Corrige la résolution des dépendances Maven (#8353).
    • Désactivation de l'ajustement automatique de la vitesse pour les diffusions en direct qui n'offrent pas de fonctionnalités de faible latence ni d'option de requête utilisateur pour définir la vitesse (#9329).
    • Remplacement du nom DecoderCounters#inputBufferCount par queuedInputBufferCount.
    • SimpleExoPlayer.renderers devient privé. Les moteurs de rendu sont accessibles via ExoPlayer.getRenderer.
    • Mise à jour de certaines valeurs constantes de AnalyticsListener.EventFlags pour correspondre aux valeurs dans Player.EventFlags.
    • Division de AnalyticsCollector en une interface et une mise en œuvre par défaut, pour lui permettre d'être supprimé par R8 si une application n'en a pas besoin.
  • Sélection de la piste :
    • Compatible avec les indicateurs de rôle vidéo préférés dans la sélection de piste (#9402).
    • Mise à jour de la logique de sélection des pistes vidéo pour prendre en compte les types MIME et les indicateurs de rôle souhaités lorsque vous sélectionnez plusieurs pistes vidéo pour l'adaptation (#9519).
    • Mise à jour de la logique de sélection des pistes vidéo et audio pour ne choisir que les formats de sélections adaptatives ayant le même niveau de compatibilité avec le décodeur et le matériel (#9565).
    • Mise à jour de la logique de sélection de la piste vidéo pour privilégier les codecs plus efficaces si plusieurs codecs sont compatibles avec des décodeurs principaux dotés de l'accélération matérielle (#4835).
    • Priorité aux préférences du contenu audio (par exemple, la piste audio "par défaut" ou une piste correspondant à la langue des paramètres régionaux du système) sur les contraintes de sélection technique de piste (par exemple, le type MIME préféré ou le nombre maximal de canaux).
    • Correction d'un problème de sélection de suivi qui annule le blocage d'autres groupes de suivi du même type en cas de remplacement d'un groupe de suivi (#9675).
    • Correction d'un problème de sélection de piste dans lequel un mélange de valeurs de remplacement de pistes non vides et non vides n'est pas correctement appliqué (#9649).
    • Interdiction des TrackGroup en double dans un TrackGroupArray. Il est toujours possible de distinguer les TrackGroup en définissant un id dans le constructeur TrackGroup. Cela permet de résoudre un plantage lors de la reprise de la lecture en arrière-plan dans l'application, avec un remplacement de la piste active (#9718).
    • Modification de la logique dans AdaptiveTrackSelection pour permettre une augmentation de la qualité avec une bande passante réseau suffisante, même si la lecture est très proche du seuil (#9784).
  • Vidéo :
    • Correction de la logique de remplacement du décodeur pour que Dolby Vision utilise un décodeur H264/H265 compatible si nécessaire.
  • Audio:
    • Correction de la logique de remplacement du décodeur pour Dolby Atmos (E-AC3-JOC) afin d'utiliser un décodeur E-AC3 compatible, si nécessaire.
    • Modification des API AudioCapabilities pour exiger la transmission explicite de AudioCapabilities.DEFAULT_AUDIO_CAPABILITIES au lieu de null.
    • Autorisation de personnaliser le calcul de la taille de la mémoire tampon AudioTrack en injectant un AudioTrackBufferSizeProvider dans DefaultAudioSink (#8891).
    • Nouvelle tentative de création de AudioTrack si la taille de la mémoire tampon demandée était supérieure à 1 Mo (#9712).
  • Extracteurs :
    • WAV : compatibilité avec les flux RF64 (#9543).
    • Correction de l'analyse incorrecte des unités NAL H.265 SPS (#9719).
    • Analyse des commentaires Vorbis (y compris METADATA_BLOCK_PICTURE) dans les fichiers Ogg Opus et Ogg Vorbis.
  • Texte :
    • Ajout d'un champ MediaItem.SubtitleConfiguration.id qui est propagé au champ Format.id de la piste de sous-titres créée à partir de la configuration (#9673).
    • Ajout de la compatibilité de base avec les sous-titres WebVTT dans les conteneurs Matroska (#9886).
    • Interdiction pour Cea708Decoder de lire plus que la taille déclarée d'un bloc de service.
  • DRM:
    • Suppression de playbackLooper de DrmSessionManager.(pre)acquireSession. Lorsqu'un élément DrmSessionManager est utilisé par une application dans un élément MediaSource personnalisé, le champ playbackLooper doit être transmis à DrmSessionManager.setPlayer.
  • Lecture des annonces / IMA :
    • Ajout de l'insertion dynamique d'annonce IMA (#8213).
    • Ajout d'une méthode à AdPlaybackState pour autoriser la réinitialisation d'un groupe d'annonces afin qu'il puisse être lu à nouveau (#9615).
    • Application d'une vitesse de lecture de 1,0 lors de la lecture d'annonces (#9018).
    • Correction d'un problème qui empêchait le déclenchement immédiat du chargement d'un groupe d'annonces (#9929).
  • UI:
    • Correction de la couleur des numéros dans les boutons StyledPlayerView et Avance rapide lors de l'utilisation de certains thèmes (#9765).
    • Traduction correcte des chaînes en lien avec la vitesse de lecture (#9811).
  • DASH:
    • Ajout des propriétés essentielles et supplémentaires analysées dans Representation (#9579).
    • Prise en charge du rôle de suivi forced-subtitle (#9727).
    • Arrêt de l'interprétation du rôle de suivi main comme C.SELECTION_FLAG_DEFAULT.
    • Correction de la logique d'exclusion d'URL de base pour les fichiers manifestes qui ne déclarent pas l'espace de noms DVB (#9856).
    • Prise en charge des URL MPD.Location relatives (#9939).
  • HLS:
    • Renseigne correctement le Format.label pour les flux HLS audio uniquement (#9608).
    • Utilisation de la préparation sans blocs par défaut pour améliorer le temps de démarrage. Si vos lectures contiennent des pistes de sous-titres multiples qui ne sont pas déclarées dans la playlist principale, vous devez les ajouter à la playlist principale afin de les rendre disponibles à la lecture, ou désactiver la préparation sans blocs avec HlsMediaSource.Factory.setAllowChunklessPreparation(false).
    • Prise en charge de la recherche précise d'images clés en HLS (#2882).
  • RTSP:
    • Fournit une API cliente pour remplacer le paramètre SocketFactory utilisé pour toute connexion au serveur (#9606).
    • Préférences pour la méthode d'authentification DIGEST plutôt que la méthode BASIC si les deux sont présentes (#9800).
    • Traitement lorsque la durée de la piste RTSP n'est pas disponible (#9775).
    • Les valeurs d'en-tête RTP-Info non valides sont ignorées (#9619).
  • Transformateur :
    • La version minimale requise de l'API passe à 21.
    • TransformationException permet désormais de décrire les erreurs qui se produisent lors d'une transformation.
    • Ajout de TransformationRequest pour spécifier les options de transformation.
    • L'enregistrement de plusieurs écouteurs est autorisé.
    • Résolution du blocage du transformateur lorsque la sortie du codec n'est lue que partiellement.
    • Correction du NPE potentiel dans Transformer.getProgress lors du lancement des throws du multiplexeur.
    • Ajout d'une application de démonstration pour appliquer des transformations.
  • Extension MediaSession :
    • Par défaut, MediaSessionConnector efface la playlist à l'arrêt. Les applications qui souhaitent conserver la playlist peuvent appeler setClearMediaItemsOnStop(false) sur le connecteur.
  • Extension Cast :
    • Correction du bug qui empêchait CastPlayer d'appeler correctement onIsPlayingChanged (#9792).
    • Prise en charge de l'utilisation de métadonnées audio, notamment artwork, avec DefaultMediaItemConverter (#9663).
  • Extension FFmpeg :
    • Fait en sorte que build_ffmpeg.sh dépende des utilitaires bin de LLVM plutôt que de GNU (#9933).
  • Compatibilité avec Android 12 :
    • Mise à niveau de l'extension Cast pour qu'elle dépende de com.google.android.gms:play-services-cast-framework:20.1.0. Les versions antérieures de play-services-cast-framework ne sont pas compatibles avec les applications ciblant Android 12 et plantent avec IllegalArgumentException lors de la création de PendingIntent (#9528).
  • Suppression des symboles obsolètes :
    • Suppression de Player.EventListener. Utilisez Player.Listener à la place.
    • Suppression de MediaSourceFactory#setDrmSessionManager, MediaSourceFactory#setDrmHttpDataSourceFactory et MediaSourceFactory#setDrmUserAgent. Utilisez MediaSourceFactory#setDrmSessionManagerProvider à la place.
    • Suppression de MediaSourceFactory#setStreamKeys. Utilisez MediaItem.Builder#setStreamKeys à la place.
    • Suppression de MediaSourceFactory#createMediaSource(Uri). Utilisez MediaSourceFactory#createMediaSource(MediaItem) à la place.
    • Suppression de setTag de DashMediaSource, HlsMediaSource et SsMediaSource. Utilisez MediaItem.Builder#setTag à la place.
    • Suppression de DashMediaSource#setLivePresentationDelayMs(long, boolean). Utilisez MediaItem.Builder#setLiveConfiguration et MediaItem.LiveConfiguration.Builder#setTargetOffsetMs pour remplacer le fichier manifeste, ou DashMediaSource#setFallbackTargetLiveOffsetMs pour fournir une valeur de remplacement.
    • Suppression de (Simple)ExoPlayer.setThrowsWhenUsingWrongThread. Il n'est plus possible de désactiver l'application forcée du thread.
    • Suppression de ActionFile et ActionFileUpgradeUtil. Utilisez ExoPlayer 2.16.1 ou une version antérieure pour utiliser ActionFileUpgradeUtil afin de fusionner les anciens fichiers d'action dans DefaultDownloadIndex.
    • Suppression de ProgressiveMediaSource#setExtractorsFactory. Utilisez le constructeur ProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory) à la place.
    • Suppression de ProgressiveMediaSource.Factory#setTag et ProgressiveMediaSource.Factory#setCustomCacheKey. Utilisez MediaItem.Builder#setTag et MediaItem.Builder#setCustomCacheKey à la place.
    • Suppression des constructeurs DefaultRenderersFactory(Context, @ExtensionRendererMode int) et DefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Utilisez plutôt le constructeur DefaultRenderersFactory(Context), DefaultRenderersFactory#setExtensionRendererMode et DefaultRenderersFactory#setAllowedVideoJoiningTimeMs.
    • Suppression de tous les constructeurs CronetDataSource publics. Utilisez CronetDataSource.Factory à la place.
  • Remplacement de IntDefs par @Target(TYPE_USE). Cela peut perturber la compilation des utilisations en Kotlin, ce qui peut être corrigé en déplaçant l'annotation pour annoter le type (Int).
    • @AacAudioObjectType
    • @Ac3Util.SyncFrameInfo.StreamType
    • @AdLoadException.Type
    • @AdtsExtractor.Flags
    • @AmrExtractor.Flags
    • @AspectRatioFrameLayout.ResizeMode
    • @AudioFocusManager.PlayerCommand
    • @AudioSink.SinkFormatSupport
    • @BinarySearchSeeker.TimestampSearchResult.Type
    • @BufferReplacementMode
    • @C.BufferFlags
    • @C.ColorRange
    • @C.ColorSpace
    • @C.ColorTransfer
    • @C.CryptoMode
    • @C.Encoding
    • @C.PcmEncoding
    • @C.Projection
    • @C.SelectionReason
    • @C.StereoMode
    • @C.VideoOutputMode
    • @CacheDataSource.Flags
    • @CaptionStyleCompat.EdgeType
    • @DataSpec.Flags
    • @DataSpec.HttpMethods
    • @DecoderDiscardReasons
    • @DecoderReuseResult
    • @DefaultAudioSink.OutputMode
    • @DefaultDrmSessionManager.Mode
    • @DefaultTrackSelector.SelectionEligibility
    • @DefaultTsPayloadReaderFactory.Flags
    • @EGLSurfaceTexture.SecureMode
    • @EbmlProcessor.ElementType
    • @ExoMediaDrm.KeyRequest.RequestType
    • @ExtensionRendererMode
    • @Extractor.ReadResult
    • @FileTypes.Type
    • @FlacExtractor.Flags (dans le package com.google.android.exoplayer2.ext.flac)
    • @FlacExtractor.Flags (dans le package com.google.android.exoplayer2.extractor.flac)
    • @FragmentedMp4Extractor.Flags
    • @HlsMediaPlaylist.PlaylistType
    • @HttpDataSourceException.Type
    • @IllegalClippingException.Reason
    • @IllegalMergeException.Reason
    • @LoadErrorHandlingPolicy.FallbackType
    • @MatroskaExtractor.Flags
    • @Mp3Extractor.Flags
    • @Mp4Extractor.Flags
    • @NotificationUtil.Importance
    • @PlaybackException.FieldNumber
    • @PlayerNotificationManager.Priority
    • @PlayerNotificationManager.Visibility
    • @PlayerView.ShowBuffering
    • @Renderer.State
    • @RendererCapabilities.AdaptiveSupport
    • @RendererCapabilities.Capabilities
    • @RendererCapabilities.DecoderSupport
    • @RendererCapabilities.FormatSupport
    • @RendererCapabilities.HardwareAccelerationSupport
    • @RendererCapabilities.TunnelingSupport
    • @SampleStream.ReadDataResult
    • @SampleStream.ReadFlags
    • @StyledPlayerView.ShowBuffering
    • @SubtitleView.ViewType
    • @TextAnnotation.Position
    • @TextEmphasisSpan.MarkFill
    • @TextEmphasisSpan.MarkShape
    • @Track.Transformation
    • @TrackOutput.SampleDataPart
    • @Transformer.ProgressState
    • @TsExtractor.Mode
    • @TsPayloadReader.Flags
    • @WebvttCssStyle.FontSizeUnit

Version 1.0.0-alpha01

27 octobre 2021

Publication d'androidx.media3:media3-*:1.0.0-alpha01. Liste des commits de la version 1.0.0-alpha01

Nouvelles fonctionnalités

Media3 est le nouvel espace dédié aux bibliothèques Support pour les contenus multimédias, dont ExoPlayer. La première version alpha contient les implémentations préliminaires et fonctionnelles des bibliothèques pour implémenter des cas d'utilisation de contenus multimédias, y compris :

  • ExoPlayer, un lecteur multimédia au niveau de l'application pour Android, facile à personnaliser et à étendre.
  • Fonctionnalité de session multimédia, pour exposer et contrôler les lectures. Ce nouveau module utilise la même interface Player qu'ExoPlayer.
  • Composants d'UI permettant de créer des interfaces utilisateur pour la lecture de contenus multimédias.
  • Modules encapsulant des fonctionnalités d'autres bibliothèques à utiliser avec ExoPlayer, par exemple l'insertion d'annonces via le SDK IMA.

Pour en savoir plus, consultez le projet GitHub Media3.

ExoPlayer était précédemment hébergé dans un projet GitHub ExoPlayer distinct. Dans Media3, son nom de package est androidx.media3.exoplayer. Nous prévoyons de continuer à gérer et à publier le projet GitHub d'ExoPlayer pendant un certain temps afin de laisser aux applications le temps de migrer vers Media3. Media3 remplace tous les modules ExoPlayer, à l'exception des anciennes extensions media2 et mediasession, qui sont remplacées par le nouveau module media3-session. Cela permet une intégration directe entre les lecteurs et les sessions multimédias, sans avoir besoin d'utiliser une classe d'adaptateur/de connecteur.