Media3
| Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
|---|---|---|---|---|
| 21 octobre 2026 | 1.11.1 | - | - | 1.12.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.11.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 using Jetpack Compose implementation "androidx.media3:media3-ui-compose:$media3_version" // For building media playback UIs using Jetpack Compose with Material Design 3 implementation "androidx.media3:media3-ui-compose-material3:$media3_version" // For building media playback UIs using Views 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 inspecting media files implementation "androidx.media3:media3-inspector:$media3_version" // For extracting and processing video frames implementation "androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation "androidx.media3:media3-effect-lottie:$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" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.11.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 using Compose implementation("androidx.media3:media3-ui-compose:$media3_version") // For building media playback UIs using Views implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs using Jetpack Compose implementation("androidx.media3:media3-ui-compose:$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 inspecting media files implementation("androidx.media3:media3-inspector:$media3_version") // For extracting and processing video frames implementation("androidx.media3:media3-inspector-frame:$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 applying Lottie effects on video frames implementation("androidx.media3:media3-effect-lottie:$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") // Common Kotlin-specific functionality implementation("androidx.media3:media3-common-ktx:$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.12.0
Version 1.12.0-alpha01
21 octobre 2026
La version 1.12.0-alpha01 contient les commits suivants.
- Bibliothèque commune :
- Ajout de
C.COLOR_SPACE_DISPLAY_P3et prise en charge de l'espace colorimétrique Display P3 dans les mappages de couleurs ISOMediaFormatUtiletColorInfo. - Ajout d'un registre
Flagscentral pour gérer les flags de fonctionnalités expérimentales et le déploiement par étapes (Flags.setCanaryModeEnabled). Migration de nombreuses méthodes@ExperimentalApiexistantes pour utiliser la nouvelle API de flags. - Ajoutez
MediaMetadata.playlistId,MediaMetadata.Builder.setPlaylistId(String),MediaMetadata.categoriesetMediaMetadata.Builder.setCategories(List<String>). - Remplacez
androidx.media3.common.util.NonNullApiparorg.jspecify.annotations.NullMarkedde JSpecify.
- Ajout de
- ExoPlayer :
- Correction d'un problème qui bloquait la lecture DASH multipériode lorsque le premier fragment de la période suivante ne se chargeait pas (#3396).
- Signalez
wasCanceled = truedansAnalyticsListener.onLoadErroretMediaSourceEventListener.onLoadErrorlorsque les nouvelles tentatives de chargement sont épuisées. - Prise en charge de l'enregistrement de plusieurs instances
VideoFrameMetadataListenerà l'aide deExoPlayer.addVideoFrameMetadataListeneretExoPlayer.removeVideoFrameMetadataListener, abandon deExoPlayer.setVideoFrameMetadataListeneretExoPlayer.clearVideoFrameMetadataListener. - Ajoutez la compatibilité avec les annonces dans le contenu multipériode (par exemple, DASH) en divisant et en décalant le
AdPlaybackStatepour chaque période. - Correction d'une condition de concurrence dans
PreCacheHelper, où l'annulation d'une requête de préparation en cours pouvait toujours lancer des téléchargements en arrière-plan. - Limitez
setLoadOnlySelectedTracks(true)surProgressiveMediaSourceetDefaultMediaSourceFactorypour ne filtrer que les pistes vidéo et image non sélectionnées. Les pistes audio et textuelles sont toujours chargées pour permettre un changement de piste fluide sans nouvelle mise en mémoire tampon. - Activez
setLoadOnlySelectedTracks(true)par défaut surProgressiveMediaSourceetDefaultMediaSourceFactory. Cela permet d'économiser de la mémoire et d'effectuer des calculs d'allocation de tamponDefaultLoadControlplus précis lorsque toutes les pistes ne sont pas sélectionnées. Notez que cela peut entraîner une mise en mémoire tampon supplémentaire si des pistes vidéo ou d'image non sélectionnées sont activées en cours de lecture. - Correction d'un problème où
Player.getCurrentPosition()pouvait renvoyer des valeurs obsolètes (mise à jour seulement quelques fois par seconde) lorsque la programmation dynamique était activée (#3286). - Correction d'un problème qui entraînait le traitement incorrect d'une diminution ou d'une réinitialisation inattendue de la position de la tête de lecture
AudioTrackcomme un dépassement d'entier, ce qui bloquait la lecture en mode mise en mémoire tampon (#3407). - Supprimez l'élément expérimental
DefaultMediaCodecAdapterFactory.setAsyncCryptoSynchronizationEnabled(boolean). - Évitez les réactivations et les problèmes de moteur de rendu inutiles lorsque vous revenez d'interstitiels ou d'annonces dans du contenu coupé à la fin (#3371).
- Correction d'un problème où une erreur de moteur de rendu sur un élément de playlist à venir pouvait interrompre prématurément la lecture en cours lorsque
Flags.FLAG_PER_STREAM_MEDIA_PROGRESSIONétait activé. - Correction d'un problème de
NullPointerExceptionqui pouvait se produire siExoPlayerfaisait passer les moteurs de rendu à une période multimédia non préparée lorsqueFlags.FLAG_PER_STREAM_MEDIA_PROGRESSIONétait activé. - Correction d'un problème qui pouvait entraîner l'omission ou l'abandon inattendu d'images vidéo lors de la programmation dynamique lorsque
Flags.FLAG_VIDEO_RENDERER_DURATION_TO_PROGRESSest activé. - Correction d'une
ArrayIndexOutOfBoundsExceptiondans les écouteurs d'analyse lors de l'arrêt de la lecture pendant une annonce sur une diffusion en direct (#3423). - Correction d'un problème qui pouvait entraîner la publication inattendue d'un événement de préchargement par
PreloadMediaSourcelorsquepreload()n'était jamais appelé (#3408). - Correction d'un problème où
Format.subsampleOffsetUsétait ignoré pour les pistes de métadonnées, ce qui entraînait des codes temporels de lecture incorrects dans les commandes de raccord SCTE-35 décodées (#3413). - Correction d'une fuite de mémoire dans
PreloadMediaSourceetDefaultPreloadManagerlorsquepreload()est appelé plusieurs fois sur la même source (#3445). - Correction d'une
NullPointerExceptionlors de la publication deAdsMediaSourcealors qu'une actualisation de la chronologie du contenu est en attente (#3442). - Correction d'un problème qui entraînait le passage de la lecture de contenus multimédias progressifs à une position incorrecte lorsqu'un chargement après une recherche (ou lors du démarrage de la lecture à une position non nulle) échouait et était relancé (#3440).
- Ajout d'une solution de contournement pour le décodeur H.264 de la Xiaomi TV Stick 4K (MiTV-AYFR0) qui se fige lors des changements de résolution fluides (#3457).
- Correction d'une
NullPointerExceptiondansSteeringManifestTrackerlorsque le traceur est arrêté avant l'exécution d'un rappel d'erreur ou de fin de chargement publié (#3443). - Prise en charge de la lecture des métadonnées temporelles HAGC (ST 2094-50) à partir des pistes de métadonnées encapsulées
mebxdans les fichiers MP4. - Correction d'un problème où les périodes de préparation lente des contenus multimédias d'une playlist pouvaient être ignorées.
- CompositionPlayer :
- Prise en charge de la configuration de la fréquence d'images de l'agrégation d'images vidéo à l'aide de
Composition.Builder.setVideoFrameAggregationParameterspour les workflows de lecture. - Correction des pertes d'images dans les compositions multiséquences causées par des incohérences de quantification ou d'arrondi des codes temporels, en sélectionnant l'image avec le code temporel le plus proche lors de l'agrégation des images. Cette option n'est activée qu'à partir de l'API 29, car elle nécessite de conserver une image supplémentaire en cours de traitement par séquence vidéo.
- Prise en charge de la configuration de la fréquence d'images de l'agrégation d'images vidéo à l'aide de
- Transformateur :
- Prise en charge de la configuration de la fréquence d'images de l'agrégation d'images vidéo à l'aide de
Composition.Builder.setVideoFrameAggregationParameterspour les workflows d'exportation. - Correction des pertes d'images dans les compositions multiséquences causées par des incohérences de quantification ou d'arrondi des codes temporels, en sélectionnant l'image avec le code temporel le plus proche lors de l'agrégation des images. Cette option n'est activée qu'à partir de l'API 29, car elle nécessite de conserver une image supplémentaire en cours de traitement par séquence vidéo.
- Respectez
Transformer#setAudioMimeType(AUDIO_RAW)lorsqueAudioProcessorsest utilisé. Avant ce correctif, demanderMimeTypes.AUDIO_RAWet appliquer unAudioProcessorentraînait une sortie compressée.
- Prise en charge de la configuration de la fréquence d'images de l'agrégation d'images vidéo à l'aide de
- Sélection de la piste :
- Correction d'un problème qui entraînait la sélection d'une piste SDR au lieu d'une piste Dolby Vision compatible sur certains appareils (#3135).
- Extracteurs :
- Mp4Extractor : correction de l'analyse de la boîte
dOpspour Opus dans MP4, oùPreSkip,InputSampleRateetOutputGainn'étaient pas convertis du format big-endian au format little-endian, ce qui entraînait la suppression des premières ~299 ms d'audio lorsqu'aucune liste de montage n'était présente (#3431). - Supprimez
Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES,Mp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265,FragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIESetFragmentedMp4Extractor.FLAG_READ_WITHIN_GOP_SAMPLE_DEPENDENCIES_H265, car l'analyse de la dépendance des échantillons au sein du GOP pour H.264 et H.265 est activée par défaut. - Mp4Extractor : correction de l'analyse des métadonnées de lieu à partir des boîtes
xyzcontenant des coordonnées d'altitude pour renseignerMp4LocationData. - Ajout de
ExtractorUtil.getFramesPerEncodedSamplepour calculer le nombre d'images audio par échantillon pour les formats audio encodés (#3367). - Ajout de
FLAG_READ_XMP_METADATAàMp4Extractorpour extraire les métadonnées XMP des boîtes UUID de premier niveau. - Correction des fichiers audio AC-3, DTS et LPCM corrompus lors de la lecture de contenus MPEG-PS de type DVD, en supprimant l'en-tête de sous-flux
private_stream_1de chaque paquet PES dansPsExtractoravant que la charge utile ne soit transmise au lecteur audio (#3327). - Correction d'un échec dans
FragmentedMp4Extractorlorsqu'une boîtetfdtde version 1 encode unbaseMediaDecodeTimenégatif (#3412). - MPEG-TS : prise en charge de l'analyse des messages SEI d'arrangement de compression d'images H.264 et H.265 pour renseigner
Format.stereoMode(#3419). - Analyse des données de configuration du profil 20 Dolby Vision et rejet des profils Dolby Vision non compatibles au lieu de les lire au format HEVC standard avec des couleurs incorrectes (#3427).
- MP3 : annulation de l'ajustement des métadonnées de délai et de marge de l'encodeur LAME/Xing, car il est incompatible avec de nombreux décodeurs MP3
MediaCodec(#3425). - Matroska : correction de
NullPointerExceptionlors de l'analyse des élémentsChapterAtomimbriqués (#3438). - Ogg : correction d'un bug qui fusionnait un paquet dont la taille est un multiple de 255 octets et qui se termine à une limite de page avec le paquet suivant.
- MP4 : Analyse les pistes de métadonnées temporelles encapsulées
mebxdansMp4ExtractoretFragmentedMp4Extractor. Les pistes contenant une cléit35sont exposées en tant queMimeTypes.APPLICATION_ITUT_T35(permettant la lecture HAGC). Les autres pistesmebxsont ignorées, sauf siFLAG_EMIT_RAW_MEBX_DATAest défini, auquel cas toutes les pistesmebxsont émises en tant queMimeTypes.APPLICATION_MEBXbrutes. - Ogg : ajout de la prise en charge de l'extraction du remplissage de fin Opus pour une lecture sans interruption (#2576) et correction des codes temporels des échantillons après la recherche d'une page commençant par un paquet continu.
- Ogg : correction des erreurs de décodage et des sauts de code temporel d'environ 1 s dans les flux Ogg Opus enchaînés en ignorant les paquets d'en-tête d'ID et de commentaire Opus en milieu de flux.
- Mp4Extractor : correction de l'analyse de la boîte
- Inspecteur :
- Prise en charge de la récupération des métadonnées XMP à partir de fichiers MP4 à l'aide de
MetadataRetriever. - Prise en charge de l'extraction des pistes de métadonnées temporelles encadrées
mebxdansMediaExtractorCompaten tant queMimeTypes.APPLICATION_MEBX.
- Prise en charge de la récupération des métadonnées XMP à partir de fichiers MP4 à l'aide de
- Cadre de l'inspecteur :
- Correction du problème de coupure des couleurs BT.2020 à large gamme dans l'image de base SDR lors de l'extraction d'images Ultra HDR avec
FrameExtractor. Les couleurs hors gamme sont désormais légèrement compressées dans la gamme sRVB au lieu d'être limitées.
- Correction du problème de coupure des couleurs BT.2020 à large gamme dans l'image de base SDR lors de l'extraction d'images Ultra HDR avec
- Audio :
- Ajout d'une solution de contournement pour les appareils qui appellent
android.media.AudioDeviceCallbacksur le mauvais thread (#3386). - Correction des blocages potentiels de la lecture après les transitions de pistes avec déchargement compressé.
- Contournement d'un problème sur les clés Amazon Fire TV, où l'audio AC-3 pouvait se figer pendant les transitions de période (#3448).
- Prise en charge de la suppression de la marge intérieure de l'encodeur de fin de flux pour la lecture sans interruption Opus Ogg et WebM/Matroska (#2576).
- Correction des mises à jour du délai et du remplissage sans interruption du déchargement dynamique lors des transitions de pistes, afin qu'elles s'appliquent à la piste entrante plutôt qu'à la piste en cours de lecture.
- Suppression du remplissage de fin de l'encodeur sur les flux uniques et le flux final d'une playlist, en plus des transitions sans interruption au milieu de la playlist (#2576).
- Évitez les copies de tampon audio inutiles dans
TrimmingAudioProcessorune fois que le délai de l'encodeur de début de flux a été supprimé et qu'aucun remplissage de fin de flux ne doit être supprimé.
- Ajout d'une solution de contournement pour les appareils qui appellent
- Vidéo :
- Correction du signalement des images vidéo tardives avec des codes temporels de publication identiques afin qu'elles soient signalées comme abandonnées au lieu d'être ignorées.
- Texte :
- Ajoutez
MediaItem.SubtitleConfiguration.timeOffsetUspour décaler les codes temporels des sous-titres téléchargés indépendamment par rapport au contenu multimédia. Le décalage peut être modifié pendant la lecture avecPlayer.replaceMediaItem(int, MediaItem)sans interrompre la lecture (#1976). - SubRip : ajout de la prise en charge de l'injection d'un
CharsetDetectordansDefaultSubtitleParserFactorypour détecter l'encodage des caractères des sous-titres SubRip autonomes sans marque d'ordre d'octet (#2247).
- Ajoutez
- Effet :
- Implémentez
SoundSeparationAudioProcessorpour la séparation des sources audio à l'aide du module StudioSound GMSCore.
- Implémentez
- Multiplexeurs :
- Correction de l'écriture de la boîte
dOpspour Opus dansMp4MuxeretFragmentedMp4MuxeroùPreSkip,InputSampleRateetOutputGainétaient écrits en mode Little-Endian au lieu de Big-Endian (#3431). - Prise en charge de l'écriture de l'altitude GPS dans
Mp4LocationDataà l'aide deMp4Muxer. - Ajout de
Muxer.Factory.create(ParcelFileDescriptor)pour permettre le multiplexage directement dans unParcelFileDescriptor. - Écrivez par défaut le conteneur
tfdt(Track Fragment Base Media Decode Time) dans les conteneurstrafdes fichiers MP4 fragmentés pour fournir des codes temporels de décodage multimédia. - Prise en charge de l'écriture de boîtes de conteneur
dec3E-AC-3 et E-AC-3 JOC (Dolby Atmos) dansMp4Muxer. - Ajout de la prise en charge du format WebM à
MediaMuxerCompat. - Écrivez la boîte
mfra(Movie Fragment Random Access) à la fin des fichiers MP4 fragmentés pour permettre la recherche dansFragmentedMp4Extractorà l'aide deFLAG_READ_MFRA_FOR_SEEK_MAP. - Correction d'un plantage dans
Mp4WriteretFragmentedMp4Writerlors de l'écriture d'un échantillon EOS avant l'écriture d'autres échantillons. - Correction de la conformité du conteneur lors du multiplexage de contenu Dolby dans des fichiers MP4 ou MP4 fragmentés en annonçant la marque compatible
dby1dans l'en-tête du conteneur (#3369). - Prise en charge des pistes audio PCM à virgule flottante 32 bits dans
Mp4MuxeretFragmentedMp4Muxer(#3389). - Rejeter les profils Dolby Vision non compatibles dans
Mp4MuxeretFragmentedMp4Muxerlors de l'ajout de pistes. - Prise en charge des pistes audio PCM entières 24 bits et 32 bits dans
Mp4MuxeretFragmentedMp4Muxer.
- Correction de l'écriture de la boîte
- Extension IMA :
- Transférez les événements de mise en pause et de reprise du lecteur au SDK IMA dans
ImaServerSideAdInsertionMediaSource.
- Transférez les événements de mise en pause et de reprise du lecteur au SDK IMA dans
- Session :
- Ajoutez
MediaConstants.EXTRAS_KEY_PLAYLIST_ID,MediaConstants.EXTRAS_KEY_PLAYLIST_TITLE,MediaConstants.EXTRAS_KEY_PLAYLIST_ARTWORK_URIetMediaConstants.EXTRAS_KEY_CATEGORIESpour renseigner les métadonnées de la playlist et des éléments à partir des métadonnées et descriptions existantes, ainsi queMediaConstants.EXTRAS_KEY_SUGGESTED_TYPEetMediaConstants.EXTRAS_KEY_TTL_SECONDSpour la suggestionLibraryParams.extras. - Correction du plantage de
SecurityExceptionlors de la création ou de la libération d'unMediaSessionsur les appareils qui appliquent des limites strictes dePendingIntent. - Correction d'un problème qui entraînait le renvoi de
nullparMediaSession.getControllerForCurrentRequest()lors des requêtes de lecture sur Android 12 (API 31 et 32) lorsqueMediaSessionServicen'était pas encore au premier plan. - Correction du plantage de
IllegalArgumentExceptionlorsqu'unMediaControllerse connecte à une ancienne session qui signale un volume maximal négatif. - Correction d'un problème qui pouvait entraîner l'envoi d'un rappel
onPrepareFrom*non compatible au lieu deonPlayFrom*, ou l'envoi deonPlay()sans réinitialiser l'élément multimédia demandé, lors de l'appel deMediaController.setMediaItemousetMediaItemssuivi deplay()sur unMediaSessionCompatancien mis en pause. - Correction de
NullPointerExceptiondans l'ancienne version deMediaBrowserlors de la réception d'une réponse de commande personnalisée (#3432). - Correction du plantage de
IllegalArgumentExceptionlors de la réception d'anciennes métadonnées avec des clés en double dans sonBundlesous-jacent. - Fusion des appels
MediaControllerCompat.TransportControlssortants effectués au cours de la même itérationLooperlors du contrôle d'unMediaSessionCompatancien (par exemple, l'appel simultané desetMediaItem,prepareetplaydistribue désormais un seul rappelonPlayFrom*).
- Ajoutez
- Interface utilisateur :
- Correction du positionnement de la ponctuation des sous-titres de droite à gauche et de la préservation de la plage d'intervalle lorsque le retour automatique à la ligne bidirectionnel est activé (#3454, #3455).
- Ajoutez les classes
TrackSelectionStateetTrackSelectionParametersState, ainsi que leurs fonctions de mémorisation d'état composable correspondantes, au modulemedia3-ui-compose. - Introduction de
PresentationState.videoAspectRatioet remplacement desourceSizeDp: Size?paraspectRatio: Float?dansModifier.resizeWithContentScale. - Ajoutez la classe
CuesStateet le composablerememberCuesStateau modulemedia3-ui-composepour écouter les repères actuels du lecteur. - Ajoutez la prise en charge du mode de défilement à
ProgressSliders'il est basé surExoPlayerouCompositionPlayer. - Ajout de la compatibilité avec
showArtworkàPresentationStateet utilisation de cette compatibilité pour chronométrer l'affichage du composableartworkfacultatif fourni dansContentFrameetPlayer. Ajoutez le composableArtworkà utiliser comme valeur par défaut pour l'emplacementartwork. - Ajoutez de nouveaux champs à
PlayPauseButtonState(showBuffering,showRetry,showReplay) et utilisez-les dansPlayPauseButtonpour afficher plus d'icônes et un indicateur de mise en mémoire tampon. - Ajout de la classe
PlaybackStatepour permettre l'observation de l'état de lecture personnalisé et introduction deBufferingIndicatoren tant que composant indépendant du bouton. - Correction d'un problème où
PlayerViewetPlayerControlViewaffichaient des marqueurs d'annonce aux limites de période pour les espaces réservés d'annonces post-roll en direct dans les diffusions en direct multipériodes. - Les emplacements composables de
Player,ContentFrame,PlayerDefaultsetMiniControllerne reçoivent plus le lecteur ni la visibilité des commandes en tant que paramètres. Capturez-les plutôt à partir du champ d'application appelant (par exemple,topControlsest désormais@Composable BoxScope.() -> Unit). Il s'agit d'une modification destructive sur une API instable. - Ajoutez le paramètre
alignmentàContentFrame,PlayeretModifier.resizeWithContentScalepour positionner le contenu mis à l'échelle dans son conteneur, et limitez le contenu deContentFrameà ses limites, de sorte que la vidéo mise à l'échelle avecContentScale.Cropne s'affiche plus en dehors de celles-ci. - Ajout de la prise en charge de l'UI de diffusion en direct à
ProgressSlider,ProgressStateWithTickCountetProgressStateWithTickIntervalen exposantisLiveetliveOffsetMs. Ajout du composableLiveButtonàmedia3-ui-compose-material3(#2213).
- Extension Ktor :
- Correction d'un problème à cause duquel
KtorDataSourcepouvait traiter les échecs de connexion en cours de flux comme une fin d'entrée au lieu de générer une exceptionHttpDataSourceException(#3460).
- Correction d'un problème à cause duquel
- Extension HLS :
- Analyse de
VIDEO-RANGE(PQetHLG) surEXT-X-STREAM-INFetEXT-X-I-FRAME-STREAM-INFdansFormat.colorInfo(#3441). - Correction de
NullPointerExceptionlors de l'analyse des segments d'initialisation MPEG-TSEXT-X-MAPcontenant des échantillons multimédias PES (#3456). - Correction d'une régression où
Format.idetFormat.metadataétaientnullpour les pistes HLS exposées (#3402). - Coupez les annonces de la liste d'assets à
X-PLAYOUT-LIMITet ignorez celles qui dépassent entièrement la limite. Définissez par défaut le décalage de reprise du contenu sur 0 lorsqu'un interstitiel ometX-RESUME-OFFSETet que sa durée est inconnue, même siX-PLAYOUT-LIMITest défini. - Correction d'un problème qui entraînait l'écrasement des contributions de décalage de reprise du contenu d'autres interstitiels du même groupe d'annonces lors de la résolution d'un interstitiel
X-ASSET-LIST.
- Analyse de
- Extension DASH :
- Prise en charge de l'analyse des événements d'insertion (
urn:mpeg:dash:event:alternativeMPD:insert:2025) et de remplacement (urn:mpeg:dash:event:alternativeMPD:replace:2025) de MPD alternatifs dansDashManifestParseret exposition en tant qu'instancesAlternativeMpdEventdansPeriod.alternativeMpdEvents. Il s'agit d'une modification destructive pour les applications qui sous-classentDashManifestParser:DashManifestParser.buildPeriodaccepte désormais un paramètreList<AlternativeMpdEvent>supplémentaire, et la surcharge précédente a été supprimée. Les applications qui remplacentDashManifestParser.parseEventStream(XmlPullParser)doivent remplacerDashManifestParser.parseEventStream(XmlPullParser, String)à la place, car la première méthode est obsolète et sera rendue privée dans une prochaine version. - Analyse des informations de couleur CICP (
ColourPrimaries,TransferCharacteristics,MatrixCoefficientsetVideoFullRangeFlag) à partir des descripteursEssentialPropertyetSupplementalPropertydansFormat.colorInfo(#3426). - Prise en charge des listes de valeurs
@idséparées par des espaces dans les attributs@valuedu descripteur du mode Trick (http://dashif.org/guidelines/trickmode) (#3315). - Prise en charge de l'analyse de
<ProducerReferenceTime>dansDashManifestParser, de son exposition dansAdaptationSet.producerReferenceTimeset de son utilisation pour renseignerTimeline.Window.presentationStartTimeMsetTimeline.Window.windowStartTimeMspour les flux de VOD. - Ajout de la prise en charge de la gestion du contenu DASH (#1689).
- Correction d'un
NullPointerExceptionqui pouvait se produire lors de l'analyse d'un fichier manifeste DASH avec un attribut manquant dans l'élément<UTCTiming>(#3436).
- Prise en charge de l'analyse des événements d'insertion (
- Extension RTSP :
- Correction d'un plantage de
IllegalStateExceptionqui se produisait lors du traitement des réponses réseau retardées après la fermeture du client RTSP. - Correction d'un problème où un balayage rapide pouvait déclencher de manière incorrecte le mécanisme de remplacement du protocole TCP.
- Correction d'un plantage de
IllegalStateExceptionqui peut se produire lors du traitement des réponses réseau retardées après la réinitialisation de l'état par le client RTSP lors de la nouvelle sélection de la piste, de l'arrêt de la session ou de la redirection de l'URI. - Correction d'un problème qui pouvait entraîner un plantage de
IllegalStateExceptionlors d'une nouvelle recherche avant le redémarrage de la lecture. - Correction d'un problème qui pouvait entraîner une perte audio et un blocage de la lecture vidéo lors d'un retour en arrière alors qu'une recherche était déjà en cours.
- Correction d'un problème qui empêchait les unités d'accès aux images clés H.264 et H.265 se terminant par un paquet d'agrégation ou non IDR d'être signalées comme des images clés, ce qui bloquait la lecture en mode mise en mémoire tampon (#3434).
- Correction d'un plantage de
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Extension Opus : correction du plantage JNI lors du décodage de données Opus non valides.
- Extension Opus : correction du problème de non-prise en compte du remplissage de suppression lorsque le pré-saut et le remplissage de suppression se trouvent sur le même paquet (#2576).
- Extension Cast :
- Introduction de
SessionAvailabilityListener.SessionUnavailableReasonpour représenter la raison de l'indisponibilité de la session et fourniture d'une méthode surchargée pour queSessionAvailabilityListener.onCastSessionUnavailablel'expose. - Correction d'un problème qui entraînait la reprise inattendue de la lecture en local après l'arrêt d'une session Cast.
- Consignation d'une erreur lorsque les opérations
RemoteMediaClient(telles que la lecture, la mise en pause, le changement de vitesse, le mode de répétition, le volume, la coupure du son ou la sélection de piste) échouent dansRemoteCastPlayer(#3373). - Correction de
ArrayIndexOutOfBoundsExceptiondansRemoteCastPlayerlorsque la file d'attente du récepteur Cast change ou se réduit pendant qu'une opération de recherche est en attente (#3372). - Correction d'un problème lié au récepteur Cast par défaut, où la chronologie ne renseignait que les éléments multimédias entourant immédiatement l'élément actif, plutôt que l'intégralité de la playlist (#3129).
- Mise à jour immédiate de la chronologie et de la position de lecture lors de la modification de la playlist (
setMediaItems,addMediaItems,moveMediaItems,removeMediaItems) ou de la recherche dansRemoteCastPlayer, et mise en file d'attente des opérations successives de la playlist pour qu'elles s'exécutent de manière fiable dans l'ordre (#2639, #3272). - Correction d'un problème qui empêchait le chargement des éléments multimédias sur le récepteur Cast lors de l'appel de
addMediaItemssur une file d'attente vide dansRemoteCastPlayer(#2402). - Correction d'un problème dans
RemoteCastPlayer: lorsque la fin de la file d'attente du récepteur Cast était atteinte, la timeline était effacée au lieu de conserver la playlist. - Correction d'un problème qui empêchait le transfert ou l'application de
playWhenReady,repeatModeetplaybackParameterslorsqu'ils étaient définis surRemoteCastPlayeravant le chargement des éléments multimédias (par exemple, lors du transfert de lecture locale vers une lecture à distance dansCastPlayer) (#889).
- Introduction de
- Application de démonstration :
- Ajoutez la compatibilité avec les éléments multimédias protégés par DRM et un exemple de flux HLS supplémentaire au catalogue de l'application de démonstration de la session.
- Configurez
RemoteCastPlayeravec unCastTrackSelectordans l'application de démonstration de session pour permettre la sélection des sous-titres et de la piste audio pendant la diffusion.
- Suppression des symboles obsolètes :
- Suppression de
DashUtil.buildDataSpec(Representation, RangedUri, int)etDashUtil.buildDataSpec(Representation, String, RangedUri, int). Utilisez plutôtDashUtil.buildDataSpec(Representation, BaseUrl, RangedUri, int, Map<String, String>).
- Suppression de
- Compilation :
- Augmentez la valeur
minSdkde Gradle à 24.
- Augmentez la valeur
Version 1.11.0
1.11.1
10 septembre 2026
- ExoPlayer :
- Déplacement du flag permettant d'activer/de désactiver les métadonnées HAGC pour les contenus multimédias progressifs de
MediaSource.FactoryversExtractorsFactory. La méthodesetExperimentalEnableHagcPlaybackprécédente est supprimée et remplacée parExtractorsFactory.setParseHagcMetadata. Cela résout également un problème qui empêchait la désactivation de fonctionner pour les conteneurs Matroska/WebM. - Correction d'un blocage de la lecture causé par le préchauffage d'un moteur de rendu secondaire sans transition.
- Correction d'un problème de préchauffage où le
Surfacedoit être renvoyé au moteur de rendu principal lorsqu'une recherche réinitialise et désactive les deux moteurs de rendu. - Correction de
ArrayIndexOutOfBoundsExceptionlorsqu'une actualisation de la chronologie en direct déplace la position par défaut au-delà d'une annonce insérée côté serveur en cours de lecture (#3348). - Correction d'un problème de mode de défilement où des images vidéo obsolètes pouvaient s'afficher brièvement lors de la recherche avec
ScrubbingModeParameters.allowSkippingMediaCodecFlushactivé.
- Déplacement du flag permettant d'activer/de désactiver les métadonnées HAGC pour les contenus multimédias progressifs de
- Extracteurs :
- Matroska : correction d'un problème qui empêchait les pistes placées après les clusters de générer une chronologie navigable (#3377).
- Audio :
- Correction du calcul de la taille de la mémoire tampon dans
SilenceSkippingAudioProcessorafin que la durée minimale de silence ne soit pas réduite de manière incorrecte par la taille de l'image (#3271). - Correction de la gestion du PCM 8 bits dans
PcmAudioUtilpour traiter les échantillons comme non signés, comme défini par Android (#3271). - Correction d'un problème de déchargement qui pouvait entraîner un blocage de la lecture pendant les transitions pré-roll ou sans interruption en raison de la taille limitée de la mémoire tampon matérielle.
- Correction d'un bug dans
DefaultAudioSinkoù le nombre de versions ne diminue pas lorsque le thread de lecture n'est plus actif (#3338).
- Correction du calcul de la taille de la mémoire tampon dans
- Session :
- Correction de
NullPointerExceptionlorsqu'unMediaControlleren cours de traitement est libéré d'un rappelPlayer.Listener(#3375). - Correction d'un blocage sur le thread principal lorsqu'un
MediaBrowserancien se connecte à un service renvoyant un résultat asynchrone à partir deonGetLibraryRoot()ouonConnectAsync()(#3393).
- Correction de
- Extension HLS :
- Correction du calcul du décalage de reprise du contenu lorsque le segment cible pour l'alignement n'est pas encore dans la playlist (#3322).
- Correction d'un problème qui entraînait une nouvelle tentative de chargement d'un
HlsMediaChunkentièrement consommé lors de la réception deEOFExceptionde l'extracteur (#3350).
- Extension DASH :
- Correction du calcul incorrect du code temporel de l'échantillon pour les pistes d'images avec un
presentationTimeOffset(#3334).
- Correction du calcul incorrect du code temporel de l'échantillon pour les pistes d'images avec un
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Opus : correction de la corruption de la mémoire lorsque plusieurs instances
OpusDecodersont initialisées simultanément. - MPEG-H : correction d'une fuite de mémoire, de la troncature des caractères non ASCII et d'un plantage natif potentiel en cas de mémoire insuffisante lors de l'envoi de commandes à
MpeghUiManager(#3365).
- Opus : correction de la corruption de la mémoire lorsque plusieurs instances
Version 1.11.0
5 août 2026
- Bibliothèque commune :
- Ajout de
Format.channelMaskpour représenter explicitement le masque de canal audio et d'une nouvelle surchargeUtil.getAudioTrackChannelConfig(Format)pour le résoudre de manière sécurisée. - Mise à niveau de Kotlin de la version 2.0.20 vers la version 2.2.0.
- Ajout de
- ExoPlayer :
- Correction d'un bug de simultanéité dépendant du temps qui pouvait provoquer une
IllegalStateExceptionou uneIndexOutOfBoundsExceptiondans ExoPlayer. - Assouplissement des vérifications du nombre de groupes d'annonces dans
AdsMediaSourcepour permettre la diminution du nombre de groupes d'annonces lorsqu'un groupe d'annonces est entièrement traité (hasUnplayedAds()estfalse), ce qui permet d'ajuster dynamiquement la taille des groupes d'annonces lors des workflows de réinitialisation. - Ajoutez
getFlags()etFLAG_STRICT_DURATIONàSampleStreampour permettre aux flux de signaler des indicateurs, et mettez à jour les moteurs de rendu pour vérifier ces indicateurs de manière dynamique. - Utilisez l'estimateur de fréquence d'images dans
MediaCodecVideoRendereret le format de sortie du codec dansMediaCodecAudioRendererpour calculer le taux de fonctionnement du codec lorsque les formats de flux ne fournissent pas de valeur valide, et évitez les réinitialisations inutiles du codec. - Suppression du découpage du contenu pour les annonces insérées côté client dans le lecteur principal. À la place,
AdsMediaSources'occupe de la logique de découpage. Les sources d'annonces personnalisées insérées côté client doivent être mises à jour pour implémenter le découpage du contenu en interne. - Marquez les pistes avec un profil ou un niveau de codec bien formé, mais non reconnu, comme
supported=NO_EXCEEDS_CAPABILITIESau lieu desupported=YES(qui est la façon dont les pistes avec des informations de profil ou de niveau manquantes ou mal formées sont marquées). Cela permet de s'assurer que ces pistes (qui ne sont probablement pas compatibles avec l'appareil) ne sont pas sélectionnées lorsqu'il existe des alternatives mieux compatibles. - Ajoutez
DefaultPreloadManager.SimpleRankingDataComparator, qui est unRankingDataComparatorcomparant les rangs des éléments multimédias en fonction de leur distance par rapport à l'index de l'élément multimédia en cours de lecture. Les applications peuvent remplacer sa méthodecompare(Integer, Integer)si une logique de comparaison plus précise est nécessaire. LeSimpleRankingDataComparatorpersonnalisé peut être injecté via un nouveau constructeur deDefaultPreloadManager.Builder. - Réduisez le risque de mémoire insuffisante de
DefaultLoadControl.prioritizeTimeOverSizeThresholdsen revenant aux limites de taille d'octets du tampon si la mémoire de tas disponible semble limitée. - Alignement de la gestion des images fixes lorsque
MediaItem.imageDurationUsn'est pas défini : les images fixes JPEG et HEIC sont désormais "lues" avec une durée par défaut très courte (comme c'était déjà le cas pour les images PNG et d'autres images). - Ajoutez
MediaSource.prepareSource(MediaSourceCaller, PlayerId, BandwidthMeter)pour raccorderBandwidthMeteràMediaSource. La méthode obsolète avec implémentation personnalisée sera toujours appelée par défaut. Toutefois, il est recommandé d'implémenter la nouvelle méthode et d'utiliserBandwidthMeter.getTransferListener()pour obtenir la parité avec l'ancienne méthode. - Dans
DefaultBandwidthMeter, ajout de la prise en charge d'unInitialBitrateSupplierpersonnalisé. Cela permet aux applications de fournir leur propre logique pour déterminer l'estimation initiale du débit, qui sera utilisée lors de la création deDefaultBandwidthMeteret lors des changements de type de réseau. Le fournisseur peut être défini viaDefaultBandwidthMeter.Builder.setInitialBitrateSupplier(). - Activez la programmation dynamique par défaut. La boucle de travail de lecture
ExoPlayers'exécutera de manière dynamique, et non à un intervalle statique. - Suppression d'une réinitialisation inutile qui peut se produire lors de l'association de pistes avec des échantillons de pré-roll à la lecture active.
- Dans
DefaultBandwidthMeter, optimisezgetInitialBitrateCountryGroupAssignmentpour renvoyer les attributions de groupes de pays regroupées dans un entier 32 bits au lieu d'un tableau, ce qui réduit la taille du code et évite les allocations. - Correction des échecs d'initialisation de
AudioTracksur certains appareils en veillant à ce que la logique de nouvelle tentative tente toujours d'utiliser une taille de mémoire tampon d'au moins une seconde si les autres nouvelles tentatives (en divisant par deux la taille de la mémoire tampon) échouent (#3207). - Correction d'un problème de codec sur certains appareils où le codec absorbait tous les échantillons s'il avait été vidé avant de recevoir des tampons d'entrée.
- Ajout de l'élément expérimental
ExoPlayer.Builder.enablePerStreamMediaProgression()pour permettre l'avancement du traitement multimédia par flux. Cela réduit la latence de démarrage entre les éléments de la playlist et évite que la lecture ne se bloque avec des contenus très courts (#3122). - Correction d'une condition de concurrence liée à l'utilisation de l'ID de session audio, où l'ID de session audio initial généré automatiquement par
ExoPlayerétait utilisé à la place de la valeur définie parsetAudioSessionId(#3241). - Ajout de la compatibilité expérimentale avec la lecture des métadonnées temporelles HAGC (ST 2094-50) pour les contenus multimédias progressifs (par exemple, MP4, Matroska). Le lecteur fusionne automatiquement les pistes de métadonnées HAGC avec la piste vidéo associée et transmet les métadonnées hors bande au décodeur sur les appareils dotés de l'API 37 ou version ultérieure. Ce comportement peut être désactivé via
DefaultMediaSourceFactory.setExperimentalEnableHagcPlayback(false). - Ajout de
Format.selectionPriorityreprésentant la préférence relative deFormatdans la sélection de pistes (#3236). - Correction d'un problème potentiel lié au mode de balayage, qui pouvait se bloquer lors de la recherche de la fin du flux.
- Correction d'un bug de simultanéité dépendant du temps qui pouvait provoquer une
- CompositionPlayer :
- Correction d'un problème qui empêchait la publication des instances
TrackSelector.
- Correction d'un problème qui empêchait la publication des instances
- Transformateur :
- Correction d'un problème de sur-signalement de
ExportResult.fileSizeBytes.
- Correction d'un problème de sur-signalement de
- Sélection de la piste :
- Exposez
BaseTrackSelection.DEFAULT_FORMAT_COMPARATORet ajoutezAdaptiveTrackSelection.Factory.setTrackFormatComparatorpour permettre l'ordre de format personnalisé et la priorité de sélection ABR au-delà de l'ordre basé uniquement sur le débit. - Correction d'un problème de simultanéité lié au timing, où des mises à jour séquentielles rapides des paramètres de sélection de pistes pouvaient entraîner la perte ou l'écrasement de certaines mises à jour.
- Exposez
- Extracteurs :
- MP4, MP3 et FLAC : ajout de
FLAG_DISABLE_ARTWORK_METADATApour permettre l'abandon des images jointes et des métadonnées de visuel d'illustration lors de l'analyse du conteneur afin de réduire la consommation de mémoire d'exécution (#2077). Vous pouvez également l'activer de manière centralisée viaDefaultExtractorsFactory.setDisableArtworkMetadata. - MP4 : ajout de la prise en charge de l'extraction des pistes de métadonnées temporelles ITU-T T.35 (
it35). - MP4 : ajout de la compatibilité avec l'extraction des métadonnées de chapitre (formats Nero et QuickTime). Les chapitres QuickTime sont privilégiés si les deux sont présents. Les informations de chapitre extraites sont exposées en tant qu'entrées
Chapterdans leMetadatade la piste, ce qui permet une navigation native dans les chapitres des fichiers MP4, M4A et M4B (comme les livres audio et les podcasts) (#2803). - WAV, Matroska et MP4 : ajout de la compatibilité avec l'audio PCM à virgule flottante 64 bits (#3090).
- Matroska : utilisez les métadonnées du flux binaire du codec pour renseigner un
ColorInfoprécis. - MP4 : ajout de la prise en charge de la recherche dans les fichiers MP4 fragmentés à l'aide de la zone
mfralorsqu'une zonesidxn'est pas présente. Pour l'activer, fournissezFLAG_READ_MFRA_FOR_SEEK_MAPàFragmentedMp4Extractor, ce qui est désormais fait par défaut dansDefaultExtractorsFactory(#3088). - Ignorer les données
av1Cavec une version non compatible. - MP4 : Ajout de la compatibilité avec le PCM à virgule flottante big-endian dans les conteneurs
fpcm. - Matroska : Analyse les informations sur les chapitres pour les entrées
Chapterdans leMetadatad'un titre. - MPEG-TS : amélioration de l'extraction des flux DTS-HD et DTS Express en combinant le sous-flux Core et le sous-flux Extension en un seul échantillon, ce qui résout les problèmes de lecture lorsque les deux étaient auparavant générés en tant qu'échantillons distincts (#3147).
- MP4 : empêche les boucles infinies et les lectures hors limites lors de l'analyse des éléments de balise de métadonnées
ilstvides (#3191). - MPEG-TS : s'assurer que la dernière image est affichée pour les flux dont le dernier paquet PES a une longueur connue (#3206).
- MP3 : correction du signalement du débit pour les fichiers avec en-tête Xing et VBRI.
- Matroska : gère les pistes définies dans le dernier cluster (#3250).
- Matroska : ajout de la prise en charge d'ALAC (#3268).
- MP4 : Autorise les conteneurs
sgpdde longueur variable dans les fichiers MP4 fragmentés (#3243). - AVI : correction d'un problème qui entraînait une perte audio et
OutOfMemoryErrorlors de la lecture de fichiers sans indicateurs d'images clés sur les pistes audio. - MP3 : utilisation des durées sans interruption des en-têtes Xing/Info (#3183).
- MP3 : ajustement du délai de l'encodeur LAME/Xing et des métadonnées de marge intérieure pour correspondre au rognage PCM décodé (#3200).
- MP4, MP3 et FLAC : ajout de
- Audio :
- Ajout d'un délai de grâce de 100 ms dans les moteurs de rendu audio d'ExoPlayer lors de la transition de l'état "prêt" à l'état "non prêt", afin de limiter les sous-exécutions transitoires et d'éviter les états de mise en mémoire tampon inattendus pendant la lecture active (#3210).
- Modifiez la logique de taille de la mémoire tampon PCM par défaut dans
DefaultAudioTrackBufferSizeProviderpour utiliser une mémoire tampon fixe de 500 ms afin de la rendre moins dépendante de l'appareil. - Mise à jour de
MediaCodecAudioRendererpour extraire le spatial channelMask du décodeur de la plate-forme, ce qui permet àDefaultAudioSinkd'utiliser ce masque explicite au lieu d'en déduire un à partir du nombre de canaux. - Convertissez les paramètres de
AudioSink.configureen classe de données. Les remplacements personnalisés deForwardingAudioSink.configuredoivent être migrés vers la nouvelle signature de méthode. - Ajout de la prise en charge du maintien de la hauteur lors de l'étirement temporel d'un flux audio avec
EditedMediaItem.Builder#setSpeed(SpeedParameters). - Amélioration de
ToFloatPcmAudioProcessorpour permettre la conversion de PCM 8 bits, PCM 16 bits big-endian et PCM à virgule flottante 64 bits en PCM à virgule flottante 32 bits (#3090). - Remplacez la valeur renvoyée de
DecoderAudioRenderer.getChannelMappingparImmutableIntArray. - Correction d'un bug qui bloquait la lecture d'une playlist audio sans interruption en mode de déchargement compressé.
- Transférer l'UID de
Timelineet de la période versAudioSink.configureetAudioProcessor.StreamMetadatapour fournir le contexte de la playlist aux processeurs audio (#418). - Définissez le bon
AudioProcessor.StreamMetadata.positionOffsetUspour permettre le traitement audio basé sur le temps (#418). - Ajout de la compatibilité avec le PCM à virgule flottante 32 bits et 64 bits big-endian.
- Suppression du chemin de remplacement d'EAC3-JOC vers EAC3 pour la lecture sur les appareils Google Pixel, car leurs décodeurs EAC3 standards ne peuvent pas décoder les flux EAC3-JOC (#3257).
- Vidéo :
- Correction de la logique de jointure vidéo pour compter les tampons supprimés lors de la jointure comme ignorés au lieu de supprimés.
- Correction de la décision de rendu immédiat lors de la définition d'une nouvelle surface pour éviter les pertes d'images sur les appareils qui ne sont pas compatibles avec les surfaces d'espace réservé.
- Correction de l'estimation de la fréquence d'images dans
MediaCodecVideoRendererpour qu'elle soit plus précise en tenant compte des images supprimées ou ignorées. - Autoriser la configuration du seuil utilisé pour planifier les frames de manière anticipée. La valeur par défaut est de 50 ms, mais vous pouvez la personnaliser via
MediaCodecVideoRenderer.Builder.setMaxEarlyUsThreshold(). - Correction d'un bug dans
VideoFrameReleaseHelperoù les modifications d'affichage pouvaient déclencher des rappelsChoreographerredondants et des réveils excessifs du processeur sur le thread principal.
- Texte :
- Métadonnées :
- Ajout du champ
MediaMetadata.discSubtitleet analyse à partir des données ID3v2.4TSSTet VorbisDISCSUBTITLE. - Analyse le numéro et le nombre de disques à partir du cadre ID3
TPOS.
- Ajout du champ
- Effet :
- Effacement de l'état de redessin dans
FinalShaderProgramWrapperlors du vidage pour éviter que le lecteur ne se fige lors de la recherche.
- Effacement de l'état de redessin dans
- Multiplexeurs :
- Ajout de la prise en charge des références de pistes (la zone
tref) dansMp4Muxervia une nouvelle APIaddTrackReference. Cela permet d'établir des relations entre les pistes, par exemple en associant une piste de métadonnées à la piste vidéo qu'elle décrit. - Ajoutez
OggMuxerpour autoriser le multiplexage des flux multimédiasOPUSouVORBISau format de fichierogg. - Ajout de
WavMuxerpour la génération de fichiers WAV (compatible avec les PCM entiers et à virgule flottante). - Ajoutez
setAttemptStreamableOutputEnabledàInAppMp4Muxer.Factorypour autoriser l'écriture de fichiers non diffusables plus petits sans espace réservé. - Ajout de la compatibilité avec l'audio IAMF dans
Mp4MuxeretFragmentedMp4Muxer.
- Ajout de la prise en charge des références de pistes (la zone
- Extension IMA :
- Ajoutez
ImaServerSideAdInsertionMediaSource.AdsLoader.Builder.setPauseAdSlotpour permettre de fournir un espace publicitaire à utiliser pour les annonces pendant la pause. - Correction d'un bug qui affichait immédiatement le bouton "Ignorer" sur la deuxième annonce lorsque deux annonces VAST désactivables étaient diffusées l'une après l'autre (#3165).
- Ajoutez
- Session :
- Correction des blocages potentiels et des plantages de
IllegalStateExceptiondansMediaNotificationManagerlors de l'utilisation d'une session avec un looper de lecteur de thread en arrière-plan. - Appliquez des exigences de threading plus strictes pour les méthodes
MediaSession. Les méthodes void publient désormais automatiquement l'exécution sur le thread de boucle de l'application, et les accesseurs d'état (getters) génèrent explicitement une exceptionIllegalStateExceptions'ils sont appelés à partir d'un thread autre que la boucle de l'application. - Correction d'un plantage de fusion de chronologie hors limites (
IllegalStateExceptiondansMediaUtils.mergePlayerInfo) en suivant la cohérence de l'état par contrôleur côté session. - Ajout de
androidx.media3.session.MediaSessionManagerpour permettre l'interrogation des sessions multimédias actives et le renvoi d'instances Media3SessionToken. - Modifiez le comportement par défaut de
MediaSession.Callback.onConnectsi la méthode n'est pas remplacée pour ne fournir qu'un accès en lecture aux contrôleurs non approuvés. - Ajout de la possibilité de remplacer le nom du package lors de la création de
MediaSessionvia une nouvelle APIMediaSession.Builder#setPackageNameOverride. L'appelant doit disposer de l'autorisationandroid.permission.OVERRIDE_MEDIA_SESSION_OWNERpour remplacer le nom de package de la session. - Ajout de
MediaSession.Callback.onConnectAsync(). La nouvelle méthode permet de traiter de manière asynchrone la tentative de connexion d'un contrôleur. Les applications peuvent renvoyer unFutureimmédiat avecFutures.immediateFuture(ConnectionResult)pour obtenir le comportement précédent. Nous vous recommandons de migrer vers la nouvelle méthode, carCallback.onConnectest susceptible d'être abandonné. - Correction d'un problème qui empêchait la navigation AVRCP Bluetooth de reconnaître
MediaLibraryServicesur les API 36 et 37. - Correction de la double réduction de l'illustration dans
MediaSessionlorsque la taille de l'image est proche de la limite de la plate-forme, ce qui résout le flou dans les notifications (#3134). - Correction du plantage de
ForegroundServiceStartNotAllowedExceptiondansMediaNotificationManagerlorsqu'un rappel de chargement asynchrone de bitmap d'illustration tente de démarrer le service de premier plan alors que l'application est en arrière-plan (#3270). - Correction d'un problème qui entraînait l'absence des UID
Timelined'origine des objetsPositionInforeçus par unMediaController. La session traduit et propage désormais de manière fiable ces UID lors des mises à jour d'état. - Correction d'un plantage en interceptant
ForegroundServiceStartNotAllowedExceptiondansMediaSessionService.stopSelfSafely()(#3310). - Correction du rappel
onMediaItemTransition()inattendu surMediaControllerlors de la recherche dans le même élément multimédia (#3248).
- Correction des blocages potentiels et des plantages de
- Interface utilisateur :
- Correction du rendu du premier frame à la mauvaise taille lorsque
ContentFrameest recomposé en cours de lecture (#3238). - Ajoutez la classe
CurrentMediaItemStateet le composablerememberCurrentMediaItemStatecorrespondant au modulemedia3-ui-compose. Ce conteneur d'état est utilisé dansdemo-composepour afficher diverses informations de métadonnées sur leMediaItemen cours de lecture. - Ajoutez la classe
PlaylistStateet le composablerememberPlaylistStatecorrespondant au modulemedia3-ui-compose. Ce conteneur d'état est utilisé dansdemo-composepour afficher diverses informations de métadonnées sur leMediaItemsdéfini sur le lecteur. - Ajout d'une API d'avance rapide/de ralenti à
PlaybackSpeedState. Utilisez cette fonctionnalité dansdemo-composepour montrer l'avance rapide en appuyant de manière prolongée. - Ajoutez le composable
MiniControllerau modulemedia3-ui-compose-material3. Il fournit une affordance compacte pour contrôler lePlayertout en affichant le titre, l'artiste, l'illustration et la progression de l'élément multimédia actuel. - Ajoutez la classe
ErrorStateet le composablerememberErrorStatecorrespondant au modulemedia3-ui-compose. Ajoutez le composableErrorTextàmedia3-ui-compose-material3et définissez-le comme superposition par défaut surPlayer. - Publiez l'objet
PlayerDefaultsavec des composables pourTopControls,CenterControls,BottomControlsetErrorOverlay. - Ajoutez
FocusRequesterau composablePlayeret à ses emplacements de contenu. - Publiez
PlayerPool(common-ktx) etrememberPooledPlayer(ui-compose) pour permettre le préchargement deMediaItemsdans les environnements d'interface utilisateur à fenêtre coulissante. Présentez cette fonctionnalité dansdemo-composeavec un nouveauShortFormPlayerScreen. - Correction d'un bug de suppression de l'obturateur dans
PlayerViewet ComposePresentationStatequi provoquait des plantages sur les chronologies non compatibles avec la recherche d'UID de période (#3264).
- Correction du rendu du premier frame à la mauvaise taille lorsque
- Téléchargements :
- Résolution des variables HLS dans la playlist multimédia lorsqu'elles sont récupérées pour le téléchargement (#3258).
- Extension Ktor :
- Extension HLS :
- Ajout de la prise en charge de la gestion du contenu HLS et du clonage de chemin (#1689).
- Ajout de
setWithAssetListResetàHlsInterstitialsAdsLoaderpour permettre aux applications de réinitialiser les interstitiels de liste d'assets entièrement traités à un état indisponible pour une nouvelle résolution à la demande. - Analyse de l'attribut
SCOREdeEXT-X-STREAM-INFetEXT-X-I-FRAME-STREAM-INF, et renseignement deFormat.selectionPriority(#3236). - Correction d'un bug qui entraînait la poursuite des actualisations programmées de la playlist HLS même si la playlist n'était plus principale ou active (#3254).
- Correction du calcul du décalage de reprise du contenu lors de la résolution des listes d'assets interstitiels (#3322).
- Correction d'une discontinuité inattendue du code temporel de la piste audio lors de la reprise de la lecture en direct à faible latence après l'échec d'une requête de playlist (#3311).
- Correction d'un bug dans
HlsMediaPeriod.getStreamKeys()qui considérait la piste ID3 des rendus audio comme des sous-titres (#3333).
- Extension DASH :
- Séparez les sous-titres CEA en différents
TrackGroupen fonction de la langue (#3113). - Ajout de la prise en charge de l'analyse de plusieurs éléments
Locationà partir du fichier manifeste (MPD) et de l'exécution d'un remplacement d'emplacement dansDashMediaSourceen cas d'échec du chargement du fichier manifeste. - Correction d'un plantage (
IndexOutOfBoundsException) lors de l'ouverture de fichiers manifestes avec un élément<SegmentTimeline/>vide (#3326).
- Séparez les sous-titres CEA en différents
- Extension RTSP :
- Correction des blocages ou des échecs de lecture temporaires lors de la préparation de la lecture RTSP, causés par des erreurs de liaison de port UDP.
- Extension Cast :
- Ajout d'une classe
CastParamspour permettre la configuration de Cast en appelantCast.initialize(CastParams). - Ajout de l'option
CastParams.getShowSystemOutputSwitcherOnCastIconClick(), qui déclenche l'utilisation du sélecteur de sortie SystemUI au lieu du sélecteur d'appareil Cast intégré à l'application, lorsqu'il est disponible. - Ajout de
MediaRouteButtonStateetrememberMediaRouteButtonStatepour permettre l'observation de l'état de visibilité du sélecteur de route multimédia, et ajout du paramètrestateàMediaRouteButton(#3172). - Correction d'un bug qui pouvait bloquer définitivement
RemoteCastPlayerdans un état de masquage de piste après une sélection de piste, ce qui l'amenait à ignorer les mises à jour de piste ultérieures du récepteur Cast (#3237). - Correction d'un bug qui entraînait l'affichage d'une
NullPointerExceptionparDefaultMediaItemConverterlors de la tentative de participation à une session de diffusion démarrée à partir d'un expéditeur non Media3. - Empêche
CastPlayerde transférer desMediaItemsqui ne sont pas lisibles lors du changement de lecteur actif (#3199). - Correction d'un bug qui mettait en file d'attente les diffusions en direct non configurées (
liveConfiguration == UNSET) en tant queSTREAM_TYPE_BUFFERED(#3318).
- Ajout d'une classe
- Utilitaires de test :
- Développez
DataSourceContractTestpour inclure la prise en charge des requêtesPOSTavec des en-têtes et des corps, ajoutez des ressourcesPOSTàHttpDataSourceTestEnv, puis ajoutez des assertions pour la méthode, les en-têtes et le corps HTTP attendus dansWebServerDispatcher. - Resserrez les assertions dans
DataSourceContractTestpour les longueurs renvoyées parDataSource.open(). Les ressources pouvant entraîner une erreurC.LENGTH_UNSETdoivent l'indiquer à l'aide deTestResource.Builder.setMayResolveToUnknownLength(boolean). - Ajoutez
setPlaybackLooperau fichierTestExoPlayerBuilder.
- Développez
- Suppression des symboles obsolètes :
- Supprimez
androidx.media3.exoplayer.MetadataRetriever. Utilisezandroidx.media3.inspector.MetadataRetrieverà la place. - Suppression de
androidx.media3.exoplayer.MediaExtractorCompat. Utilisezandroidx.media3.inspector.MediaExtractorCompatà la place. - Supprimez
Mp4Extractor.FLAG_READ_MOTION_PHOTO_METADATA. Utilisez plutôtHeifExtractorpour extraire les métadonnées des photos animées des fichiers HEIC. - Supprimez
androidx.media3.extractor.metadata.mp4.MotionPhotoMetadata. Utilisezandroidx.media3.extractor.metadata.MotionPhotoMetadataà la place. - Suppression de
androidx.media3.extractor.DummyTrackOutput. Utilisezandroidx.media3.extractor.DiscardingTrackOutputà la place. - Suppression de
androidx.media3.extractor.DummyExtractorOutput. Utilisezandroidx.media3.extractor.NoOpExtractorOutputà la place. - Suppression de
androidx.media3.common.C.generateAudioSessionIdV21. Utilisezandroidx.media3.common.util.Util.generateAudioSessionIdà la place.
- Supprimez
- Créer
- Mise à jour des instructions
README.mdpour dépendre de Media3 localement afin d'utiliser les builds composites Gradle (includeBuild). Le scriptcore_settings.gradlea été supprimé, et les propriétésandroidxMediaModulePrefixetandroidxMediaEnableMidiModulene sont plus utilisées.
- Mise à jour des instructions
1.11.0-rc01
Utilisez la version stable 1.11.0.
1.11.0-beta01
7 juillet 2026
Utilisez la version stable 1.11.0.
1.11.0-alpha01
24 juin 2026
Utilisez la version stable 1.11.0.
Version 1.10.0
1.10.1
12 mai 2026
- Bibliothèque commune :
- Correction de la gestion de
onAudioSessionIdChangeddansSimpleBasePlayeretForwardingSimpleBasePlayer.
- Correction de la gestion de
- ExoPlayer :
- Correction d'une condition de concurrence liée à la génération de l'ID de session audio, qui pouvait entraîner une
IllegalStateExceptionen mode Tunneling. (#3099). - Correction des plantages possibles de l'application lors de la récupération après des erreurs de décodeur avec le préchauffage du moteur de rendu.
- Correction d'un problème d'artefacts vidéo causés par la fourniture de données d'initialisation lors de l'utilisation d'un codec Dolby Vision basé sur AV1 (#3153).
- Correction d'une condition de concurrence liée à la génération de l'ID de session audio, qui pouvait entraîner une
- Sélection de la piste :
- Ajustement de la logique de sélection des pistes dans
VideoTrackInfopour résoudre les types MIME de remplacement et déplacement des préférences de score HDR et de codec vers les préférences de qualité (#3135).
- Ajustement de la logique de sélection des pistes dans
- Extracteurs :
- MP3 : ignorer la longueur des données Xing si elle est supérieure à la longueur de flux connue (#3117).
- Correction de
ArrayIndexOutOfBoundsExceptiondansMp4ExtractorlorsqueFLAG_OMIT_TRACK_SAMPLE_TABLEest défini et que la piste ne comporte pas de zone d'échantillon de synchronisation (stss).
- Audio :
- Correction d'un bug qui pouvait entraîner un routage incorrect des événements audio si plusieurs moteurs de rendu audio étaient ajoutés au lecteur.
- Vidéo :
- Ajustement de la logique de réutilisation des codecs lors des changements de fréquence d'images sur les API inférieures à 30 pour éviter les réinitialisations de codecs lorsqu'elles ne sont pas utiles (#3120).
- Désactivation de la solution de contournement de synchronisation forcée dans
queueSecureInputBufferpour l'API 31 et les versions ultérieures. La solution de contournement était un goulot d'étranglement artificiel qui forçait l'exécution du déchiffrement en série, ce qui empêchait la vidéo d'être déformée en raison d'un problème de framework existant avant l'API 31.
- Image :
- Correction d'un problème en mode de défilement où les mises à jour d'image ne prenaient effet que lorsque l'utilisateur "arrêtait le défilement" (#2815).
- Session :
- Correction d'un bug qui empêchait la propagation de
ForegroundServiceStartNotAllowedExceptionentre les limites des threads si le thread de l'application n'était pas le thread principal (#2499). - Correction d'un bug où
COMMAND_SEEK_TO_MEDIA_ITEMn'est pas disponible dans unMediaControllerlors de la connexion à une session réservée à la plate-forme qui permet de rechercher d'autres éléments, mais pas de modifier la playlist. - Correction d'un problème qui empêchait
MediaControllerde définir des éléments multimédias sur les sessions multimédias de la plate-forme n'autorisant pas les actionsPREPARE_FROM. - Correction d'un bug qui empêchait le marquage de son propre processus avec
Controller.isTrusted()sur l'API 27 ou une version antérieure lors de la connexion via des contrôleurs de plate-forme.
- Correction d'un bug qui empêchait la propagation de
- Extension HLS :
- Correction d'un bug qui génère une
ArrayIndexOutOfBoundsExceptionlors du remplacement du flux si la sélection de pistes est un sous-ensemble des pistes disponibles (#3161). - Correction d'un problème qui empêchait le transfert du segment d'initialisation entre les mises à jour de la playlist multimédia si la balise
#EXT-X-MAPn'était pas répétée dans les mises à jour ultérieures (#3105).
- Correction d'un bug qui génère une
- Extension DASH :
- Correction d'un plantage dans
SampleQueuelors de la recherche dans un fragment en cours d'annulation.
- Correction d'un plantage dans
1.10.0
26 mars 2026
- Bibliothèque commune :
- Promotion de
Player.mute()etPlayer.unmute()deUnstableApien version stable. - Promotion de
Format.pcmEncodingetC.PcmEncodingdeUnstableApien version stable. - Ajout de
Format.primaryTrackGroupIdpour identifier le groupe principal d'instancesFormatintégrées (#294).
- Promotion de
- ExoPlayer :
- Ajoutez des fonctionnalités de découpage à
AdsMediaSource. - Ajout de la prise en charge de la planification dynamique dans
MediaCodecVideoRendererpour mieux aligner le travail de planification et les cycles de réveil du processeur sur le moment où les images vidéo peuvent être traitées. Vous pouvez l'activer à l'aide deexperimentalSetEnableMediaCodecVideoRendererDurationToProgressUs()dansDefaultRenderersFactory. - Autorisation de définir un
DataSource.Factorypersonnalisé dansDefaultPreloadManager.Builder. - Autorisez l'imitation de
ExoPlayersans Robolectric en déplaçant certaines constantes par défaut versExoPlayer.Builder. La simulation de cette interface complexe n'est généralement pas encouragée, sauf si l'utilisation est minimale/simple/accessoire (#2985).- Pour cela, il a fallu déplacer
DEFAULT_STUCK_PLAYING_DETECTION_TIMEOUT_MSdeExoPlayerversExoPlayer.Builder(sans abandon).
- Pour cela, il a fallu déplacer
- Correction d'un bug qui entraînait la propagation par
ProgressiveMediaSourced'informations de chronologie obsolètes vers le lecteur, et la suppression inattendue des périodes en file d'attente (#3016). - Correction d'un problème qui empêchait ExoPlayer de demander la priorité audio différée lorsque la lecture était demandée pendant un appel téléphonique.
- Correction d'un bug où les transitions entre le contenu à la demande et le contenu en direct pouvaient entraîner une mise en mémoire tampon à la fin du contenu à la demande (#3052).
- Ajout de la prise en charge du profil 10 Dolby Vision (#2830).
- Correction d'un bug où une annonce pré-roll non initialisée produisait une exception
ArrayIndexOutOfBoundsException(#3125).
- Ajoutez des fonctionnalités de découpage à
- CompositionPlayer :
- Ajout de la prise en charge de
EditedMediaItem.removeVideo.
- Ajout de la prise en charge de
- Transformateur :
EditedMediaItem.Builder.setFrameRate()peut désormais définir une fréquence d'images de sortie maximale pour la vidéo, ce qui est particulièrement utile pour augmenter la vitesse de lecture des contenus multimédias avecsetSpeed().
- Sélection de la piste :
- Modifiez la signature de
DefaultTrackSelector.selectAllTrackspour inclure le tableau de sortie en tant que paramètre, prérempli avec les forçages de pistes. - Correction d'un problème de sélection des pistes de métadonnées intégrées, que la piste principale correspondante soit sélectionnée ou non (#294).
- Stabilisez les options
TrackSelectionParameterspourpreferredVideoLanguages,preferredVideoLabels,preferredAudioLabels,preferredTextLabelsetselectTextByDefault.
- Modifiez la signature de
- Extracteurs :
- MP4 : Prise en charge des fichiers avec de grands conteneurs
uuidavant d'autres conteneurs commemoov(#3046). - MP4 : ajout de la compatibilité avec les pistes VVC (Versatile Video Coding) dans les conteneurs MP4.
- MP4 : Prise en charge des fichiers avec de grands conteneurs
- Inspecteur :
- Modification destructive : suppression de
FrameExtractor. Les utilisateurs doivent désormais dépendre du nouveau module:media3-inspector-frameet mettre à jour les importations versandroidx.media3.inspector.frame.FrameExtractor. - Ajout d'un module pour extraire et traiter les images vidéo décodées.
- Modification destructive : suppression de
- Audio :
- La bibliothèque de décodage sous-jacente de l'extension de décodeur IAMF est passée de
libiamfàiamf_tools. - Le décodage IAMF est compatible avec la sortie binaurale via le décodeur (lors de l'utilisation de l'extension de décodeur IAMF) ou via l'outil de spatialisation Android.
- Suppression correcte de la compatibilité avec
AC4Profile22et d'autres anciens profils lors de l'évaluation de la compatibilité du décodeur AC-4 dans les scénarios Automotive (#2609). - Amélioration de la logique de nouvelle tentative d'initialisation de
AudioOutputdansDefaultAudioSink(#2905). - Tentez de faire correspondre la disposition de sortie des enceintes (ou du spatialiseur, le cas échéant) lors du décodage IAMF, à la fois avec l'extension IAMF et les décodeurs de codecs multimédias, compatibles avec les nouveaux champs et la logique dans AudioCapabilities et AudioCapabilitiesReceiver.
- Correction d'un bug qui bloquait la lecture d'une playlist audio sans interruption en mode de déchargement compressé.
- La bibliothèque de décodage sous-jacente de l'extension de décodeur IAMF est passée de
- Texte :
- VobSub : utilisez les commandes de contrôle SPU
STARTetSTOPpour déduire la durée du repère au lieu de toujours utiliser la valeur par défaut de 5 secondes (#2935).
- VobSub : utilisez les commandes de contrôle SPU
- Métadonnées :
- Augmentation du nombre par défaut de moteurs de rendu de métadonnées à quatre pour couvrir toutes les pistes de métadonnées potentielles publiées par les variantes et les rendus HLS (#3043).
- Effet :
- Déplacement de
LottieOverlayvers un nouveau module:media3-effect-lottie(qui a également été renommé deandroidx.media3.effect.LottieOverlayenandroidx.media3.effect.lottie.LottieOverlay).
- Déplacement de
- Lottie de l'effet :
- Introduction d'un nouveau module
:media3-effect-lottiequi permet d'appliquer des effets Lottie aux images vidéo.
- Introduction d'un nouveau module
- Extension IMA :
- Mettez à jour le SDK IMA vers la version 3.39.0 pour accéder à la dernière API AdMediaInfo.
- Correction d'un bug qui empêchait le type MIME de l'annonce de correspondre au type MIME fourni dans l'événement IMA LOADED. Le correctif mappe désormais le type MIME de l'annonce à l'aide des informations sur le média de l'annonce fournies par IMA.
- Ajout de
setEnableCustomTabsàImaAdsLoaderetImaServerSideAdInsertionMediaSource, ce qui permet aux utilisateurs de contrôler si les URL de destination des annonces sont lancées à l'aide d'onglets personnalisés. - Ajoutez
ImaAdTagUriBuilder, une classe qui offre une autre façon de construire unadTagUri. Il contient l'APIsetPreferredLinearOrientation. Il s'agit d'une API en test alpha qui vous permettra de définir l'orientation de votre choix pour les annonces linéaires. Si vous souhaitez rejoindre le groupe de testeurs alpha, veuillez contacter votre responsable de compte.
- Session :
- Correction d'un bug où de grands tableaux dans
MediaMetadata.artworkDatapouvaient faire planter l'application. - Utilisez le type int pour l'argument
@Player.Commanddans l'interfaceActionFactory(#2933). - Faites de
MediaSessionServiceetMediaLibraryServiceunLifecycleService, ce qui permet d'associer des opérations tenant compte du cycle de vie au cycle de vie du service (#187). - Arrêter de prendre en charge les commandes de modification du volume de l'appareil depuis
MediaControlleretMediaBrowserpour les lectures locales. Les applications ne doivent pas modifier le volume de l'appareil local. Si nécessaire, elles peuvent utiliser les APIAudioManagerà cette fin. - Détectez les instances
Intentobsolètes qui ont démarré le service en tant que service de premier plan. Cela évite qu'une erreurForegroundServiceDidNotStartInTimeExceptionne soit générée par le système. Il s'agit d'une modification destructive d'une API instable pour les applications qui implémentent unMediaNotification.Providerpersonnalisé, car une nouvelle méthode est requise. - Ajout de compilateurs pour les instances
PendingIntentà utiliser avec les widgets de l'écran d'accueil (#2933). - Ajout de méthodes statiques pour créer des instances
Intentpour les widgets d'écran d'accueil basés sur Compose (#2933). - Correction d'un bug à cause duquel la transition d'un élément multimédia n'était pas signalée aux contrôleurs lorsque la lecture passait d'un index d'élément multimédia donné à un autre avec le même élément multimédia pour les raisons de discontinuité "AUTO" et "SEEK" (#2997).
- Correction d'un problème où la solution de contournement pour le placement des boutons de l'UI système affectait négativement d'autres surfaces de l'UI, comme Android Auto ou les fabricants n'ayant pas besoin de la solution de contournement (#3041).
- Correction d'un problème de non-synchronisation de l'accès aux abonnements (#3056).
- Contournement d'un bug SysUI sur l'API 29, où l'illustration d'une session multimédia d'une taille particulière peut faire planter SysUI et forcer l'appareil à redémarrer (#3118).
- Correction de la mise à l'échelle de l'icône d'illustration des notifications sur Android Q (#3084).
- Correction d'un bug où de grands tableaux dans
- Interface utilisateur :
- Ajoutez le composable
PlaybackSpeedControlàmedia3-ui-composepour afficher et modifier la vitesse de lecture. - Ajoutez le composable
PlaybackSpeedToggleButtonàmedia3-ui-compose-material3pour contrôler la vitesse de lecture. - Ajout du composable
ProgressSlideràmedia3-ui-compose-material3pour afficher la progression du lecteur et effectuer des recherches par glisser-déposer et par pression (#2288). - Évitez d'utiliser un grand tampon hors écran lors de l'animation de PlayerControlView.
- Ajout du composable
Playeràmedia3-ui-compose-material3, qui combine unContentFrameavec des commandes personnalisables alignées en haut, au centre et en bas. - Masquez la position de lecture du service d'accessibilité pour éviter la mise à jour continue des annonces lorsque
PlayerControlViewest visible.
- Ajoutez le composable
- Extension HLS :
- Ajout de la compatibilité avec X-PLAYOUT-LIMIT pour les interstitiels HLS (#2484).
- Prise en charge de l'attribut
QUERYPARAMavec#EXT-X-DEFINE(#1854). - Optimisation de l'analyse des playlists HLS en mettant en cache les outils de mise en correspondance des expressions régulières (#3008).
- Exposez la piste de métadonnées ID3 (EMSG) dans les rendus audio (#3043).
- Autoriser le remplacement de l'emplacement en cas d'erreurs de chargement, si des flux redondants provenant de différents emplacements sont disponibles (#1988).
- Correction du comportement de X-SNAP pour les interstitiels HLS afin de calculer correctement la position de début et de reprise (#3013).
- Extension DASH :
- Correction d'un problème qui entraînait des retards ou des échantillons manquants au début de la lecture pour les pistes dont les heures de début de segment n'étaient pas alignées (#3057).
- Correction d'un bug qui empêchait de définir correctement les codes temporels des métadonnées EMSG v0 intrabande (#3024).
- Extension RTSP :
- Correction d'une régression dans le streaming H.264 et H.265 qui analysait de manière incorrecte les échantillons d'une même unité d'accès couvrant plusieurs paquets RTP. Cela entraînait des artefacts visuels et une corruption de la vidéo (#3121).
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Ajout de la compatibilité avec le gestionnaire d'interface utilisateur MPEG-H à l'extension de décodeur MPEG-H (#3066).
- Extension Cast :
- Ajout de la méthode
RemoteCastPlayer.Builder#setTrackSelectorqui permet d'implémenter la sélection de pistes pour les lectures Cast.
- Ajout de la méthode
- Suppression des symboles obsolètes :
- Supprimez
ExperimentalFrameExtractor. Utilisezandroidx.media3.inspector.frame.FrameExtractorà la place. - Suppression de
ChannelMixingMatrix.create(). UtilisezChannelMixingMatrix.createForConstantGain()à la place. - Suppression de
androidx.media3.extractor.metadata.flac.VorbisComment. Utilisezandroidx.media3.extractor.metadata.vorbis.VorbisCommentà la place. - Supprimez
MediaSource.prepareSource(MediaSourceCaller, TransferListener). UtilisezMediaSource.prepareSource(MediaSourceCaller, TransferListener, PlayerId)à la place.
- Supprimez
1.10.0-rc03
25 mars 2026
Utilisez la version stable 1.10.0.
1.10.0-rc02
16 mars 2026
Utilisez la version stable 1.10.0.
1.10.0-rc01
10 mars 2026
Utilisez la version stable 1.10.0.
1.10.0-beta01
25 février 2026
Utilisez la version stable 1.10.0.
1.10.0-alpha01
6 février 2026
Utilisez la version stable 1.10.0.
Version 1.9.0
1.9.4
16 mai 2026
La version 1.9.4 contient les commits suivants.
- Effet :
- Définissez explicitement
GL_DRAW_BUFFERetGL_READ_BUFFERlors de la transition depuis un contexte sans surface.
- Définissez explicitement
1.9.3
16 mars 2026
Liste des commits de la version 1.9.3
- Audio :
- Correction d'un bug qui bloquait la lecture d'une playlist audio sans interruption en mode de déchargement compressé.
1.9.2
6 février 2026
Liste des commits de la version 1.9.2
- ExoPlayer :
- Correction d'un bug qui entraînait la propagation par
ProgressiveMediaSourced'informations de chronologie obsolètes vers le lecteur et la suppression inattendue des périodes mises en file d'attente (#3016).
- Correction d'un bug qui entraînait la propagation par
- Session :
- Correction d'un problème où la solution de contournement pour le placement des boutons de l'UI système affectait négativement d'autres surfaces de l'UI, comme Android Auto ou les fabricants n'ayant pas besoin de la solution de contournement (#3041).
- Extension Cast :
- Correction d'un bug qui empêchait le transfert de Cast vers la lecture locale.
1.9.1
26 janvier 2026
Liste des commits de la version 1.9.1
- Bibliothèque commune :
- Prise en charge des chaînes de date et d'heure avec uniquement les heures dans le décalage de fuseau horaire (#2929).
- ExoPlayer :
- Autoriser la planification dynamique à ralentir l'intervalle
doSomeWorkuniquement après le démarrage de l'audio pour permettre une synchronisation audio/vidéo plus fluide au début de la lecture. - Correction d'un bug dans
DefaultLoadErrorHandlingPolicyqui entraînait plusieurs nouvelles tentatives pourFileNotFoundExceptionet les types d'exceptions similaires. - Correction d'un bug lié à la planification dynamique, où le temps calculé pour le prochain
doSomeWorkétait réduit par erreur du temps écoulé de l'itération actuelle dedoSomeWork. Cela devrait permettre de prolonger le temps d'inactivité du processeur et d'économiser de l'énergie. - Correction d'un problème qui empêchait la lecture de certains fichiers Dolby Vision lors de l'utilisation d'un codec AVC ou HEVC de remplacement.
- Correction d'un bug qui provoquait la poursuite du chargement après la fin de la lecture lors de la suppression de l'élément en cours de lecture d'une playlist (#2873).
- Évitez les fuites d'instances
MediaItemlorsque vous utilisezExoPlayer.replaceMediaItemde manière répétée sur le même élément (#2993). - Éviter les erreurs ANR potentielles causées par les libérations de wakelocks d'urgence (#2979).
- Autoriser la planification dynamique à ralentir l'intervalle
- Extracteurs :
- MP3 : analyse des données LAME ReplayGain (#2840).
- Audio :
- Suppression correcte de la compatibilité avec
AC4Profile22et d'autres anciens profils lors de l'évaluation de la compatibilité du décodeur AC-4 dans les scénarios Automotive (#2609).
- Suppression correcte de la compatibilité avec
- Vidéo :
- Suppression des codecs vidéo sur les appareils équipés d'une API antérieure à la version 30 lorsque la fréquence d'images du contenu change, afin d'éviter les saccades lors de la lecture (#2941).
- Texte :
- VobSub : correction de certains sous-titres manquants en gérant correctement les SPU qui ne contiennent qu'une seule séquence de contrôle ou dont les informations critiques sont réparties sur plusieurs séquences de contrôle (#2935).
- Extension IMA :
- Correction de bug : correction d'un problème qui entraînait une incohérence entre le type MIME de l'annonce et celui fourni dans l'événement IMA LOADED. Le correctif mappe désormais le type MIME de l'annonce à l'aide de l'index de la série d'annonces et de la position de l'annonce.
- Ajoutez une vérification de valeur nulle avant d'accéder au résultat de
getAdsManager()etAdEvent.getAd().
- Session :
- Correction d'un bug qui provoquait le plantage de l'application lorsque l'arrêt d'un
MediaControllerconnecté à une session de plate-forme se produisait pendant la lecture d'une annonce (#2948). - Ajout de vérifications supplémentaires sur les instances
extrasBundledans différentes classes pour se protéger contre les instancesBundlemal formées envoyées par d'autres processus. - Correction d'un problème qui empêchait l'affichage de certaines commandes pour
COMMAND_SEEK_NEXTouCOMMAND_SEEK_BACKdans la notification multimédia du système (#2976). - Déplacement de la mise à l'échelle du bitmap pour l'icône de notification hors du thread principal (#2829).
- Correction d'un bug qui empêchait l'utilisation de l'auteur, du rédacteur et du compositeur comme solution de remplacement lors de la conversion d'anciens
MediaMetadataCompatetMediaDescriptionCompat(#3018).
- Correction d'un bug qui provoquait le plantage de l'application lorsque l'arrêt d'un
- Téléchargements :
- Correction des boucles infinies potentielles lorsqu'un
PriorityTooLowExceptionest géré parSegmentDownloader(pour DASH, HLS et SmoothStreaming). Les remplacements personnalisés deSegmentDownloaderà l'aide de la méthodeexecuteprotégée doivent fournir leur tâche encapsulée dans unSupplierafin qu'elle puisse être recréée (#2931).
- Correction des boucles infinies potentielles lorsqu'un
- Extension HLS :
- Transmettez le document JSON de la liste d'assets bruts au rappel
Listener.onAssetListLoadCompleted. Il s'agit d'une modification destructive dans une API instable qui nécessite que les applications qui implémentent ce rappel ajoutent un argument supplémentaire de typeJSONObject(#2950).
- Transmettez le document JSON de la liste d'assets bruts au rappel
- Extension RTSP :
- Traitement correct des paquets RTP avec des codes temporels qui s'enroulent (#2930).
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Correction d'une exception
NullPointerExceptionpotentielle pouvant se produire lors d'une recherche avant le traitement de la première image vidéo (#2965).
- Correction d'une exception
- Extension Cast :
- Correction d'un bug qui empêchait la mise à jour correcte de la chronologie
RemoteCastPlayerlors du remplacement de la playlist.
- Correction d'un bug qui empêchait la mise à jour correcte de la chronologie
1.9.0
17 décembre 2025
- Bibliothèque commune :
- Mise à jour de
minSdkvers23conformément aux autres bibliothèques AndroidX. - Ajout de
PlayerTransferState, qui facilite le transfert de l'état de lecture entre les instancesPlayer. - Ajoutez les méthodes
void mute()etvoid unmute()à Player pour conserver et restaurer le volume de Player avant et après l'avoir défini sur zéro. - Publication des classes utilitaires
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManageretStuckPlayerDetectorprécédemment utilisées parExoPlayeren interne pour permettre leur réutilisation pour d'autres lecteurs (#1893). - Correction de la gestion des écouteurs
ForwardingPlayerlorsque le lecteur délégué sous-jacent utilise l'égalité de référence pour comparer les instances d'écouteurs (#2675). - Ajoutez une fonction d'extension de suspension
Player.listenTodans la bibliothèquemedia3-common-ktxqui spécifie l'Player.Eventsparticulier sur lequel agir. - Correction d'un plantage dans
BasePlayer.getBufferedPercentagerésultant d'un dépassement d'entier lorsque la position de mise en mémoire tampon signalée est beaucoup plus grande que la durée signalée (#2750). - Correction de la détection automatique du type de piste
TrackGroupen n'ignorant pas le type MIME d'échantillon personnalisé et en utilisant le type de piste potentiellement incorrect du type MIME du conteneur (#2860).
- Mise à jour de
- ExoPlayer :
- Ajout d'une détection de blocage du lecteur qui déclenche une erreur de lecteur
StuckPlayerExceptionsi le lecteur semble bloqué. Cela se produit dans les cas suivants, où chaque délai avant expiration par défaut peut être configuré dansExoPlayer.Buildersi nécessaire :- Après 10 minutes de
STATE_BUFFERINGlors de la tentative de lecture et aucune progression de la mise en mémoire tampon. - Après 10 secondes de
STATE_READYlors de la tentative de lecture et sans progression de la lecture. - Après une minute de
STATE_READYau-delà de la durée déclarée sans atteindre la fin de l'élément. - Après 10 minutes avec un motif de suppression de la lecture lors d'une tentative de lecture.
- Après 10 minutes de
- Activez la gestion des wakelocks par défaut pour résoudre les problèmes de mise en mémoire tampon pendant la lecture en arrière-plan. Cela équivaut à définir
ExoPlayer.Builder.setWakeModesurC.WAKE_MODE_LOCAL. - Ajoutez une logique d'écoute pour mettre à jour automatiquement l'ID de l'appareil virtuel lorsqu'une modification est signalée au
Contextinitialement transmis àExoPlayer.Builder. - Ajoutez
ExoPlayer.setVirtualDeviceIdpour mettre à jour manuellement l'ID de l'appareil virtuel obtenu à partir deContexttransmis àExoPlayer.Builder. - Assurez-vous que les moteurs de rendu ne consomment pas les données de l'élément suivant de la playlist plus de 10 secondes avant la fin de l'élément actuel.
- Ajout de
setSeekBackIncrementMs,setSeekForwardIncrementMsetsetMaxSeekToPreviousPositionMsàExoPlayerpour mettre à jour ces paramètres après la construction (#2736). - Ajoutez une fonctionnalité de mise en cache préalable dans
DefaultPreloadManager. Les applications peuvent désormais renvoyerDefaultPreloadManager.PreloadStatus.specifiedRangeCached(startPositionMs, durationMs)ouDefaultPreloadManager.PreloadStatus.specifiedRangeCached(durationMs)viaTargetPreloadStatusControl.getTargetPreloadStatus(T rankingData)pour indiquer qu'un élément multimédia doit être mis en cache préalable. - Utilisez la fonctionnalité de mise en cache préalable de
DefaultPreloadManagerdans l'application de démonstration de contenus courts. - Ajout de setters
DefaultLoadControl.Builderpour la lecture locale et ajustement des valeurs par défaut deDefaultLoadControlpour qu'elles fonctionnent correctement avec un large éventail de fichiers locaux. - Correction d'un bug où la définition d'une playlist vide pouvait laisser le lecteur dans l'état
STATE_READYouSTATE_BUFFERING. - Amélioration des API du gestionnaire de préchargement :
- Ajoutez
addMediaItems(List<MediaItem>, List<T>)etaddMediaSources(List<MediaSource>, List<T>)qui ajoutent les éléments ou sources multimédias par lot, puis appellent automatiquementinvalidate(). - Ajoutez
removeMediaItems((List<MediaItem>)etremoveMediaSources(List<MediaSource>)pour supprimer les éléments multimédias ou sources multimédias par lot, et assurez-vous que le gestionnaire de préchargement ne commence pas à précharger ou ne continue pas à précharger l'un d'entre eux après la suppression. - Autorisez
DefaultPreloadManager.setCurrentPlayingIndex(int)à s'invalider automatiquement. Les applications n'ont plus besoin d'appeler explicitementinvalidate()après avoir mis à jour l'index de lecture actuel.
- Ajoutez
- Ajout de la possibilité d'ignorer la réinitialisation des images clés pour les recherches vers l'avant dans le même groupe d'images en mode de défilement.
- Ajout de
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)pour que les applications définissent une valeur d'octets de tampon cible pour un lecteur avec leplayerNamespécifié. LeDefaultLoadControlpeut désormais prendre des décisions pour chaque lecteur séparément en fonction des octets qui lui sont alloués et des octets de la mémoire tampon cible. - Ajoutez
SkipInfoàAdPlaybackState.AdGrouppour transmettre les informations de désactivation de chaque annonce du groupe d'annonces. - Correction d'un bug où l'appel de
removeMediaItems(List)pendant la lecture d'une annonce post-roll provoquait un plantage (#2746). - Correction de certains problèmes de saccades lors de la lecture de playlists, où les images étaient toujours définies par erreur comme le dernier échantillon et affichées.
- Activation du chemin de nouvelle tentative si le lecteur ne parvient pas à générer l'ID de session audio (#2382, #2678).
- Ajout de la prise en charge du contrôle du nombre total d'octets de tampon pour les sources dans
DefaultPreloadManagerafin d'éviter que le nombre total d'octets de tampon pour le préchargement n'augmente de manière arbitraire. Pour utiliser la logique de contrôle par défaut, les applications peuvent définir les octets du tampon cible pour le préchargement viaDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)pour unplayerNamedePlayerId.Preload.name("preload"), et injecter leDefaultLoadControlcréé viaDefaultPreloadManager.Builder.setLoadControl(LoadControl). - Ajout de
cloneAndSet(int, int)àShuffleOrderavec une implémentation par défaut (#2834). - Ajout d'un décalage de reprise du contenu lorsque la lecture de l'annonce est ignorée après un ajustement de la recherche ou une transition automatique (#2484).
- Ajout d'une API pour définir et observer les paramètres de codec des pistes audio et vidéo.
Cette fonctionnalité est implémentée pour les moteurs de rendu basés sur
MediaCodecet nécessite l'API 29 ou une version ultérieure.- Utilisez
ExoPlayer.setAudioCodecParameters()etExoPlayer.setVideoCodecParameters()pour appliquer des paramètres. - Utilisez
ExoPlayer.addAudioCodecParametersChangeListener()etExoPlayer.addVideoCodecParametersChangeListener()pour écouter les modifications. L'observation des clés spécifiques au fournisseur nécessite l'API 31 ou une version ultérieure.
- Utilisez
- Correction de l'erreur
IllegalStateExceptioncausée par la définition d'une source multimédia vide après avoir recherché une position non nulle, puis par la préparation du lecteur avec une source multimédia non vide. - Correction d'un bug qui provoquait une exception
IllegalStateExceptionlors de la recherche d'autres éléments multimédias en mode de défilement. - Correction d'une éventuelle
NullPointerExceptiondansDefaultPlaybackSessionManager(#2885). - Activez les améliorations des performances de recherche pour les vidéos éligibles.
- Réactivation de l'utilisation du déchiffrement asynchrone dans MediaCodec sur l'API 36 et les versions ultérieures, où les problèmes de délai d'expiration avec cette API de plate-forme ont été corrigés (#1641).
- Remplacez la valeur par défaut de
MediaCodecVideoRenderer.experimentalSetLateThresholdToDropDecoderInputUspar 15 ms et activez une suppression plus efficace des images vidéo avant le décodage pour les vidéos éligibles. - Ajout d'une limite de mémoire maximale au calcul automatique de la mémoire dans
DefaultLoadControl. Cela ne devrait prendre effet que si un nombre excessif de pistes est sélectionné (#2860). - Correction d'un bug qui, lors de la lecture d'une playlist ou en mode répétition, pouvait entraîner le passage à l'élément multimédia suivant lorsque l'utilisateur recherchait un élément en mode balayage vers la fin.
- Ajout d'une détection de blocage du lecteur qui déclenche une erreur de lecteur
- CompositionPlayer :
- Publiez
CompositionPlayersous une nouvelle annotation@ExperimentalApipour indiquer qu'il est disponible pour les tests, mais qu'il est toujours en cours de développement. Certaines API sont susceptibles de changer considérablement dans les prochaines versions, et certains cas d'utilisation (dont certains ne sont pas documentés) présentent des problèmes et des limites connus. - Ajout de la prise en charge de
COMMAND_SET_AUDIO_ATTRIBUTESet de la gestion de la sélection audio dansCompositionPlayer. - Ajout de la compatibilité avec le changement de vitesse dans les séquences secondaires dans
CompositionPlayer. - Ajout de la prise en charge de
EditedMediaItem.removeVideo.
- Publiez
- Transformateur :
- Utiliser
InAppMp4Muxercomme multiplexeur par défaut. - Ajout de
EditedMediaItem.Builder#setSpeed()et abandon deEffects#createExperimentalSpeedChangingEffects(). - Remplacez
forceAudioTracketforceVideoTrackpartrackTypesdansEditedMediaItemSequence.
- Utiliser
- Sélection de la piste :
- Ajoutez
TrackSelectionParameters.selectTextByDefaultpour privilégier la sélection d'une piste de texte sans spécifier d'autres préférences plus spécifiques. - Ajout de
preferredVideoLabels,preferredAudioLabelsetpreferredTextLabelsdansTrackSelectionParameterspour spécifier une préférence pour les pistes avec un libellé spécifique, par exemple celles lues à partir des tags HLS NAME (#1666).
- Ajoutez
- Extracteurs :
- FLAC : renforcement de la détection des en-têtes pour réduire le risque de trouver des en-têtes parasites dans les données FLAC encodées, ce qui entraîne des erreurs de décodage (#558).
- MP3 : autorise les espaces entre (et avant) les tags ID3 au début des fichiers MP3 (#811, #5718).
- MP3 : augmentation de la limite de détection à 128 ko pour correspondre à la limite de recherche existante pour un octet de synchronisation (#2713).
- MP3 : modification de
FLAG_ENABLE_INDEX_SEEKINGpour privilégier la recherche d'informations à partir des en-têtes de métadonnées (comme Xing et VBRI) lorsqu'elles sont disponibles, en revenant à la recherche basée sur l'index si aucune autre information de recherche n'est présente. Cela améliore les performances des fichiers avec des métadonnées de recherche (#2839). - MP3 : modification de
Mp3Extractorpour utiliser par défaut une hypothèse de débit binaire constant (CBR) lorsqu'aucune métadonnée de recherche (par exemple, Xing, VBRI) n'est trouvée, même lorsqueFLAG_ENABLE_INDEX_SEEKINGest défini. Cela est basé sur l'historique des spécifications MP3, où le CBR était la norme et le VBR nécessite des en-têtes explicites. Cela améliore la recherche immédiate des fichiers sans métadonnées, au détriment de la précision potentielle des fichiers VBR sans en-têtes. La recherche d'index est désormais utilisée comme solution de secours si l'hypothèse CBR n'est pas recherchable (par exemple, pour les flux de longueur inconnue) (#2848). - MP4 : désambiguïser les types MIME
audio/mpeg(MP3),audio/mpeg-L1etaudio/mpeg-L2en examinant la valeur de la couche du premier échantillon avant d'émettre un format de piste à partir de l'extracteur (#2683). - MP4 : amélioration de l'efficacité de l'analyse des fichiers très volumineux en supposant qu'une zone
stblde plus de 1 Mo implique que le fichier ne doit pas être fragmenté (#2650). - MP4 : ajout de la compatibilité avec les métadonnées
©mvn(nom du mouvement) et©mvi(index du mouvement). Elles sont désormais émises en tant qu'objetsTextInformationFramedansFormat.metadataavec les IDMVNMetMVINrespectivement (#2754). - MP4 : ignore les pistes sans conteneur
stsd(au lieu de ne pas analyser l'intégralité du fichier). - Matroska : ajout de la prise en charge de la détection DTS-HD (#6225).
- Correction d'un problème dans
MatroskaExtractorqui pouvait entraîner une recherche inexacte pour les fichiers comportant plusieurs pistes. Les points de repère sont désormais correctement associés à leurs pistes respectives, ce qui permet une recherche plus précise. - MPEG-TS : correction de
IllegalArgumentExceptiondeReorderingBufferQueuecausé par des paquets PES sans code temporel (#2764). - Ajout de la prise en charge de l'extraction des photos animées HEIC.
HeifExtractorpeut désormais analyser les fichiers HEIC contenant des pistes vidéo et audio intégrées.
- Inspecteur :
- Introduction d'un nouveau module
:media3-inspectorservant d'emplacement dédié aux utilitaires d'inspection des contenus multimédias. Ce module héberge désormais un nouveauandroidx.media3.inspector.MetadataRetriever, qui fournira une API unifiée pour l'extraction des métadonnées et des images. La version existante deandroidx.media3.exoplayer.MetadataRetrieverest désormais obsolète et remplacée par cette nouvelle version. - Introduction de
androidx.media3.inspector.FrameExtractor, une nouvelle API publique pour l'extraction d'images. Cette classeAutoCloseablepermet d'extraire des images avec la prise en charge de la vidéo HDR, des effets vidéo et de la sélection de décodeurs personnalisés. Il doit être créé via sonBuilderpour unMediaItemspécifique. - FrameExtractor : ajout de
getThumbnail()pour extraire une image miniature représentative d'un fichier multimédia sans nécessiter de code temporel spécifique. - Ajoutez
androidx.media3.inspector.MediaExtractorCompat, un remplacement direct deandroid.media.MediaExtractorde la plate-forme qui permet d'extraire des échantillons multimédias bruts et encodés d'un fichier multimédia. La classeandroidx.media3.exoplayer.MediaExtractorCompatexistante est désormais obsolète et remplacée par cette nouvelle classe.
- Introduction d'un nouveau module
- Audio :
- Informer les instances
AudioProcessorde la recherche. - Autorisez l'injection de la nouvelle interface
AudioOutputProviderdansDefaultAudioSink.Builderpour prendre en charge les chemins de sortie audio personnalisés. La valeur par défaut estAudioTrackAudioOutputProvider. - Gérez les recherches dans
GainProcessor. - Utilisation des fonctionnalités de profil et de niveau du décodeur AC-4 dans l'évaluation de la compatibilité avec le format de piste (#2580).
- Évitez les retards potentiels causés par la gestion des rappels de modification de routage au début de la lecture (#2646).
- Autorisation de la réutilisation des codecs pour les formats EAC3, EAC3-JOC et AC-4 (#1346).
- Ajout de la compatibilité avec les échantillons PCM flottants dans
Sonic. - Ajout de la prise en charge des échantillons PCM 16 bits dans
ToFloatPcmAudioProcessor.
- Informer les instances
- Vidéo :
- Désactivez la réutilisation des codecs pour les contenus Dolby Vision avec différents profils.
- Réactivation de la solution de contournement pour les points de performances signalés à tort pour les codecs sécurisés (#2856).
- Texte :
- Correction de l'analyse des sous-titres CEA-6/708 dans le contenu Dolby Vision (#2775).
- Image :
- Correction d'un problème ScrubbingMode qui bloque le lecteur lors du scrubbing d'une piste de miniatures DASH (#2815).
- DRM :
- Le type renvoyé des méthodes
MediaDrmCallbacka été modifié debyte[]à un nouveau typeMediaDrmCallback.Response, afin de permettre le renvoi d'informations facultatives supplémentaires. Il s'agit d'une modification destructive de la source, mais les problèmes peuvent être facilement résolus en encapsulant la valeur de retourbyte[]précédente avecnew Responseavant de la renvoyer. - Ajout d'informations clés sur les requêtes, telles que l'URL et la latence, à
AnalyticsListener.onDrmKeysLoaded(#1001). - Déplacez les données de la requête de provisionnement d'un paramètre d'URL vers le corps POST.
- Le type renvoyé des méthodes
- Effet :
- Ajout de
Presentation.copyWithUnsetSideRoundedTopour arrondir le côté de sortie non défini lorsquePresentationest créé avec une seule longueur de côté.
- Ajout de
- Multiplexeurs :
- Ajout de
MediaMuxerCompat, un remplacement direct du frameworkMediaMuxer. - Ajout de
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()pour permettre la création de photos animées. - Ajoutez
WebmMuxerpour permettre le multiplexage des flux multimédiasOPUS,VORBIS,VP8etVP9dans un format de fichierwebm.
- Ajout de
- Extension IMA :
- Suppression des règles ProGuard personnalisées, afin que les applications puissent utiliser celles publiées dans l'archive Android IMA.
- Ajout de
ImaServerSideAdInsertionUriBuilder.setNetworkCode, une nouvelle API permettant de définir le code de réseau Google Ad Manager pour que le SDK IMA gère les identifiants d'annonces comme spécifié dans les paramètres Google Ad Manager. Les codes réseau sont facultatifs, mais recommandés pour les demandes de flux de service complet. Pour trouver le code réseau, consultez cet article. - Passage de la dépendance IMA à la version 3.37.0, ce qui nécessite l'activation de la désucration de la bibliothèque principale. Cette option doit également être activée par les applications dépendantes. Consultez les notes de configuration d'IMA. * Prise en charge des options d'UI personnalisées IMA DAI dans le générateur d'URI SSAI. Les options d'interface utilisateur personnalisée pour l'insertion d'annonces côté serveur incluent la compatibilité avec l'affichage des options "Ignorable" et "À propos de cette pub". Cette fonctionnalité est actuellement disponible pour certains éditeurs figurant sur une liste d'autorisation. Cette modification met également à niveau la version du SDK IMA vers la version 3.38.0 (notes de version) pour accéder à l'API d'options d'interface utilisateur personnalisée.
- Correction d'un problème qui entraînait le signalement d'une erreur de préparation du contenu après une annonce comme une erreur de lecture d'annonce (#2656).
- Session :
- Ajout d'un nouveau paramètre à
MediaSession.Callback.onPlaybackResumptionpour indiquer si l'appel sert uniquement à collecter des informations ou à lancer la lecture (#1764). - Mise à jour de
MediaSession.ControllerInfo.isTrustedpour déclarer également les contrôleurs de l'application comme approuvés (#2542). - Ajout de
MediaSessionService.triggerNotificationUpdatepour déclencher manuellement une mise à jour des notifications (#1833). - Ajout de
ProgressListeneraux méthodes de commande personnalisées. - Remplacez la valeur par défaut de
MediaLibrarySession.Builder.setLibraryErrorReplicationModepar "non fatal". - Ajout d'un paramètre
ContextàMediaButtonReceiver.onForegroundServiceStartNotAllowedException(#2625). - Lisez l'ID de contrôle du volume à partir de la plate-forme
PlaybackInfoau lieu de le récupérer via le binder. Cela garantit que le type de lecture et l'ID de contrôle du volume sont lus de manière atomique et correspondent l'un à l'autre. - Correction d'un bug qui filtrait les événements de touche
ACTION_UPavant de les transmettre au rappel pour un traitement personnalisé. Cela permet d'assurer la parité avec ce que media1 et la plate-forme ont fait (#2637). - Correction du bug qui entraînait l'appel de
getCurrentTimeline()parPlayerWrappermême lorsque la commande n'était pas disponible (#2665). - Correction d'un bug qui laissait un message dans la file d'attente des messages de la boucle principale, ce qui provoquait une fuite de mémoire après l'arrêt du service (#2692).
- Lorsqu'elles sont connectées à une ancienne application de session avec un
MediaBrowser, les commandes personnalisées ne sont envoyées à la session que si l'action personnalisée est annoncée comme une action personnalisée dansPlaybackStateCompatde l'ancienne session. Toutes les autres actions personnalisées sont envoyées au service. - Implémentation de
onAudioSessionIdChangedpour avertir les contrôleurs multimédias lorsqu'un ID de session audio est défini par la session (#244). - Correction d'un bug où
KEYCODE_HEADSETHOOKne démarrait pas le lecteur lors de l'arrivée de l'événement de touche multimédiaIntentdansonStartCommand(). Ce problème est résolu en gérant "KEYCODE_HEADSETHOOK" commeKEYCODE_MEDIA_PLAY_PAUSE(#2816). - Correction d'un bug qui empêchait la communication de la taille de la surface entre la session et le contrôleur, ce qui empêchait l'application d'effets vidéo dans la session de démonstration. Si vous utilisez un contrôleur, cela peut être une modification destructive si votre lecteur ne peut pas gérer un appel
setVideoSurfaceHolder. - Correction de la propagation des valeurs de métadonnées
CharSequencenon-String, telles que les chaînes de style span (#2853). - Ajoutez
CommandButton.executeActionpour que les manettes puissent déclencher plus facilement l'action prévue. Permet également de spécifier des paramètres pour certaines commandes de lecteur et de session afin de définir l'action à déclencher. - Ajoutez la rétrocompatibilité pour les instances
CommandButtonà l'aide dePlayer.Commandou deSessionCommandnon personnalisé pour définir leur action. Ils sont désormais correctement représentés dans les sessions multimédias de la plate-forme, par exemple pour l'UI du système ou Android Auto. - Correction d'un problème où le même
Bitmapest compressé plusieurs fois lors de la connexion d'unMediaControllerà une session multimédia de la plate-forme.
- Ajout d'un nouveau paramètre à
- Interface utilisateur :
- Ajoutez la classe
ProgressStateWithTickIntervalet le composablerememberProgressStateWithTickIntervalcorrespondant au modulemedia3-ui-compose. Ce conteneur d'état est utilisé dansdemo-composepour afficher la position et la durée actuelles sous forme de texte. - Ajoutez
MuteButtonStateàui-compose, qui gère la coupure du son du volumePlayer. Ce conteneur d'état est utilisé dansdemo-composepour afficher le bouton d'activation/désactivation du son. - Ajoutez les classes
ProgressStateWithTickCountet le composablerememberProgressStateWithTickCountcorrespondant au modulemedia3-ui-compose. Ce conteneur d'état est utilisé dansdemo-composepour afficher la progression sous la forme d'une barre de progression horizontale en lecture seule. - Ajout du composable
ContentFrameàmedia3-ui-compose, qui combine la gestion dePlayerSurfaceavec le redimensionnement du format et la couverture avec un obturateur. - Contournement d'un bug connu de la plate-forme d'API 34 qui étire/recadre les vidéos lors de l'utilisation de
SurfaceViewdans unAndroidViewCompose, ce qui affecte les composablesContentFrameetPlayerSurfaceavecSURFACE_TYPE_SURFACE_VIEW(#1237, #2811). - Créez un module
media3-ui-compose-material3et ajoutez-y des composables sur le thème Material3 (PlayPauseButton, NextButton, PreviousButton, SeekBackButton, SeekForwardButton, RepeatButton, ShuffleButton, MuteButton). - Ajoutez le composable
TimeTextàmedia3-ui-compose-material3pour afficher la progression du joueur sous forme de texte. Il peut être configuré pour afficher la position actuelle, la durée ou le temps restant. - Ajout de la prise en charge de l'ajout d'un bouton de routage multimédia dans
PlayerView. - Utilisation de
BidiFormatterpour afficher correctement la ponctuation dans les sous-titres de texte de droite à gauche (#11214).
- Ajoutez la classe
- Extension HLS :
- Analysez les attributs d'interstitiels HLS permettant d'ignorer les annonces.
- Mappez les attributs de contrôle de l'option "Ignorer" de la playlist HLS et du document de la liste d'assets dans le
AdPlaybackStatepour l'accès public. - Correction d'un bug qui entraînait la suppression de l'heure de début de la playlist lorsque le tag EXT-X-PROGRAM-START-DATE définissant l'heure de début était supprimé d'une playlist (#2760).
- Utilisation de la recherche binaire pour trouver l'index de segment d'une position donnée dans la playlist (#2826).
- Ajout de
HlsInterstitialsAdsLoader.skipCurrentAd()etskipCurrentAdGroup(), ainsi que des méthodes correspondantes pour ignorer les annonces et les groupes d'annonces par index. - Ajout de
HlsInterstitialsAdsLoader.Listener.onAdStartedpour signaler le début d'une période d'annonce (#2859). - Acceptez l'espace comme séparateur de date/heure dans les chaînes de date/heure ISO 8601.
- Gestion correcte de la récupération du fragment suivant pour un
HlsMediaPlaylistsans segments (#2821). - Utilisez la position de départ par défaut pour les annonces pré-roll avec les diffusions en direct.
- Extension DASH :
- Correction de
UnsupportedOperationExceptionlors de la lecture de flux DASH avec un fichier manifeste d'URIdata:non hiérarchique (#2688). - Réinitialisation de
LiveConfigurationsur la valeur fournie parMediaItemdeDashMediaSourcelors de la publication et de la mise à jour de l'élément multimédia par l'utilisateur (#2606). - Éviter les plantages causés par des mises à jour de fichiers manifestes non valides qui n'ont pas été signalées comme des erreurs du lecteur (#2805).
- Correction de
- Extension RTSP :
- Gestion de l'erreur de paquets RTP manquants lors du traitement des unités NAL fragmentées pour H264 et H265 (#2613).
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Extension AV1 : le décodeur logiciel AV1 utilise désormais la bibliothèque
dav1dhautes performances, en remplacement de l'implémentationlibgav1précédente, pour une vitesse de décodage améliorée. - Extension FFmpeg : correction d'un problème qui empêchait la lecture de certains fichiers FLAC en s'assurant que le bloc
STREAMINFOest correctement analysé et transmis au décodeur (#2887).
- Extension AV1 : le décodeur logiciel AV1 utilise désormais la bibliothèque
- Extension Cast :
- Ajoutez
CastPlayer.Builder, qui permet àCastPlayerd'effectuer la lecture locale et Cast. Pour conserver l'ancien comportement deCastPlayer, qui n'accepte que la lecture Cast, vous pouvez utiliserRemoteCastPlayer. Les constructeursCastPlayerpréexistants conservent leur ancien comportement, mais sont obsolètes. Utilisez plutôt les compilateursCastPlayerouRemoteCastPlayer. - Arrêt de l'application d'un type MIME non nul dans
DefaultMediaItemConverter. - Utilisez
MediaItem.mediaMetadata.mediaTypepour déduire le MEDIA_TYPE Cast à utiliser dansDefaultCastOptionsProvider#toMediaQueueItem, lorsqu'il est disponible. - Activez les transferts à distance vers un emplacement local dans
DefaultCastOptionsProvider. - Ajoutez la compatibilité avec Cast dans la démo de la session.
- Ajout de la prise en charge de l'affichage d'un bouton de routage multimédia sur une UI Composable.
- Ajoutez la prise en charge de l'affichage d'un bouton de route multimédia dans un menu de la barre d'action.
- Ajout de la prise en charge de l'affichage d'un bouton de routage multimédia en tant qu'interface utilisateur de vue.
- Ajoutez
- Utilitaires de test :
- Ajoutez une différence de temps maximale pour le comportement d'avance automatique de
FakeClock. La valeur par défaut est de 1 seconde, mais elle est configurable viaFakeClock.Builder. - Ajout d'une différence de temps maximale entre les messages pour
RobolectricUtil.runMainLooperUntil(etrunLooperUntil). La valeur par défaut est de 1 seconde, mais elle est configurable via de nouvelles surcharges de ces méthodes. - Transférer
CapturingRenderersFactoryde "test-utils" à "test-utils-robolectric".
- Ajoutez une différence de temps maximale pour le comportement d'avance automatique de
- Suppression des symboles obsolètes :
- Suppression du constructeur
DefaultPreloadManagerobsolète. UtilisezDefaultPreloadManager.Builderà la place. - Suppression des constructeurs
EditedMediaItemSequenceobsolètes. UtilisezEditedMediaItemSequence.Builderà la place. - Suppression de
BitmapFactoryImageDecoder.BitmapDecoder. UtilisezExternallyLoadedImageDecoderà la place. - Suppression de
ShadowMediaCodecConfig.forAllSupportedMimeTypes()obsolète. UtilisezShadowMediaCodecConfig.withAllDefaultSupportedCodecs()à la place. - Suppression de
ShadowMediaCodecConfig.withNoDefaultSupportedMimeTypes()obsolète. UtilisezShadowMediaCodecConfig.withNoDefaultSupportedCodecs()à la place.
- Suppression du constructeur
1.9.0-rc01
1er décembre 2025
Utilisez la version stable 1.9.0.
1.9.0-beta01
20 novembre 2025
Utilisez la version stable 1.9.0.
1.9.0-alpha01
22 octobre 2025
Utilisez la version stable 1.9.0.
Version 1.8.0
1.8.1
21 mai 2026
La version 1.8.1 contient les commits suivants.
- Effet :
- Définissez explicitement
GL_DRAW_BUFFERetGL_READ_BUFFERlors de la transition depuis un contexte sans surface.
- Définissez explicitement
Version 1.8.0
30 juillet 2025
Liste des commits de la version 1.8.0
- Bibliothèque commune :
- Ajout de la prise en charge du remplacement du lecteur dans
ForwardingSimpleBasePlayer.
- Ajout de la prise en charge du remplacement du lecteur dans
- ExoPlayer :
- Ajout d'un getter pour le mode aléatoire à l'interface
ExoPlayer(#2522). - Générer plus clairement une exception si l'accès à
DefaultAudioSinkest effectué à partir de plusieurs threads. Si cela se produit en raison d'un appel àRendererCapabilities.getFormatSupporten dehors du lecteur, veillez à appeler cette méthode sur le même thread que le thread de lecture d'ExoPlayer ou à utiliser une instance différente de celle utilisée pour la lecture (#1191). - Correction d'un bug qui pouvait entraîner le marquage des formats audio non stéréo sur les téléviseurs comme non compatibles par
DefaultTrackSelector. - Assurez-vous que la dernière image est correctement affichée lorsque vous utilisez l'indicateur
DECODE_ONLYde MediaCodec (activé par défaut en mode de défilement). - Ajout de la compatibilité avec l'ID de l'appareil virtuel à partir de
Contexttransmis àExoPlayer.Builder. - Activez la programmation dynamique par défaut en mode de nettoyage.
- Évitez de recharger inutilement une source lorsque vous recherchez la fin d'un élément.
- Utilisez
MediaCodec.BUFFER_FLAG_DECODE_ONLYpar défaut en mode de nettoyage. - Génération d'une exception
IllegalStateExceptionlorsquePreloadMediaSourceest lu par unExoPlayeravec un thread de lecture différent du thread de préchargement (#2495). - Ajout de
cloneAndMoveàShuffleModeavec une implémentation par défaut (#2226). - Modification du comportement par défaut de
Renderer.getMinDurationToProgressUspour renvoyer une valeur plus élevée si aucun appel àrendern'est requis. - Correction d'un bug qui entraînait un retard de la dernière image lors de la recherche de la fin d'une vidéo en pause en raison de la planification interne. Pour l'instant, la correction de bug ne prend effet que si
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledest activé. - Ajoutez la méthode
ExoPlayer.setScrubbingModeEnabled(boolean). Cela optimise le lecteur pour de nombreuses recherches fréquentes (par exemple, lorsqu'un utilisateur fait glisser une barre de défilement). Le comportement du mode de défilement peut être personnalisé avecsetScrubbingModeParameters(..)surExoPlayeretExoPlayer.Builder. - Autoriser la personnalisation de la tolérance de recherche fractionnelle en mode de balayage.
- Augmentation du taux de fonctionnement du codec en mode de nettoyage.
- Correction d'un bug qui empêchait parfois de signaler les erreurs de préparation dans le contenu de
AdsMediaSource(#2337). - Correction d'une fuite de mémoire dans
MergingMediaSource, par exemple lors du téléchargement indépendant des sous-titres (#2338). - Autorisation de
CmcdConfiguration.Factoryà renvoyernullpour désactiver la journalisation CMCD pour des éléments multimédias spécifiques (#2386). - Augmentation de la taille de la mémoire tampon d'image par défaut de 128 ko (erreur de copier-coller des pistes de texte) à 26 Mo, ce qui est suffisant pour les images Ultra HDR de 50 Mpx (#2417).
- Ajout de
PreCacheHelper, qui permet aux applications de pré-mettre en cache un seul contenu multimédia avec une position de départ et une durée spécifiées. - Ajout de la prise en charge du préchargement à partir d'une position spécifiée dans
DefaultPreloadManager.
- Ajout d'un getter pour le mode aléatoire à l'interface
- Transformateur :
- Ajout de
CodecDbLite, qui permet d'optimiser les paramètres d'encodage vidéo en fonction du chipset. - Ajoutez l'option
setEnableCodecDbLiteàDefaultEncoderFactorypour activer l'optimisation des paramètres CodecDB Lite. Par défaut, cette option est définie sur "false". - Pour combler un écart initial (ajouté via
addGap()) avec un son silencieux, vous devez désormais définir explicitementexperimentalSetForceAudioTrack(true)dansEditedMediaItemSequence.Builder. Si l'écart se trouve au milieu de la séquence, cette option n'est pas requise. - Déplacez l'interface
Muxerdemedia3-transformerversmedia3-muxer. - Rendre le paramètre
MediaItem.Builder().setImageDuration(long)obligatoire pour importer un élément multimédia en tant qu'image. - Ajoutez
Transformer.Builder().experimentalSetMp4EditListTrimEnabled(boolean), qui inclut une liste de montage MP4 lors du découpage, pour indiquer aux lecteurs d'ignorer les échantillons entre l'image clé avant le point de départ du découpage et le point de départ du découpage. - Mettez à jour l'application Composition Demo pour utiliser Kotlin et Jetpack Compose, et ajoutez un
VideoCompositorSettingspersonnalisé pour organiser les séquences dans une mise en page 2x2 ou PiP.
- Ajout de
- Extracteurs :
- Analyse des métadonnées à partir de fichiers MP4 fragmentés (#2084).
- JPEG : prise en charge des photos animées qui n'ont pas de segment Exif au début (#2552).
- Ajout de la prise en charge de la recherche dans les fichiers MP4 fragmentés avec plusieurs atomes
sidx. Ce comportement peut être activé à l'aide de l'optionFLAG_MERGE_FRAGMENTED_SIDXsurFragmentedMp4Extractor(#9373). - Ignorer les tables de recherche vides dans les fichiers FLAC (y compris celles ne contenant que des points de recherche d'espace réservé) et revenir à la recherche binaire si la durée du fichier est connue (#2327).
- Correction de l'analyse des unités SEI H.265 pour ignorer complètement les types SEI non reconnus (#2456).
- Mettez à jour
WavExtractorpour utiliser les données SubFormat de l'extension d'en-tête pour le format audio lors de l'analyse d'un fichier de typeWAVE_FORMAT_EXTENSIBLE. - MP4 : ajout de la compatibilité avec les boîtes
ipcmetfpcmdéfinissant des pistes audio PCM brutes (le PCM à virgule flottante 64 bits n'est pas compatible). - MP4 : gère la partie rotation des matrices de transformation
tkhdqui font pivoter et reflètent la vidéo. Cela permet de s'assurer que les vidéos en miroir prises par la caméra avant de l'iPhone s'affichent dans le bon sens, mais avec un reflet incorrect sur l'axe Y (#2012). - MP3 : utilisation de la durée et de la taille des données à partir de métadonnées de débit variable Xing, VBRI et similaires non recherchables lors du retour à la recherche de débit constant en raison de
FLAG_ENABLE_CONSTANT_BITRATE_SEEKING(_ALWAYS)(#2194).
- Audio :
- Correction d'un bug qui empêchait l'appel de
AnalyticsListener.onAudioPositionAdvancinglorsque la lecture audio démarrait très près de la fin du contenu multimédia. - Ajout de la compatibilité avec tous les formats d'échantillons PCM linéaires dans
ChannelMappingAudioProcessoretTrimmingAudioProcessor. - Ajout de la prise en charge des interruptions audio dans
CompositionPlayer. - Suppression de l'appel parasite à
BaseAudioProcessor#flush()deBaseAudioProcessor#reset(). - Autoriser le mixage ascendant/descendant de puissance constante dans DefaultAudioMixer.
- Rendre
ChannelMappingAudioProcessor,TrimmingAudioProcessoretToFloatPcmAudioProcessorpublics (#2339). - Utilisez
AudioTrack#getUnderrunCount()dansAudioTrackPositionTrackerpour détecter les sous-exécutions dansDefaultAudioSinkau lieu d'une estimation au mieux. - Amélioration du lissage du code temporel audio pour les dérives de position inattendues du périphérique de sortie audio.
- Correction d'un bug qui interrompait la synchronisation audio/vidéo pendant les 10 premières secondes après la reprise de la lecture lorsque l'appareil était connecté à des appareils Bluetooth.
- Correction d'un bug qui empêchait
AnalyticsListener.onAudioPositionAdvancingde signaler l'heure à laquelle l'audio a commencé à avancer, mais l'heure de la première mesure. - Correction de la récupération de l'audio multicanal après le passage à l'audio stéréo sur certains appareils (#2258).
- Correction d'un bug qui empêchait l'appel de
- Vidéo :
- Extension de la solution de contournement pour les surfaces détachées aux appareils Lenovo et Motorola (#2059).
- Amélioration de la fluidité de la diffusion des images vidéo au démarrage lorsque les échantillons audio ne commencent pas exactement à la position demandée.
- Extension de la solution de contournement de la surface détachée aux appareils "realme" (#2059).
- Ajout de l'API expérimentale
ExoPlayerpour inclure l'indicateurMediaCodec.BUFFER_FLAG_DECODE_ONLYlors de la mise en file d'attente des tampons d'entrée de décodage uniquement. Cette option indique au décodeur d'ignorer les tampons de décodage uniquement, ce qui accélère la recherche. Activez-le avecDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. * Amélioration des vérifications des performances des codecs vidéo logiciels. Cela peut entraîner le marquage de pistes supplémentaires commeEXCEEDS_CAPABILITIES. - Correction des erreurs de lecture VP9 Widevine sur certains appareils (#2408).
- Texte :
- Ajout de la prise en charge des pistes VobSub dans les fichiers MP4 (#2510).
- Correction d'un blocage de la lecture lorsqu'un segment de sous-titre ne se charge pas initialement, puis se charge correctement, suivi de plusieurs segments de sous-titres vides (#2517).
- Correction de SSA et SubRip pour afficher un cue en cours lors de l'activation des sous-titres (#2309).
- Correction du blocage de la lecture lors du passage d'un flux avec une erreur de sous-titre à un flux en direct avec une piste de sous-titres vide (#2328).
- Correction des sous-titres CEA-608 déformés lors de la lecture de flux H.262 contenant des images B (#2372).
- Ajout de la compatibilité avec les sous-titres SSA avec
CodecId = S_TEXT/SSAdans les fichiers Matroska. Auparavant,MatroskaExtractorn'était compatible qu'avecCodecId = S_TEXT/ASS, qui est censé représenter la variante "avancée" (v4+) des sous-titres SubStation Alpha (mais la logique d'analyse d'ExoPlayer est la même pour les deux variantes) (#2384). - Ajout de la prise en charge de la propriété
layerdans les fichiers de sous-titres SubStation Alpha (SSA), qui permet de définir l'ordre Z des cues lorsque plusieurs d'entre eux sont affichés à l'écran en même temps (#2124).
- Métadonnées :
- Ajout de la prise en charge de la récupération de la durée des contenus multimédias et de
TimelinedansMetadataRetriever, et migration vers une APIAutoCloseablebasée sur des instances. Utilisez le nouveauBuilderpour créer une instance pour unMediaItem, puis appelezretrieveTrackGroups(),retrieveTimeline()etretrieveDurationUs()pour obtenir desListenableFuturepour les métadonnées. Les anciennes méthodes statiques sont désormais obsolètes (#2462).
- Ajout de la prise en charge de la récupération de la durée des contenus multimédias et de
- Image :
- Limitez les bitmaps décodés à la taille d'affichage dans
BitmapFactoryImageDecoderpour éviter qu'une application ne plante avecCanvas: trying to draw too large bitmap.dePlayerViewlorsque vous essayez d'afficher des images très volumineuses (par exemple, 50 Mpx). - Modifiez la signature de
DefaultRenderersFactory.getImageDecoderFactory()pour qu'elle accepte un paramètreContext. - Alignez la taille de sortie maximale du bitmap utilisée dans
CompositionPlayersur celle déjà utilisée dansTransformer(ce qui signifie queCompositionPlayerne tient pas compte de la taille d'affichage lors du décodage des bitmaps, contrairement àExoPlayer).
- Limitez les bitmaps décodés à la taille d'affichage dans
- DRM :
- Ajout d'une nouvelle surcharge de
OfflineLicenseHelper.newWidevineInstanceacceptant unMediaItem.DrmConfigurationafin que les en-têtes de requête HTTP puissent être appliqués correctement (#2169).
- Ajout d'une nouvelle surcharge de
- Effet :
- Ajout de
Presentation.createForShortSide(int), qui crée unPresentationgarantissant que le côté le plus court correspond toujours à la valeur donnée, quelle que soit l'orientation de l'entrée.
- Ajout de
- Multiplexeurs :
- Correction d'un bug qui empêchait de définir les bons indicateurs d'échantillon pour les échantillons audio dans les fichiers MP4 fragmentés.
- L'API
writeSampleData()utilise désormais la classeBufferInfospécifique au multiplexeur au lieu deMediaCodec.BufferInfo. - Ajoutez
Muxer.Factory#supportsWritingNegativeTimestampsInEditList, qui est défini sur "false" par défaut.
- Extension IMA :
- Correction d'un bug qui provoquait l'invalidation accidentelle d'un autre groupe d'annonces en cas d'erreur de chargement dans une annonce.
- Correction d'un bug qui bloquait la lecture des groupes d'annonces après la fin d'une fenêtre de VOD.
Les groupes d'annonces dont l'heure de début est postérieure à la fenêtre ne sont plus mis en file d'attente dans
MediaPeriodQueue(#2215).
- Session :
- Correction d'un bug à cause duquel les connexions de contrôleurs Media3 tiers non privilégiés sont ignorées.
- Suppression de la vérification des commandes disponibles lors de l'envoi de commandes personnalisées à un
MediaBrowserServiceCompatancien. Cela correspond au comportement des anciens contrôleurs/navigateurs lorsqu'ils sont connectés à une ancienne application. - Correction d'un bug qui entraînait le traitement incorrect de la première erreur de lecture d'un lecteur en tant qu'exception personnalisée persistante. Cela empêche l'application de récupérer.
- Correction d'un bug qui entraînait l'affichage de
IllegalStateExceptionslorsque certaines modifications du contrôleur n'étaient pas gérées par la session. - Correction d'un bug qui pouvait laisser le contrôleur dans un état non valide lorsque des actions du contrôleur n'étaient pas gérées par la session.
- Correction de l'avertissement de non-respect du lancement non sécurisé de StrictMode (#2330).
- Correction d'un bug qui provoquait une
IllegalStateExceptionlors de l'appel desetSessionExtrasdepuis le thread principal lorsque le lecteur était exécuté à partir d'un thread d'application différent du thread principal (#2265). - N'affiche pas automatiquement de notification si un lecteur est configuré avec des éléments multimédias sans les préparer ni les lire (#2423https://github.com/androidx/media/issues/2423). Ce comportement est configurable via
MediaSessionService.setShowNotificationForIdlePlayer. - Ajoutez des
PlaybackExceptionpersonnalisés pour tous les contrôleurs ou ceux sélectionnés. - Correction d'un bug où la recherche dans une diffusion en direct sur un
MediaControllerpouvait provoquer uneIllegalArgumentException. - Pour les diffusions en direct, arrêtez de publier une position de lecture et la possibilité de rechercher dans l'élément actuel pour les contrôleurs multimédias de la plate-forme, afin d'éviter les artefacts de position dans l'UI Android Auto (et d'autres contrôleurs utilisant ces informations de la session multimédia de la plate-forme) (#1758).
- Correction d'un bug qui entraînait la génération d'une
NullPointerExceptionlorsque la valeur null était transmise àgetLibraryRootd'unMediaBrowserconnecté à un ancienMediaBrowserServiceCompat. - Correction d'un bug qui provoquait le plantage de l'ancienne application de session avec une erreur
ClassNotFoundExceptionlors de l'envoi d'actions personnalisées, d'un résultat de recherche ou d'une requête getItem. - Correction d'un bug qui partageait
MediaItem.LocalConfiguration.uriavec leMediaMetadatade la session de la plate-forme. Pour partager intentionnellement un URI afin de permettre aux contrôleurs de demander à nouveau le contenu multimédia, définissez plutôtMediaItem.RequestMetadata.mediaUri.
- Interface utilisateur :
- Correction d'un bug qui empêchait
PlayerSurfacede fonctionner correctement dans les composants réutilisables tels queLazyColumn(#2493). - Correction d'un bug Compose qui entraînait un écart entre la définition des états initiaux des boutons et l'observation du changement d'état (par exemple, la forme des icônes ou l'activation). Toutes les modifications apportées au lecteur en dehors de la période d'observation sont désormais prises en compte (#2313).
- Ajoutez des conteneurs d'état et des composables au module
media3-ui-composepourSeekBackButtonStateetSeekForwardButtonState. - Ajout de la prise en charge du mode de défilement d'ExoPlayer à
PlayerControlView. Lorsque cette option est activée, le lecteur passe en mode de défilement lorsque l'utilisateur commence à faire glisser la barre de défilement, émet un appelplayer.seekTopour chaque mouvement, puis quitte le mode de défilement lorsque l'utilisateur lève le doigt de l'écran. Cette intégration peut être activée avectime_bar_scrubbing_enabled = trueen XML ou la méthodesetTimeBarScrubbingEnabled(boolean)en Java/Kotlin. - Faites en sorte que
PlayerSurfaceaccepte un argumentPlayernullable.
- Correction d'un bug qui empêchait
- Téléchargements :
- Ajout de la prise en charge du téléchargement partiel pour les flux progressifs. Les applications peuvent préparer un flux progressif avec
DownloadHelperet demander unDownloadRequestà l'outil d'aide en spécifiant les positions de début et de fin du contenu multimédia temporel que le téléchargement doit couvrir. L'élémentDownloadRequestrenvoyé contient la plage d'octets résolue, avec laquelle un élémentProgressiveDownloaderpeut être créé et télécharger le contenu en conséquence. - Ajoutez
DownloadHelper.Factory, par lequel les méthodesDownloadHelper.forMediaItem()statiques sont remplacées. - Ajout de
Factorypour les implémentations deSegmentDownloader. - Ajout de la prise en charge du téléchargement partiel pour les flux adaptatifs. Les applications peuvent préparer un flux adaptatif avec
DownloadHelperet demander unDownloadRequestà l'assistant en spécifiant les positions de début et de fin du contenu multimédia temporel que le téléchargement doit couvrir. L'élémentDownloadRequestrenvoyé contient la période résolue, avec laquelle unSegmentDownloaderconcret peut être créé et télécharger le contenu en conséquence.
- Ajout de la prise en charge du téléchargement partiel pour les flux progressifs. Les applications peuvent préparer un flux progressif avec
- Extension Cronet :
- Ajout de la gestion automatique des cookies (#5975).
- Extension HLS :
- Correction d'un bug où
HlsSampleStreamWrappertente de rechercher dans le tampon lorsqu'aucun fragment n'est disponible dans le tampon #2598. - Correction d'un bug qui entraînait le blocage ou le gel de la lecture lorsque la sélection de pistes changeait après le chargement de parties à faible latence et d'indices de préchargement (#2299).
- Empêche les actualisations excessives en attendant la moitié de la durée cible lorsque
CAN-BLOCK-RELOAD=YESn'est pas respecté par le serveur (#2317). - Correction d'un bug qui bloquait la lecture lors du démarrage d'un flux d'interstitiels avant une annonce mid-roll et de la tentative de résolution de la liste d'assets pour la mauvaise annonce (#2558).
- Correction de l'analyse des playlists pour accepter
\f(saut de page) dans les valeurs d'attribut de chaîne entre guillemets (#2420). - Prise en charge de la mise à jour des interstitiels avec le même ID (#2427).
- Correction d'un bug qui empêche parfois la propagation des erreurs de chargement de playlist lorsqu'une diffusion en direct n'a plus de segments à charger (#2401https://github.com/androidx/media/issues/2401).
- Regroupement des rendus de sous-titres par balise NAME, de la même manière que les rendus audio sont déjà regroupés (#1666).
- Compatibilité avec X-ASSET-LIST et les diffusions en direct avec
HlsInterstitialsAdsLoader.
- Correction d'un bug où
- Extension DASH :
- Correction d'un problème qui entraînait la fusion de l'ensemble d'adaptation de lecture accélérée avec son ensemble d'adaptation principal pour former un
TrackGroupnon valide (#2148). - Correction d'un bug qui pouvait générer une exception lorsque la durée d'une période DASH était raccourcie et que des échantillons au-delà de la nouvelle durée avaient déjà été lus par le pipeline de rendu (#2440).
- Correction d'un bug qui empêchait de suivre la redirection lors de l'utilisation de paramètres de requête CMCD (#2475).
- Correction d'un problème qui entraînait la fusion de l'ensemble d'adaptation de lecture accélérée avec son ensemble d'adaptation principal pour former un
- Extension RTSP :
- Ajout de la compatibilité avec le paquet d'agrégation RTP pour H265 conformément à la norme RFC 7798#4.4.2 (#2413).
- Correction de
RtspClientpour utiliser l'URI d'emplacement fourni lors du traitement d'une réponse HTTP 302 (#2398). - Ajout de la compatibilité avec l'analyse des SessionDescriptions contenant des lignes avec des espaces de fin (#2357).
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Correction d'un bug où
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangen'avait aucun effet sur les extensions de décodeur audio (#2258).
- Correction d'un bug où
- Extension Cast :
- Utilitaires de test :
- Ajout de
advance(player).untilPositionAtLeastetuntilMediaItemIndexàTestPlayerRunHelperpour faire avancer le lecteur jusqu'à ce qu'une position spécifiée soit atteinte. Dans la plupart des cas, ces méthodes sont plus fiables que les méthodesuntilPositionetuntilStartOfMediaItemexistantes. - Déplacez
FakeDownloadervers le moduletest-utils-robolectricpour le réutiliser dans d'autres tests. transformer.TestUtil.addAudioDecoders(String...),transformer.TestUtil.addAudioEncoders(String...)ettransformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...)supprimés. Utilisez plutôtShadowMediaCodecConfigpour configurer les encodeurs et décodeurs fantômes.- Remplacement du préfixe "exotest" par "media3" dans les noms de codecs signalés par
ShadowMediaCodecConfig.
- Ajout de
- Suppression des symboles obsolètes :
- Suppression du constructeur
SegmentDownloaderobsolèteSegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor)et des constructeurs correspondants dans ses sous-classesDashDownloader,HlsDownloaderetSsDownloader. - Suppression des éléments obsolètes
Player.hasNext()etPlayer.hasNextWindow(). Utilisez plutôtPlayer.hasNextMediaItem(). - Suppression de
Player.next()(obsolète). Utilisez plutôtPlayer.seekToNextMediaItem(). - Suppression de
Player.seekToPreviousWindow()(obsolète). UtilisezPlayer.seekToPreviousMediaItem()à la place. - Suppression de l'élément
Player.seekToNextWindow()obsolète. UtilisezPlayer.seekToNextMediaItem()à la place. - Suppression de
BaseAudioProcessor, désormais obsolète, dans le moduleexoplayer. UtilisezBaseAudioProcessorsous le modulecommon. - Suppression du constructeur
MediaCodecVideoRendererobsolèteMediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).
- Suppression du constructeur
Version 1.8.0-rc02
24 juillet 2025
Utilisez la version stable 1.8.0.
Version 1.8.0-rc01
16 juillet 2025
Utilisez la version stable 1.8.0.
Version 1.8.0-beta01
2 juillet 2025
Utilisez la version stable 1.8.0.
Version 1.8.0-alpha01
19 mai 2025
Utilisez la version stable 1.8.0.
Version 1.7.0
Version 1.7.1
16 mai 2025
Cette version comporte le même code que la version 1.6.1. Elle est publiée pour s'assurer qu'elle apparaît comme une version "plus récente" que la version 1.7.0, qui était une version alpha accidentellement taguée comme stable (voir ci-dessous).
Version 1.7.0
16 mai 2025
Cette version aurait dû être 1.7.0-alpha01, mais elle a été taguée par erreur comme 1.7.0 (c'est-à-dire stable) sur maven.google.com. Veuillez ne pas l'utiliser. Restez sur la version 1.6.1 ou passez à la version 1.7.1 (qui possède le même code que la version 1.6.1).
Version 1.6.0
1.6.1
14 avril 2025
Publication d'androidx.media3:media3-*:1.6.1. La version 1.6.1 contient ces commits.
- Bibliothèque commune :
- Ajout de la méthode
PlaybackParameters.withPitch(float)pour copier facilement unPlaybackParametersavec une nouvelle valeurpitch(#2257).
- Ajout de la méthode
- ExoPlayer :
- Correction d'un problème qui empêchait la transition d'un élément multimédia en raison d'une erreur de moteur de rendu récupérable lors de l'initialisation de l'élément multimédia suivant (#2229).
- Correction d'un problème où
ProgressiveMediaPeriodgénère une exceptionIllegalStateExceptionlorsquePreloadMediaSourcetente d'appeler songetBufferedDurationUs()avant qu'il ne soit préparé (#2315). - Correction de l'envoi de
CmcdDatadans les requêtes de fichier manifeste pour DASH, HLS et SmoothStreaming (#2253). - Assurez-vous que
AdPlaybackState.withAdDurationsUs(long[][])peut être utilisé après la suppression des groupes d'annonces. L'utilisateur doit toujours transmettre un tableau de durées pour les groupes d'annonces supprimés, qui peut être vide ou nul (#2267).
- Extracteurs :
- MP4 : Analyse
alternate_groupà partir du conteneurtkhdet l'expose en tant qu'entréeMp4AlternateGroupDatadans leFormat.metadatade chaque titre (#2242).
- MP4 : Analyse
- Audio :
- Correction d'un problème de déchargement où la position pouvait se bloquer lors de la lecture d'une playlist de contenus courts (#1920).
- Session :
- Réduction du délai d'agrégation pour les rappels de la plate-forme
MediaSessionde 500 à 100 millisecondes et ajout d'un setter expérimental pour permettre aux applications de configurer cette valeur. - Correction d'un problème qui entraînait la réapparition des notifications après leur fermeture par l'utilisateur (#2302).
- Correction d'un bug qui entraînait le renvoi par la session d'une chronologie à un seul élément lorsque le lecteur encapsulé était vide. Cela se produisait lorsque le lecteur encapsulé ne disposait pas de
COMMAND_GET_TIMELINE, alors queCOMMAND_GET_CURRENT_MEDIA_ITEMétait disponible et que le lecteur encapsulé était vide (#2320). - Correction d'un bug qui ignorait silencieusement l'appel de
MediaSessionService.setMediaNotificationProvideraprès d'autres interactions avec le service, commesetForegroundServiceTimeoutMs(#2305).
- Réduction du délai d'agrégation pour les rappels de la plate-forme
- Interface utilisateur :
- Activez
PlayerSurfacepour qu'il fonctionne avecExoPlayer.setVideoEffectsetCompositionPlayer. - Correction d'un bug qui empêchait la recomposition de
PlayerSurfaceavec un nouveauPlayer.
- Activez
- Extension HLS :
- Correction d'un problème qui empêchait la définition de la durée du fragment dans
CmcdDatapour les contenus multimédias HLS, ce qui entraînait un échec d'assertion lors du traitement des segments multimédias chiffrés (#2312).
- Correction d'un problème qui empêchait la définition de la durée du fragment dans
- Extension RTSP :
- Ajout de la compatibilité avec les URI avec le schéma RTSPT pour configurer la session RTSP afin d'utiliser TCP (#1484).
- Extension Cast :
- Ajout de la compatibilité avec les métadonnées de playlist (#2235).
1.6.0
26 mars 2025
Publication d'androidx.media3:media3-*:1.6.0. Liste des commits de la version 1.6.0
- Bibliothèque commune :
- Ajout de
AudioManagerCompatetAudioFocusRequestCompatpour remplacer les classes équivalentes dansandroidx.media. - Mettez à niveau Kotlin de la version 1.9.20 vers la version 2.0.20 et utilisez le plug-in Gradle du compilateur Compose. Mise à niveau de la bibliothèque KotlinX Coroutines de la version 1.8.1 vers la version 1.9.0.
- Suppression de la méthode
Format.toBundle(boolean excludeMetadata). UtilisezFormat.toBundle()à la place. - Correction d'un bug dans
SimpleBasePlayeroù la définition d'un nouveaucurrentMediaItemIndexdansStateaprèssetPlaylistavecnullMediaMetadatane réévaluait pas les métadonnées (#1940). - Modification de l'accès à
SimpleBasePlayer.Statede "protégé" à "public" pour faciliter la gestion des mises à jour dans d'autres classes (#2128).
- Ajout de
- ExoPlayer :
- Ajout de
MediaExtractorCompat, une nouvelle classe qui fournit des fonctionnalités équivalentes à la plate-formeMediaExtractor. - Ajout de la compatibilité expérimentale avec le préchauffage d 'ExoPlayer pour la lecture à l'aide de
MediaCodecVideoRenderer. Vous pouvez configurerDefaultRenderersFactoryviaexperimentalSetEnableMediaCodecVideoRendererPrewarmingpour fournir unMediaCodecVideoRenderersecondaire àExoPlayer. Si cette option est activée,ExoPlayerprétraite la vidéo des éléments multimédias consécutifs pendant la lecture afin de réduire la latence de transition des éléments multimédias. - Réduisez les valeurs par défaut de
bufferForPlaybackMsetbufferForPlaybackAfterRebufferMsdansDefaultLoadControlà 1 000 et 2 000 ms respectivement. - Initialisez
DeviceInfoet le volume de l'appareil de manière asynchrone (si l'option est activée à l'aide desetDeviceVolumeControlEnabled). Ces valeurs ne sont pas disponibles instantanément aprèsExoPlayer.Builder.build(), etPlayer.Listenernotifie les modifications viaonDeviceInfoChangedetonDeviceVolumeChanged. - L'ID de session audio initial n'est plus disponible immédiatement après la création du lecteur. Vous pouvez utiliser
AnalyticsListener.onAudioSessionIdChangedpour écouter la mise à jour initiale si nécessaire. - Tenez compte de la langue lorsque vous sélectionnez une piste vidéo. Par défaut, sélectionnez une piste vidéo "principale" correspondant à la langue de la piste audio sélectionnée, si elle est disponible. Les préférences de langue explicites pour les vidéos peuvent être exprimées avec
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Ajout du paramètre
selectedAudioLanguageà la méthodeDefaultTrackSelector.selectVideoTrack(). - Ajout du paramètre
retryCountàMediaSourceEventListener.onLoadStartedet aux méthodesMediaSourceEventListener.EventDispatchercorrespondantes. - Correction d'un bug qui pouvait figer l'image à la fin d'un élément de playlist ou d'une période dans les flux DASH multipériodes dont la durée ne correspondait pas au contenu réel (#1698).
- Déplacez
BasePreloadManager.Listenervers unPreloadManagerListenerde premier niveau. RenderersFactory.createSecondaryRendererpeut être implémenté pour fournir des moteurs de rendu secondaires pour le préchauffage. Le préchauffage permet d'accélérer les transitions entre les éléments multimédias pendant la lecture.- Activez l'envoi de
CmcdDatapour les requêtes de fichier manifeste dans les formats de streaming adaptatif DASH, HLS et SmoothStreaming (#1951). - Fournissez
MediaCodecInfodu codec qui sera initialisé dansMediaCodecRenderer.onReadyToInitializeCodec(#1963). - Modifiez
AdsMediaSourcepour permettre àAdPlaybackStatesde se développer en ajoutant des groupes d'annonces. Les modifications non valides sont détectées et génèrent une exception. - Correction d'un problème qui pouvait entraîner l'affichage de frames supplémentaires de décodage uniquement en succession rapide lors de la transition vers un contenu multimédia après une annonce mid-roll.
- Faites en sorte que
DefaultRenderersFactoryajoute deux instancesMetadataRendererpour permettre aux applications de recevoir deux schémas de métadonnées différents par défaut. - Réévaluer si le chargement en cours d'un fragment doit être annulé lorsque la lecture est mise en pause (#1785).
- Ajout d'une option à
ClippingMediaSourcepour autoriser le découpage dans les contenus multimédias non explorables. - Correction d'un bug qui empêchait la transition de l'élément multimédia suivant lors de la recherche avec préchauffage.
- Correction d'un bug qui faisait que
ExoPlayer.isLoading()restaittruealors qu'il était passé àSTATE_IDLEouSTATE_ENDED(#2133). - Ajout de
lastRebufferRealtimeMsàLoadControl.Parameter(#2113).
- Ajout de
- Transformateur :
- Ajout de la prise en charge du transmuxage dans d'autres formats rétrocompatibles.
- Ajout de la compatibilité avec le transcodage et le transmuxage du format Dolby Vision (profil 8).
- Mettez à jour les paramètres de
VideoFrameProcessor.registerInputStreametVideoFrameProcessor.Listener.onInputStreamRegisteredpour utiliserFormat. - Générez des métadonnées statiques HDR lorsque vous utilisez
DefaultEncoderFactory. - Activez la prise en charge des diagnostics de la plate-forme Android à l'aide de
MediaMetricsManager. Transformer transfère les événements de modification et les données sur les performances à la plate-forme, ce qui permet de fournir des informations sur les performances du système et les informations de 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 désactiver la contribution aux diagnostics de plate-forme pour Transformer avecTransformer.Builder.setUsePlatformDiagnostics(false). - Divisez
InAppMuxerenInAppMp4MuxeretInAppFragmentedMp4Muxer. Vous utilisezInAppMp4Muxerpour produire un fichier MP4 non fragmenté, tandis queInAppFragmentedMp4Muxersert à produire un fichier MP4 fragmenté. - Déplacez l'interface
Muxerdemedia3-muxerversmedia3-transformer. - Ajoutez
MediaProjectionAssetLoader, qui fournit des contenus multimédias à partir d'unMediaProjectionpour l'enregistrement d'écran, et ajoutez la prise en charge de l'enregistrement d'écran à l'application de démonstration Transformer. - Ajoutez
#getInputFormat()à l'interfaceCodec. - Transférez la responsabilité de la libération de
GlObjectsProviderà l'appelant dansDefaultVideoFrameProcessoretDefaultVideoCompositorlorsque cela est possible.
- Extracteurs :
- AVI : correction de la gestion des fichiers avec un débit binaire constant pour l'audio compressé, où l'en-tête du flux stocke le nombre d'octets au lieu du nombre de fragments.
- Correction de la gestion des unités NAL dont la longueur est exprimée en 1 ou 2 octets (au lieu de 4).
- Correction de
ArrayIndexOutOfBoundsExceptiondans les listes de modifications MP4 lorsque la liste de modifications commence par une image non synchronisée sans image de synchronisation précédente (#2062). - Correction d'un problème de blocage des flux TS sur certains appareils (#2069).
- FLAC : les fichiers FLAC 32 bits sont acceptés. Auparavant, la lecture de ces fichiers échouait avec
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio :
- Correction de
onAudioPositionAdvancingà appeler lorsque la lecture reprend (auparavant, il était appelé lorsque la lecture était mise en pause). - Ne contournez pas
SonicAudioProcessorlorsqueSpeedChangingAudioProcessorest configuré avec les paramètres par défaut. - Correction d'un dépassement de capacité négatif dans
Sonic#getOutputSize(), qui pouvait entraîner le blocage deDefaultAudioSink. - Corrigez
MediaCodecAudioRenderer.getDurationToProgressUs()etDecoderAudioRenderer.getDurationToProgressUs()afin que les recherches réinitialisent correctement les durées fournies. androidx.media3.common.audio.SonicAudioProcessordevient définitif.- Ajout de la prise en charge de la PCM flottante à
ChannelMappingAudioProcessoretTrimmingAudioProcessor.
- Correction de
- Vidéo :
- Modification de
MediaCodecVideoRenderer.shouldUsePlaceholderSurfaceen "protected" afin que les applications puissent remplacer l'utilisation des surfaces d'espace réservé (#1905). - Ajout de l'analyse expérimentale des dépendances d'échantillons AV1
ExoPlayerpour accélérer la recherche. Activez-la avec la nouvelle APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - Ajout de l'API expérimentale
ExoPlayerpour supprimer les tampons d'entrée du décodeurMediaCodecVideoRenderertardifs qui ne sont pas dépendants. Activez-le avecDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. * Correction d'un problème qui faisait qu'un lecteur sans surface était prêt immédiatement et décodait très lentement les images en attente (#1973). - Exclusion des appareils Xiaomi et OPPO du mode de surface dissociée pour éviter le scintillement de l'écran (#2059).
- Modification de
- Texte :
- Ajout de la prise en charge des sous-titres VobSub (#8260).
- Arrêt du chargement hâtif de tous les fichiers de sous-titres configurés avec
MediaItem.Builder.setSubtitleConfigurations, et chargement d'un seul fichier s'il est sélectionné par la sélection de pistes (#1721). - TTML : ajout de la prise en charge du référencement de
tts:originettts:extentà l'aide destyle(#2953). - Limitez les codes temporels WebVTT et SubRip à exactement trois décimales. Auparavant, nous analysions de manière incorrecte un nombre quelconque de décimales, mais nous supposions toujours que la valeur était en millisecondes, ce qui entraînait des codes temporels incorrects (#1997).
- Correction d'un problème de blocage de la lecture lorsqu'une playlist contient des éléments coupés avec des sous-titres CEA-608 ou CEA-708.
- Correction de
IllegalStateExceptionlorsqu'un fichier SSA contient un cue d'une durée nulle (heure de début et de fin identiques) (#2052). - Suppression (et journalisation) des erreurs d'analyse des sous-titres lorsque les sous-titres sont multiplexés dans le même conteneur que l'audio et la vidéo (#2052).
- Correction de la gestion des caractères UTF-8 multi-octets dans les fichiers WebVTT utilisant des fins de ligne CR (#2167).
- DRM :
- Correction de l'erreur
MediaCodec$CryptoException: Operation not supported in this configurationlors de la lecture de contenu ClearKey sur les appareils équipés d'une API < 27 (#1732).
- Correction de l'erreur
- Effet :
- La fonctionnalité de
OverlaySettingsa été déplacée versStaticOverlaySettings.OverlaySettingspeut être sous-classé pour permettre des paramètres de superposition dynamiques.
- La fonctionnalité de
- Multiplexeurs :
- Déplacement de
MuxerExceptionhors de l'interfaceMuxerpour éviter un nom complet très long. - La méthode
setSampleCopyEnabled()a été renomméesetSampleCopyingEnabled()dansMp4Muxer.BuilderetFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()etFragmentedMp4Muxer.addTrack()renvoient désormais un ID de pisteintau lieu d'unTrackToken.Mp4MuxeretFragmentedMp4Muxern'implémentent plus l'interfaceMuxer.- Désactivez par défaut le traitement par lot et la copie des exemples
Mp4Muxer. - Correction d'un bug dans
FragmentedMp4Muxerqui crée de nombreux fragments lorsque seule la piste audio est écrite.
- Déplacement de
- Session :
- Conserve l'état du service de premier plan pendant 10 minutes supplémentaires lorsque la lecture est mise en pause, arrêtée ou échoue. Cela permet aux utilisateurs de reprendre la lecture dans ce délai sans risquer de subir des restrictions de service de premier plan sur différents appareils. Notez que l'appel de
player.pause()ne peut plus être utilisé pour arrêter le service de premier plan avantstopSelf()lorsque vous remplacezonTaskRemoved. Utilisez plutôtMediaSessionService.pauseAllPlayersAndStopSelf(). - Conservez la notification visible lorsque la lecture passe à l'état d'erreur ou d'arrêt. La notification n'est supprimée que si la playlist est effacée ou si le lecteur est libéré.
- Amélioration de la gestion des actions MediaSession de la plate-forme Android ACTION_PLAY et ACTION_PAUSE pour ne définir qu'une seule d'entre elles en fonction des commandes disponibles et accepter également si une seule d'entre elles est définie.
- Ajout de
Contexten tant que paramètre àMediaButtonReceiver.shouldStartForegroundService(#1887). - Correction d'un bug qui entraînait l'abandon des modifications d'une mise à jour en attente lors de l'appel d'une méthode
Playersur unMediaControllerconnecté à une ancienne session. - Autorisation de la valeur nulle pour
MediaSession.setSessionActivity(PendingIntent)(#2109). - Correction d'un bug qui faisait qu'une notification obsolète restait visible lorsque la playlist était effacée (#2211).
- Conserve l'état du service de premier plan pendant 10 minutes supplémentaires lorsque la lecture est mise en pause, arrêtée ou échoue. Cela permet aux utilisateurs de reprendre la lecture dans ce délai sans risquer de subir des restrictions de service de premier plan sur différents appareils. Notez que l'appel de
- Interface utilisateur :
- Ajoutez des conteneurs d'état et des composables au module
media3-ui-composepourPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateetPlaybackSpeedState.
- Ajoutez des conteneurs d'état et des composables au module
- Téléchargements :
- Correction du bug dans
CacheWriterqui laisse les sources de données ouvertes et les zones de cache verrouillées si la source de données génère uneExceptionautre queIOException(#9760).
- Correction du bug dans
- Extension HLS :
- Ajoutez une première version de
HlsInterstitialsAdsLoader. Le chargeur d'annonces lit les interstitiels HLS d'une playlist multimédia HLS et les mappe sur leAdPlaybackStatetransmis àAdsMediaSource. Cette version initiale n'est compatible qu'avec les flux VOD HLS dotés d'attributsX-ASSET-URI. - Ajout de
HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Les applications peuvent l'utiliser pour créer des instancesAdsMediaSourcequi utilisent unHlsInterstitialsAdsLoaderde manière pratique et sécurisée. - Analyse la balise
SUPPLEMENTAL-CODECSde la playlist HLS pour détecter les formats Dolby Vision (#1785). - Assouplissement de la condition de recherche pour synchroniser les positions dans un flux HLS (#2209).
- Ajoutez une première version de
- Extension DASH :
- Ajout de la prise en charge du format AC-4 Level-4 pour DASH (#1898).
- Correction d'un problème lors du calcul de l'intervalle de mise à jour pour l'insertion d'annonces dans les flux en direct multipériodes (#1698).
- Analyse de l'attribut
scte214:supplementalCodecsà partir du fichier manifeste DASH pour détecter les formats Dolby Vision (#1785). - Amélioration de la gestion des transitions de période dans les diffusions en direct où la période contient des échantillons multimédias au-delà de la durée de période déclarée (#1698).
- Correction d'un problème où les ensembles d'adaptation marqués avec
adaptation-set-switching, mais avec des langues ou des indicateurs de rôle différents, sont fusionnés (#2222).
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Ajout du module de décodeur MPEG-H qui utilise le décodeur MPEG-H intégré pour décoder l'audio MPEG-H (#1826).
- Extension MIDI :
- Intégrez des instances
AudioSinketAudioRendererEventListenerpersonnalisées dansMidiRenderer.
- Intégrez des instances
- Extension Cast :
- Mise à jour de la dépendance
play-services-cast-frameworkvers la version 21.5.0 pour corriger un plantage deFLAG_MUTABLEdans les applications ciblant l'API 34 ou une version ultérieure sur les appareils sur lesquels les services Google Play sont installés, mais désactivés (#2178).
- Mise à jour de la dépendance
- Application de démonstration :
- Étendez
demo-composeavec des boutons supplémentaires et améliorez l'intégration dePlayerSurfaceavec la prise en charge du zoom et de l'obturateur.
- Étendez
- Suppression des symboles obsolètes :
- Suppression de la méthode
AudioMixer.create()obsolète. UtilisezDefaultAudioMixer.Factory().create()à la place. - Suppression des méthodes
Transformer.Builderobsolètes suivantes :setTransformationRequest(), utilisez plutôtsetAudioMimeType(),setVideoMimeType()etsetHdrMode().setAudioProcessors(), définissez le processeur audio dans unEditedMediaItem.Builder.setEffects()et transmettez-le àTransformer.start()à la place.setVideoEffects(), définissez l'effet vidéo dans unEditedMediaItem.Builder.setEffects()et transmettez-le àTransformer.start()à la place.setRemoveAudio(), utilisez plutôtEditedMediaItem.Builder.setRemoveAudio()pour supprimer l'audio duEditedMediaItemtransmis àTransformer.start().setRemoveVideo(), utilisez plutôtEditedMediaItem.Builder.setRemoveVideo()pour supprimer la vidéo de l'élémentEditedMediaItemtransmis àTransformer.start().setFlattenForSlowMotion(), utilisez plutôtEditedMediaItem.Builder.setFlattenForSlowMotion()pour aplatir leEditedMediaItemtransmis àTransformer.start().setListener(), utilisez plutôtaddListener(),removeListener()ouremoveAllListeners().
- Suppression des méthodes
Transformer.Listenerobsolètes suivantes :onTransformationCompleted(MediaItem), utilisez plutôtonCompleted(Composition, ExportResult).onTransformationCompleted(MediaItem, TransformationResult), utilisez plutôtonCompleted(Composition, ExportResult).onTransformationError(MediaItem, Exception), utilisez plutôtonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationException), utilisez plutôtonError(Composition, ExportResult, ExportException).onTransformationError(MediaItem, TransformationResult, TransformationException), utilisez plutôtonError(Composition, ExportResult, ExportException).onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), utilisez plutôtonFallbackApplied(Composition, TransformationRequest, TransformationRequest).
- Suppression de la classe
TransformationResultobsolète. Utilisez plutôtExportResult. - Suppression de la classe
TransformationExceptionobsolète. Utilisez plutôtExportException. - Suppression de
Transformer.PROGRESS_STATE_NO_TRANSFORMATIONobsolète. UtilisezTransformer.PROGRESS_STATE_NOT_STARTEDà la place. - Suppression de
Transformer.setListener()obsolète. Utilisez plutôtTransformer.addListener(),Transformer.removeListener()ouTransformer.removeAllListeners(). - Suppression de
Transformer.startTransformation()obsolète. UtilisezTransformer.start(MediaItem, String)à la place. - Suppression de
SingleFrameGlShaderProgramobsolète. UtilisezBaseGlShaderProgramà la place. - Suppression de
Transformer.flattenForSlowMotion. UtilisezEditedMediaItem.flattenForSlowMotionà la place. ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentetExoPlayer.DeviceComponentsupprimés.- Suppression de
androidx.media3.exoplayer.audio.SonicAudioProcessor. - Suppression des méthodes
DownloadHelperobsolètes suivantes :- Constructeur
DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), utilisez plutôtDownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList). getRendererCapabilities(RenderersFactory), une fonctionnalité équivalente peut être obtenue en créant unDefaultRendererCapabilitiesListavec unRenderersFactoryet en appelantDefaultRendererCapabilitiesList.getRendererCapabilities().- Suppression de la méthode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). Utilisez plutôtPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)et transmettez(MediaSession.Token) compatToken.getToken().
- Constructeur
- Suppression de la méthode
1.6.0-rc02
19 mars 2025
Utilisez la version stable 1.6.0.
1.6.0-rc01
12 mars 2025
Utilisez la version stable 1.6.0.
1.6.0-beta01
26 février 2025
Utilisez la version stable 1.6.0.
Version 1.6.0-alpha03
6 février 2025
Utilisez la version stable 1.6.0.
Version 1.6.0-alpha02
30 janvier 2025
Utilisez la version stable 1.6.0.
Version 1.6.0-alpha01
20 décembre 2024
Utilisez la version stable 1.6.0.
Version 1.5
Version 1.5.1
19 décembre 2024
Publication d'androidx.media3:media3-*:1.5.1. La version 1.5.1 contient ces commits.
- ExoPlayer :
- Désactivation de l'utilisation du déchiffrement asynchrone dans MediaCodec pour éviter les problèmes de délai avant expiration du codec signalés avec cette API de plate-forme (#1641).
- Extracteurs :
- MP3 : ne pas arrêter la lecture prématurément lorsque la table des matières d'un frame
VBRIne couvre pas toutes les données MP3 d'un fichier (#1904).
- MP3 : ne pas arrêter la lecture prématurément lorsque la table des matières d'un frame
- Vidéo :
- Annulation de l'utilisation des valeurs de proportions de pixels fournies par
MediaCodecAdapterlorsqu'elles sont fournies lors du traitement deonOutputFormatChanged(#1371).
- Annulation de l'utilisation des valeurs de proportions de pixels fournies par
- Texte :
- Correction d'un bug dans
ReplacingCuesResolver.discardCuesBeforeTimeUsoù le cue actif àtimeUs(commencé avant, mais pas encore terminé) était incorrectement supprimé (#1939).
- Correction d'un bug dans
- Métadonnées :
- Extraction de la numérotation des disques/pistes et du genre à partir des commentaires Vorbis dans
MediaMetadata(#1958).
- Extraction de la numérotation des disques/pistes et du genre à partir des commentaires Vorbis dans
Version 1.5.0
27 novembre 2024
Publication d'androidx.media3:media3-*:1.5.0. La version 1.5.0 contient ces commits.
- Bibliothèque commune :
- Ajout de
ForwardingSimpleBasePlayer, qui permet de transférer vers un autre lecteur avec de petits ajustements, tout en assurant une cohérence totale et la gestion des écouteurs (#1183). - Remplacez la méthode
SimpleBasePlayer.State.playlistpargetPlaylist(). - Ajout d'un remplacement pour
SimpleBasePlayer.State.Builder.setPlaylist()afin de spécifier directement unTimeline, ainsi que lesTracksetMetadataactuels, au lieu de créer une structure de playlist. - Augmentez
minSdkà 21 (Android Lollipop). Cela est conforme à toutes les autres bibliothèques AndroidX. - Ajout de l'artefact
androidx.media3:media3-common-ktx, qui fournit des fonctionnalités spécifiques à Kotlin basées sur la bibliothèque Common - Ajout de la fonction d'extension de suspension
Player.listenpour lancer une coroutine afin d'écouterPlayer.Eventsdans la bibliothèquemedia3-common-ktx. - Suppression des annotations
@DoNotInlinedes classes internes manuellement hors ligne conçues pour éviter les échecs de validation des classes d'exécution. Les versions récentes de R8 effectuent désormais automatiquement des appels hors ligne comme ceux-ci pour éviter les échecs d'exécution (la mise hors ligne manuelle n'est donc plus nécessaire). Tous les utilisateurs Gradle de la bibliothèque doivent déjà utiliser une version du plug-in Android Gradle qui utilise une version de R8 qui effectue cette opération, en raison decompileSdk = 35. Les utilisateurs de la bibliothèque avec des systèmes de compilation non Gradle devront s'assurer que leur étape de réduction/d'obscurcissement équivalente à R8 effectue un processus d'outlining automatique similaire afin d'éviter les échecs de validation de classe d'exécution. Cette modification a déjà été effectuée dans d'autres bibliothèques AndroidX.
- Ajout de
- ExoPlayer :
MediaCodecRenderer.onProcessedStreamChange()peut désormais être appelé pour chaque élément multimédia. Auparavant, elle n'était pas appelée pour la première valeur. Pour l'activer, utilisezMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart().- Ajout de
PreloadMediaSource.PreloadControl.onPreloadErrorpour permettre aux implémentationsPreloadMediaSource.PreloadControld'effectuer des actions lorsqu'une erreur se produit. - Ajoutez
BasePreloadManager.Listenerpour propager les événements de préchargement aux applications. - Autorisation de modifier le délai avant expiration du client SNTP et de réessayer les adresses alternatives en cas de délai avant expiration (#1540).
- Supprimez
MediaCodecAdapter.Configuration.flags, car le champ était toujours égal à zéro. - Autorisez l'utilisateur à sélectionner le haut-parleur intégré pour la lecture sur Wear OS API 35+ (si l'appareil est compatible).
- Différez l'appel bloquant vers
Context.getSystemService(Context.AUDIO_SERVICE)jusqu'à ce que la gestion de la sélection audio soit activée. Cela permet de s'assurer que l'appel bloquant n'est pas effectué si la gestion de la mise au point audio n'est pas activée (#1616). - Autorisation de la lecture quelle que soit la durée de la mise en mémoire tampon en cas d'échec du chargement (#1571).
- Ajout de
AnalyticsListener.onRendererReadyChanged()pour signaler quand les moteurs de rendu individuels permettent à la lecture d'être prête. - Correction de
MediaCodec.CryptoExceptionparfois signalé comme une "erreur d'exécution inattendue" lorsqueMediaCodecest utilisé en mode asynchrone (comportement par défaut sur l'API 31 ou version ultérieure). - Transmettez
bufferedDurationUsau lieu debufferedPositionUsavecPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). Remplace égalementDefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSparDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS. Les applications doivent ensuite transmettre une valeur représentant une durée spécifique à partir de la position de départ par défaut pour laquelle la source multimédia correspondante doit être préchargée avec cet IntDef, au lieu d'une position. - Ajout de l'implémentation
ForwardingRendererqui transfère tous les appels de méthode à un autre moteur de rendu (1703). - Ajoutez le préchargement de la playlist pour l'élément suivant de la playlist. Les applications peuvent activer le préchargement en appelant
ExoPlayer.setPreloadConfiguration(PreloadConfiguration)en conséquence. Par défaut, le préchargement est désactivé. Lorsque cette option est activée, et pour ne pas interférer avec la lecture,DefaultLoadControllimite le préchargement pour qu'il ne démarre et ne se poursuive que lorsque le lecteur ne charge pas de contenu pour la lecture. Les applications peuvent modifier ce comportement en implémentantLoadControl.shouldContinuePreloading()en conséquence (par exemple, en remplaçant cette méthode dansDefaultLoadControl). L'implémentation par défaut deLoadControldésactive le préchargement si une application utilise une implémentation personnalisée deLoadControl. - Ajout de la méthode
MediaSourceEventListener.EventDispatcher.dispatchEvent()pour permettre l'appel d'événements d'écouteurs de sous-classes (1736). - Ajoutez
DefaultPreloadManager.Builderqui crée les instancesDefaultPreloadManageretExoPlayeravec des configurations partagées de manière cohérente. - Suppression du paramètre
Renderer[]deLoadControl.onTracksSelected(), car l'implémentation deDefaultLoadControlpeut récupérer les types de flux à partir deExoTrackSelection[]. - La méthode
DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])est obsolète et a été marquée comme finale pour empêcher les remplacements. Utilisez plutôt le nouveauDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]). - Signalez les événements
MediaSourceEventListenerprovenant de sources secondaires dansMergingMediaSource. Cela entraînera le signalement d'événements de début/erreur/annulation/fin de chargement pour les sous-titres chargés de manière indépendante (ceux ajoutés avecMediaItem.LocalConfiguration.subtitleConfigurations), qui peuvent apparaître comme des événements de chargement en double émis parAnalyticsListener. - Empêchez les erreurs de sous-titres et de métadonnées d'interrompre complètement la lecture.
La piste problématique est désactivée et la lecture des pistes restantes se poursuit (#1722).
- Dans la nouvelle gestion des sous-titres (pendant l'extraction), les erreurs d'analyse (par exemple, données de sous-titres non valides) et de chargement (par exemple, HTTP 404) associées sont émises via des rappels
onLoadError. - Dans l'ancien traitement des sous-titres (pendant l'affichage), seules les erreurs de chargement associées sont émises via les rappels
onLoadError, tandis que les erreurs d'analyse sont ignorées sans notification (il s'agit d'un comportement préexistant).
- Dans la nouvelle gestion des sous-titres (pendant l'extraction), les erreurs d'analyse (par exemple, données de sous-titres non valides) et de chargement (par exemple, HTTP 404) associées sont émises via des rappels
- Correction d'un bug qui pouvait figer l'image à la fin d'un élément de playlist ou d'une période dans les flux DASH multipériodes dont la durée ne correspondait pas au contenu réel (#1698).
- Ajout d'un setter à
SntpClientpour définir le temps maximal écoulé depuis la dernière mise à jour après laquelle le client est réinitialisé (#1794).
- Transformateur :
- Ajout de
SurfaceAssetLoader, qui permet de mettre en file d'attente les données vidéo vers Transformer via unSurface. ImageAssetLoadersignale une entrée non compatible viaAssetLoader.onErrorau lieu de générer uneIllegalStateException.- Rendre obligatoire la définition de la durée de l'image à l'aide de
MediaItem.Builder.setImageDurationMspour l'exportation d'images. - Ajout de la prise en charge de l'exportation pour les espaces dans les séquences d'EditedMediaItems audio.
- Ajout de
- Sélection de la piste :
DefaultTrackSelector: privilégie l'audio basé sur les objets par rapport à l'audio basé sur les canaux lorsque les autres facteurs sont égaux.
- Extracteurs :
- Autorisez
Mp4ExtractoretFragmentedMp4Extractorà identifier les échantillons H264 qui ne sont pas utilisés comme référence par les échantillons suivants. - Ajout d'une option permettant d'activer la recherche basée sur l'index dans
AmrExtractor. - Traiter les fichiers MP3 comportant plus de 128 Ko entre les frames valides comme tronqués (au lieu de non valides). Cela signifie que les fichiers contenant des données non MP3 à la fin, sans autres métadonnées indiquant la longueur des octets MP3, arrêtent désormais la lecture à la fin des données MP3 au lieu d'échouer avec
ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1}(#1563). - Correction de la gestion des échantillons de preroll pour les positions de début de contenu multimédia sans image clé lors du traitement des listes de montage dans les fichiers MP4 (#1659).
- Amélioration du calcul de la fréquence d'images en utilisant la durée du contenu multimédia de la zone
mdhddansMp4ExtractoretFragmentedMp4Extractor(#1531). - Correction de la mise à l'échelle incorrecte de
media_timedans les listes de montage MP4. Alors quesegment_durationétait déjà correctement mis à l'échelle à l'aide de l'échelle de temps du film,media_timeest désormais correctement mis à l'échelle à l'aide de l'échelle de temps de la piste, comme spécifié par la norme de format MP4 (#1792). - Gérer les frames désordonnées dans le calcul de
endIndicespour MP4 avec une liste de modifications (#1797). - Correction de l'analyse de la durée des contenus multimédias dans la zone
mdhddes fichiers MP4 pour gérer les valeurs-1(#1819). - Ajout de la prise en charge de l'identification de la boîte
h263dans les fichiers MP4 pour la vidéo H.263 (#1821). - Ajout de la compatibilité avec le format de fichier multimédia de base ISO AC-4 Level-4 (#1265).
- Autorisez
- Source de données :
- Mise à jour de
HttpEngineDataSourcepour permettre l'utilisation à partir de la version S de l'extension 7 au lieu du niveau d'API 34 (#1262). DataSourceContractTest: vérifiez queDataSource.getUri()renvoie l'URI résolu (comme indiqué dans la documentation). Si l'URI est différent de l'URI demandé, les tests peuvent l'indiquer à l'aide de la nouvelle méthodeDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: vérifie queDataSource.getUri()etgetResponseHeaders()renvoient leur valeur "open" après un échec d'appel àopen()(en raison d'une ressource "introuvable") et avant un appelclose()ultérieur.- Le remplacement de
DataSourceContractTest.getNotFoundResources()permet aux sous-classes de test de fournir plusieurs ressources "introuvables" et de fournir également les en-têtes attendus. Cela permet de faire la distinction entre l'erreur HTTP 404 (avec en-têtes) et l'erreur "Serveur introuvable" (sans en-têtes).
- Le remplacement de
- Mise à jour de
- Audio :
- Configurez automatiquement les métadonnées d'intensité sonore CTA-2075 sur le codec si elles sont présentes dans le contenu multimédia.
- Assurez une diminution progressive du volume lors de la recherche.
- Correction des bruits de claquement pouvant se produire lors des recherches.
- Correction de l'accumulation d'erreurs de troncature pour l'algorithme de modification de la vitesse et de la hauteur du son de Sonic.
- Correction d'un bug dans
SpeedChangingAudioProcessorqui entraînait la suppression d'images de sortie.
- Vidéo :
MediaCodecVideoRendererévite de décoder les échantillons qui ne sont ni affichés, ni utilisés comme référence par d'autres échantillons.- Sur l'API 35 et les versions ultérieures,
MediaCodecAdapterpeut désormais recevoir unnullSurfacedansconfigureet des appels à une nouvelle méthodedetachOutputSurfacepour supprimer unSurfaceprécédemment défini si le codec le permet (MediaCodecInfo.detachedSurfaceSupported). - Utilisez les valeurs de format de pixel fournies par
MediaCodecAdapter, le cas échéant, lors du traitement deonOutputFormatChanged(#1371). - Ajout d'une solution de contournement pour un problème d'appareil sur la Galaxy Tab S7 FE qui entraîne le marquage des flux H264 sécurisés à 60 fps comme non compatibles (#1619).
- Ajout d'une solution de contournement pour les codecs qui se bloquent après le dernier échantillon sans renvoyer de signal de fin de flux.
- Texte :
- Ajout d'un
VoiceSpanpersonnalisé et renseignement de ce champ pour les balises de voix WebVTT (#1632). - Assurez-vous que les sous-titres WebVTT dans HLS avec des codes temporels très longs (qui dépassent un
longde 64 bits lorsqu'ils sont représentés en microsecondes et multipliés par la base de temps MPEG90,000) sont affichés (#1763). - Prise en charge des sous-titres CEA-608 dans le contenu Dolby Vision (#1820).
- Correction d'un problème de blocage de la lecture sur les flux multi-périodes DASH lorsque les sous-titres CEA-608 sont activés (#1863).
- Ajout d'un
- Métadonnées :
- Attribuez le type
C.TRACK_TYPE_METADATAaux pistes contenant du contenu icy ou vnd.dvb.ait.
- Attribuez le type
- Image :
- Ajoutez
ExternallyLoadedImageDecoderpour simplifier l'intégration avec des bibliothèques de chargement d'images externes telles que Glide ou Coil.
- Ajoutez
- Source de données :
- Ajout de
FileDescriptorDataSource, une nouvelleDataSourcequi peut être utilisée pour lire à partir d'unFileDescriptor(#3757).
- Ajout de
- Effet :
- Ajout d'une solution de contournement
DefaultVideoFrameProcessorpour le scaling mineur deSurfaceTexture.SurfaceTexturepeut inclure une petite mise à l'échelle qui supprime une bordure de 1 texel autour du bord d'un tampon recadré. Ce problème est désormais géré de manière à ce que le résultat soit plus proche de celui attendu. - Accélérer
DefaultVideoFrameProcessor.queueInputBitmap(). Par conséquent, l'exportation d'images vers des vidéos avecTransformerest plus rapide.
- Ajout d'une solution de contournement
- Extension IMA :
- Correction d'un bug qui pouvait entraîner une
ArrayIndexOutOfBoundsExceptiondansImaServerSideAdInsertionMediaSourcelors de l'effacement de la playlist. - Correction d'un bug à cause duquel les flux d'insertion dynamique d'annonce insérés côté serveur sans annonce pré-roll peuvent entraîner une exception
ArrayIndexOutOfBoundsExceptionlors de la lecture après la dernière annonce mid-roll (#1741).
- Correction d'un bug qui pouvait entraîner une
- Session :
- Ajout de
MediaButtonReceiver.shouldStartForegroundService(Intent)pour permettre aux applications de supprimer une commande de lecture entrante pour la reprise de la lecture en remplaçant cette méthode. Par défaut, le service est toujours démarré et la lecture ne peut pas être supprimée sans que le système ne plante le service avec unForegroundServiceDidNotStartInTimeException(#1528). - Correction d'un bug qui entraînait l'envoi de commandes personnalisées envoyées depuis un
MediaBrowservers la varianteMediaSessionCompat.Callbackau lieu de la varianteMediaBrowserServiceCompatde la méthode lors de la connexion à un ancien service. Cela empêchaitMediaBrowserde recevoir la valeur de retour réelle renvoyée par l'ancien service (#1474). - Gestion des
IllegalArgumentExceptiongénérées par les appareils de certains fabricants lors de la définition du broadcast receiver pour les intents de bouton multimédia (#1730). - Ajoutez des boutons de commande pour les éléments multimédias. Cela ajoute l'API Media3 pour ce qui était connu sous le nom de
Custom browse actionsavec l'ancienne bibliothèque avecMediaBrowserCompat. Notez qu'avec Media3, les boutons de commande pour les éléments multimédias sont disponibles pourMediaBrowseretMediaController. Consultez Implémenter des actions de navigation personnalisées. * Correction d'un bug qui empêchait parfois un contrôleur Media3 de laisser une application de session démarrer un service de premier plan après avoir demandéplay(). - Limitez
CommandButton.Builder.setIconUripour qu'il n'accepte que les URI de contenu. - Transmettez les indications de connexion d'un navigateur Media3 au
MediaBrowserCompatinitial lors de la connexion à unMediaBrowserCompatancien. Le service peut recevoir les indications de connexion transmises en tant qu'indications racine lors du premier appel àonGetRoot(). - Correction d'un bug qui empêchait un
MediaBrowserconnecté à un ancien service de navigateur de recevoir une erreur envoyée par le service après que le navigateur s'est abonné à unparentid. - Amélioration du comportement d'interopérabilité, de sorte qu'un navigateur Media3 connecté à un ancien
MediaBrowserServicene demande pas deux fois les enfants d'unparentIdlors de l'abonnement à un parent.
- Ajout de
- Interface utilisateur :
- Rendre la vidéo étirée/recadrée dans la solution de contournement
PlayerView-in-Compose-AndroidViewactivable, en raison de problèmes liés aux transitions partagées basées sur XML. Les applications qui utilisentPlayerViewdansAndroidViewdoivent appelerPlayerView.setEnableComposeSurfaceSyncWorkaroundpour l'activer (#1237, #1594). - Ajout de
setFullscreenButtonStateàPlayerViewpour permettre la mise à jour de l'icône du bouton plein écran à la demande, c'est-à-dire hors bande et non en réaction à un clic (#1590, #184). - Correction d'un bug qui empêchait l'option "Aucun" de fonctionner dans la sélection de texte si des préférences de sélection de pistes de texte étaient définies par l'application.
- Rendre la vidéo étirée/recadrée dans la solution de contournement
- Extension DASH :
- Ajout de la compatibilité avec les périodes commençant au milieu d'un segment (#1440).
- Extension Smooth Streaming :
- Correction d'une erreur
Bad magic number for Bundlelors de la lecture de flux SmoothStreaming avec des pistes de texte (#1779).
- Correction d'une erreur
- Extension RTSP :
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Ajout du module de décodeur IAMF, qui permet de lire des fichiers MP4 contenant des pistes IAMF à l'aide de la bibliothèque native libiamf pour synthétiser l'audio.
- La lecture est activée avec une disposition stéréo ainsi qu'en 5.1 avec spatialisation et suivi des mouvements de la tête (facultatif) activé, mais la lecture binaurale n'est actuellement pas disponible.
- Ajout de la prise en charge des pages de 16 ko pour les extensions de décodeur sur Android 15 (#1685).
- Ajout du module de décodeur IAMF, qui permet de lire des fichiers MP4 contenant des pistes IAMF à l'aide de la bibliothèque native libiamf pour synthétiser l'audio.
- Extension Cast :
- Arrêtez de nettoyer la chronologie après la déconnexion de CastSession, ce qui permet à l'application émettrice de reprendre la lecture localement après une déconnexion.
- Renseignez le
DeviceInfode CastPlayer lorsqu'unContextest fourni. Cela permet d'associerMediaSessionà unRoutingSession, ce qui est nécessaire pour intégrer le sélecteur de sortie (#1056).
- Utilitaires de test :
DataSourceContractTestinclut désormais des tests pour vérifier :- Le flux d'entrée
read positiona été mis à jour. - Le tampon de sortie
offsetest appliqué correctement.
- Le flux d'entrée
- Application de démonstration
- Résolution des fuites de mémoire dans l'application de démonstration de vidéos courtes (#1839).
- Suppression des symboles obsolètes :
- Suppression des éléments obsolètes
Player.hasPreviousetPlayer.hasPreviousWindow(). Utilisez plutôtPlayer.hasPreviousMediaItem(). - Suppression de la méthode
Player.previous()obsolète. UtilisezPlayer.seekToPreviousMediaItem()à la place. - Suppression de la méthode
DrmSessionEventListener.onDrmSessionAcquiredobsolète. - Suppression des constructeurs
DefaultEncoderFactoryobsolètes. UtilisezDefaultEncoderFactory.Builderà la place.
- Suppression des éléments obsolètes
Version 1.5.0-rc02
19 novembre 2024
Utilisez la version stable 1.5.0.
Version 1.5.0-rc01
13 novembre 2024
Utilisez la version stable 1.5.0.
Version 1.5.0-beta01
30 octobre 2024
Utilisez la version stable 1.5.0.
Version 1.5.0-alpha01
10 septembre 2024
Utilisez la version stable 1.5.0.
Version 1.4.0
Version 1.4.1
27 août 2024
Publication d'androidx.media3:media3-*:1.4.1. Liste des commits de la version 1.4.1
- ExoPlayer :
- Extracteurs :
- MP3 : correction de l'erreur
Searched too many bytesen ignorant correctement les données non MP3 de fin en fonction du champ de longueur dans un frameInfo(#1480).
- MP3 : correction de l'erreur
- Texte :
- TTML : correction de la gestion des valeurs de pourcentage
tts:fontSizepour s'assurer qu'elles sont correctement héritées des nœuds parents avec des valeurs de pourcentagetts:fontSize. - Correction de
IndexOutOfBoundsExceptiondansLegacySubtitleUtilen raison d'une gestion incorrecte du cas où l'heure de début de sortie demandée est supérieure ou égale à l'heure de l'événement final dansSubtitle(#1516).
- TTML : correction de la gestion des valeurs de pourcentage
- DRM :
- Correction de l'erreur
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEsur les appareils dotés de l'API 31 ou d'une version ultérieure qui lisent du contenu Widevine L1. Cette erreur est due à une implémentation incomplète de la méthodeMediaDrm.requiresSecureDecoderdu framework (#1603).
- Correction de l'erreur
- Effet :
- Ajoutez une méthode
release()àGlObjectsProvider.
- Ajoutez une méthode
- Session :
- Transformation d'un double appui sur
KEYCODE_HEADSETHOOKen action "rechercher l'élément suivant", comme documenté (#1493). - Gérez
KEYCODE_HEADSETHOOKen tant que commande "play" dansMediaButtonReceiverlorsque vous décidez de l'ignorer pour éviter unForegroundServiceDidNotStartInTimeException(#1581).
- Transformation d'un double appui sur
- Extension RTSP :
- Ignorer les descriptions de contenus multimédias non valides dans l'analyse SDP (#1087).
Version 1.4.0
25 juillet 2024
Publication d'androidx.media3:media3-*:1.4.0. Liste des commits de la version 1.4.0
- Bibliothèque commune :
- Transfert des appels de recherche présumés sans effet vers les méthodes protégées
BasePlayer.seekTo()etSimpleBasePlayer.handleSeek()au lieu de les ignorer. Si vous implémentez ces méthodes dans un lecteur personnalisé, vous devrez peut-être gérer ces appels supplémentaires avecmediaItemIndex == C.INDEX_UNSET. - Suppression de la dépendance de compilation sur la désucre Java 8 améliorée (#1312).
- Assurez-vous que la durée transmise à
MediaItem.Builder.setImageDurationMs()est ignorée pour unMediaItemqui n'est pas une image (comme indiqué dans la documentation). - Ajoutez
Format.customDatapour stocker les informations personnalisées fournies par l'application sur les instancesFormat.
- Transfert des appels de recherche présumés sans effet vers les méthodes protégées
- ExoPlayer :
- Ajout de
BasePreloadManager, qui coordonne le préchargement de plusieurs sources en fonction des priorités définies par leurrankingData. Vous pouvez personnaliser cette classe en l'étendant. AjoutezDefaultPreloadManager, qui utilisePreloadMediaSourcepour précharger des exemples de contenus multimédias des sources en mémoire, et un entierrankingDataqui indique l'index d'un élément dans l'interface utilisateur. - Ajout de
PlayerIdà la plupart des méthodes deLoadControlpour permettre aux implémentations deLoadControlde prendre en charge plusieurs joueurs. - Suppression de
Buffer.isDecodeOnly()etC.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écideront d'ignorer les tampons en fonction du code temporel. Les implémentationsRendererpersonnalisées doivent vérifier si la marge de temps est d'au moinsBaseRenderer.getLastResetPositionUs()pour décider si un échantillon doit être affiché. Les implémentationsSimpleDecoderpersonnalisées peuvent vérifierisAtLeastOutputStartTimeUs()si nécessaire ou marquer d'autres tampons avecDecoderOutputBuffer.shouldBeSkippedpour les ignorer. - Autorisez le renvoi d'une valeur nulle par
TargetPreloadStatusControl.getTargetPreloadStatus(T)pour indiquer de ne pas précharger unMediaSourceavec lerankingDatadonné. - Ajoutez
remove(MediaSource)au fichierBasePreloadManager. - Ajoutez
reset()àBasePreloadManagerpour libérer toutes les sources de conservation tout en conservant l'instance du gestionnaire de préchargement. - Ajoutez
ExoPlayer.setPriority()(etBuilder.setPriority()) pour définir la valeur de priorité utilisée dansPriorityTaskManageret pour l'importance de MediaCodec à partir de l'API 35. - Correction d'un problème lié à la mise à jour de l'heure de la dernière mise en mémoire tampon, qui entraînait une clé
bs(insuffisance de la mémoire tampon) incorrecte dans CMCD (#1124). - Ajoutez
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)pour indiquer que la source a été chargée jusqu'à la fin. Cela permet aux implémentationsDefaultPreloadManageretPreloadMediaSource.PreloadControlpersonnalisées de précharger la source suivante ou d'effectuer d'autres actions. - Correction d'un bug qui pouvait déclencher une exception de lecture lors de la suppression des silences à la fin des éléments.
- Ajoutez
clearàPreloadMediaSourcepour supprimer la période de préchargement. - Ajout du code d'erreur
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED, qui est utilisé lorsque les ressources de codec sont récupérées pour des tâches de priorité plus élevée. - Autorisation de
AdsMediaSourceà charger des annonces pré-roll avant la fin de la préparation initiale du contenu multimédia (#1358). - Correction d'un bug qui entraînait le déplacement de la lecture vers
STATE_ENDEDlors de la nouvelle préparation d'un flux en direct DASH multipériode après la suppression de la période d'origine du fichier manifeste. onTimelineRefreshed()a été renomméonSourcePrepared()etonPrepared()a été renomméonTracksSelected()dansPreloadMediaSource.PreloadControl. Renommez également les IntDefs dansDefaultPreloadManager.Stageen conséquence.- Ajout de la compatibilité expérimentale avec la planification dynamique pour mieux aligner le travail sur les cycles de réveil du processeur et retarder le réveil jusqu'à ce que les moteurs de rendu puissent progresser.
Vous pouvez l'activer à l'aide de
experimentalSetDynamicSchedulingEnabled()lors de la configuration de votre instance ExoPlayer. - Ajout de
Renderer.getDurationToProgressUs(). UnRendererpeut implémenter cette méthode pour renvoyer à ExoPlayer la durée pendant laquelle la lecture doit avancer pour que le moteur de rendu progresse. SiExoPlayerest défini avecexperimentalSetDynamicSchedulingEnabled(),ExoPlayerappelle cette méthode lors du calcul du temps nécessaire pour planifier sa tâche de travail. - Ajout de
MediaCodecAdapter#OnBufferAvailableListenerpour alerter lorsque les tampons d'entrée et de sortie sont disponibles pour être utilisés parMediaCodecRenderer.MediaCodecRenderersignaleraExoPlayerlors de la réception de ces rappels. SiExoPlayerest défini avecexperimentalSetDynamicSchedulingEnabled(),ExoPlayerplanifiera sa boucle de travail, car les moteurs de rendu peuvent progresser. - Utilisez une classe de données pour les méthodes
LoadControlau lieu de paramètres individuels. - Ajoutez
ExoPlayer.isReleased()pour vérifier siExoplayer.release()a été appelé. - Ajout de
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()pour configurer la position maximale pour laquelleseekToPrevious()recherche l'élément précédent (#1425). - Correction de certaines incohérences de priorité audio, par exemple l'absence de signalement de perte de priorité totale ou temporaire lorsque le lecteur est en pause (#1436).
- Correction d'un éventuel
IndexOutOfBoundsExceptioncausé par des extracteurs signalant des pistes supplémentaires après l'étape de préparation initiale (#1476). EffectsdansExoPlayer.setVideoEffect()recevra les codes temporels sans le décalage du moteur de rendu (#1098).- Correction d'une éventuelle
IllegalArgumentExceptionlors de la gestion d'une erreur du lecteur survenue lors de la lecture anticipée d'un autre élément de la playlist (#1483).
- Ajout de
- Transformateur :
- Ajoutez
audioConversionProcessetvideoConversionProcessàExportResultpour indiquer comment la piste respective du fichier de sortie a été créée. - Assouplir les vérifications du niveau H.264 pour l'optimisation du découpage.
- Ajout de la possibilité de basculer entre les contenus multimédias d'entrée SDR et HDR dans une séquence.
- Ajout de la prise en charge des effets audio au niveau de la composition.
- Ajout de la compatibilité avec le transcodage d'images Ultra HDR en vidéos HDR.
- Correction d'un problème qui empêchait
DefaultAudioMixerde générer la bonne quantité d'octets après avoir été réinitialisé et réutilisé. - Contournement d'un bug du décodeur qui limitait le nombre de canaux audio à la stéréo lors du traitement de l'entrée PCM.
- Lorsque vous sélectionnez des pistes dans
ExoPlayerAssetLoader, ignorez les contraintes de nombre de canaux audio, car elles ne s'appliquent qu'à la lecture. - Remplacez l'interface
androidx.media3.transformer.Muxerparandroidx.media3.muxer.Muxeret supprimezandroidx.media3.transformer.Muxer. - Correction du chargement des images HEIC à partir des schémas d'URI de contenu. (#1373).
- Ajustez la durée de la piste audio dans
AudioGraphInputpour améliorer la synchronisation AV. - Supprimez le champ
ExportResult.processedInputs. Si vous utilisez ce champ pour les détails du codec, utilisez plutôtDefaultDecoderFactory.listener. En cas d'exception de codec, les détails du codec seront disponibles dansExportException.codecInfo.
- Ajoutez
- Extracteurs :
- MPEG-TS : effectuez un roll-forward de la modification en vous assurant que la dernière image est affichée en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (#7909). Intégration de correctifs pour résoudre les problèmes survenus dans les flux HLS I-frame uniquement(#1150) et les flux HLS H.262 (#1126).
- MP3 : privilégiez la taille des données d'un frame
Infopar rapport à la taille signalée par le flux sous-jacent (par exemple, la taille du fichier ou l'en-tête HTTPContent-Length). Cela permet d'exclure les données de bande-annonce non lisibles (par exemple, la pochette d'album) des calculs de recherche de débit constant, ce qui rend les recherches plus précises (#1376). - MP3 : utilisez le nombre d'images et d'autres données d'une image
Info(si elle est présente) pour calculer un débit moyen pour la recherche de débit constant, plutôt que d'extrapoler à partir du débit de l'image après l'imageInfo, qui peut être artificiellement faible, par exemple l'imagePCUT(#1376). - Correction de l'extraction du format audio PCM dans les conteneurs AVI.
- Audio :
- Correction des attributs d'encodage DTS:X Profile 2 pour la lecture en passthrough (#1299).
- Pour la lecture déchargée, réinitialisez le champ de suivi de la fin du flux dans
DefaultAudioSinkavant d'appelerAudioTrack.stop()afin queAudioTrack.StreamEventCallback#onPresentationEndedidentifie correctement le moment où toutes les données en attente ont été lues. - Correction d'un bug dans
SilenceSkippingAudioProcessoroù les transitions entre différents formats audio (par exemple, stéréo vers mono) peuvent entraîner la levée d'une exception par le processeur (#1352). - Implémentez
MediaCodecAudioRenderer.getDurationToProgressUs()pour qu'ExoPlayer planifie de manière dynamique sa boucle de travail principale lorsque MediaCodecAudioRenderer peut progresser.
- Vidéo :
- Correction d'un problème qui entraînait l'arrivée trop précoce de
Listener.onRenderedFirstFrame()lors du changement de surface en cours de lecture. - Correction de la logique de remplacement du décodeur pour que Dolby Vision utilise un décodeur AV1 compatible si nécessaire (#1389).
- Correction d'une exception de codec pouvant être causée par l'activation d'un moteur de rendu vidéo en cours de lecture.
- Correction d'un problème qui entraînait l'arrivée trop précoce de
- Texte :
- Correction d'un problème qui entraînait l'omission des sous-titres commençant avant une position de recherche. Ce problème n'a été introduit que dans Media3 1.4.0-alpha01.
- Modifier le comportement d'analyse des sous-titres par défaut pour qu'il se produise pendant l'extraction plutôt que pendant l'affichage (voir le diagramme d'architecture d'ExoPlayer pour connaître la différence entre l'extraction et l'affichage).
- Cette modification peut être ignorée en appelant à la fois
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)etTextRenderer.experimentalSetLegacyDecodingEnabled(true). Consultez la documentation sur la personnalisation pour savoir comment intégrer ces composants dans une instanceExoPlayer. Ces méthodes (et toute la compatibilité avec l'ancien décodage des sous-titres) seront supprimées dans une prochaine version. - Les applications avec des implémentations
SubtitleDecoderpersonnalisées doivent les mettre à jour pour implémenterSubtitleParserà la place (etSubtitleParser.Factoryau lieu deSubtitleDecoderFactory).
- Cette modification peut être ignorée en appelant à la fois
- PGS : correction du décodage de la longueur d'exécution pour résoudre
0en tant qu'index de couleur, au lieu d'une valeur de couleur littérale (#1367). - CEA-708 : ignorez la valeur
rowLock. La spécification CEA-708-E S-2023 indique querowLocketcolumnLockdoivent tous deux être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la compatibilité aveccolumnLockn'est pas implémentée, elle est donc considérée comme toujours fausse).- Cette modification était initialement incluse dans les notes de version de
1.3.0-alpha01, mais elle a été annulée par erreur avant la version1.3.0-rc01. Ce problème est désormais résolu, et la modification est de nouveau présente.
- Cette modification était initialement incluse dans les notes de version de
- CEA-708 : évitez d'ajouter des sauts de ligne en double en raison de la gestion naïve par ExoPlayer de la commande "set pen location" (#1315).
- Correction d'une
IllegalArgumentExceptiondeLegacySubtitleUtillorsqu'un exemple de sous-titre WebVTT ne contient aucun signal, par exemple dans le cadre d'un flux DASH (#1516).
- Métadonnées :
- Correction du mappage des tags de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (
soal), "artist sort" (soar) et "album artist sort" (soaa) étaient mappés de manière incorrecte aux tags ID3TSO2,TSOAetTSOP(#1302). - Correction de la lecture des tags numériques MP4 (/iTunes)
gnre(genre) ettmpo(tempo) lorsque la valeur est supérieure à un octet. - Propagation de la frame ID3
TCONversMediaMetadata.genre(#1305).
- Correction du mappage des tags de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (
- Image :
- Ajout de la compatibilité avec les grilles de miniatures DASH non carrées (#1300).
- Ajout de la prise en charge d'AVIF pour l'API 34 et les versions ultérieures.
- Autorisez
nullcomme paramètre pourExoPlayer.setImageOutput()afin d'effacer unImageOutputprécédemment défini.
- Source de données :
- Implémentez la compatibilité avec les URI de ressources brutes
android.resource://package/id, oùpackageest différent du package de l'application actuelle. Cette méthode n'était pas documentée auparavant, mais elle est plus efficace pour accéder aux ressources d'un autre package que par leur nom. - Vérifiez de manière proactive que
urln'est pas nul dans les constructeursDataSpec. Ce paramètre a déjà été annoté comme non nul. - Autorisez
ByteArrayDataSourceà résoudre un URI en un tableau d'octets pendantopen(), au lieu d'être codé en dur lors de la construction (#1405).
- Implémentez la compatibilité avec les URI de ressources brutes
- DRM :
- Autorisation de définir un
LoadErrorHandlingPolicysurDefaultDrmSessionManagerProvider(#1271).
- Autorisation de définir un
- Effet :
- Prise en charge de plusieurs changements de vitesse dans le même
EditedMediaItemouCompositiondansSpeedChangeEffect. - Prise en charge des sorties HLG et PQ à partir d'une entrée bitmap Ultra HDR.
- Ajout de la compatibilité avec EGL_GL_COLORSPACE_BT2020_HLG_EXT, qui améliore la sortie de surface HLG dans ExoPlayer.setVideoEffect et la vue SurfaceView de débogage de Transformer.
- Mise à jour de 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 utilisezOverlaySettings.Builder.setOverlayFrameAnchor(), inversez les valeurs x et y en les multipliant par-1. - Correction d'un bug qui provoquait le plantage de
TimestampWrapperlorsqu'il était utilisé avecExoPlayer#setVideoEffects(#821). - Modification de l'espace de travail de couleur SDR par défaut, des couleurs linéaires à la vidéo électrique BT 709 SDR. Fournissez également une troisième option pour conserver l'espace colorimétrique d'origine.
- Autorisation de définir un ordre Z indéterminé pour les EditedMediaItemSequences (#1055).
- Maintenez une plage de luminance cohérente entre les différents contenus HDR (utilise la plage HLG).
- Ajout de la compatibilité avec les superpositions Ultra HDR (bitmap) sur le contenu HDR.
- Autorisez l'utilisation des effets
SeparableConvolutionavant l'API 26. - Supprimez les
OverlaySettings.useHdrinutilisés, car la plage dynamique de la superposition et de l'image doit correspondre. - Ajout de la compatibilité HDR pour
TextOverlay. La luminance de la superposition de texte peut être ajustée avecOverlaySettings.Builder.setHdrLuminanceMultiplier().
- Prise en charge de plusieurs changements de vitesse dans le même
- Extension IMA :
- Promotion de l'API requise pour que les applications puissent lire les flux d'annonces DAI en version stable.
- Ajout de
replaceAdTagParameters(Map <String, String>)àImaServerSideAdInsertionMediaSource.AdLoader, qui permet de remplacer les paramètres de tag d'emplacement publicitaire au moment de l'exécution. - Correction d'un bug qui empêchait l'appel de
VideoAdPlayer.VideoAdPlayerCallback.onError()lorsqu'une erreur de lecteur se produisait pendant la lecture d'une annonce (#1334). - Passage du SDK IMA vers la version 3.33.0 pour corriger une erreur
NullPointerExceptionlors de l'utilisation d'URI de tag d'emplacement publicitairedata://(#700).
- Session :
- Remplacez la valeur par défaut de
CommandButton.enabledpartrueet assurez-vous que la valeur peut rester "false" pour les contrôleurs, même si la commande associée est disponible. - Ajout de constantes d'icônes pour
CommandButtonà utiliser à la place des ressources d'icônes personnalisées. - Ajout de
MediaSessionService.isPlaybackOngoing()pour permettre aux applications de demander si le service doit être arrêté dansonTaskRemoved()(#1219). - Ajoutez
MediaSessionService.pauseAllPlayersAndStopSelf(), qui permet de mettre en pause la lecture de toutes les sessions, et appelezstopSelf()pour mettre fin au cycle de vie deMediaSessionService. - Remplacez
MediaSessionService.onTaskRemoved(Intent)pour fournir une implémentation par défaut sécurisée qui maintient le service en cours d'exécution au premier plan si la lecture est en cours, ou qui l'arrête dans le cas contraire. - Masquage de la barre de recherche dans la notification multimédia pour les diffusions en direct en ne définissant pas la durée dans les métadonnées de session de la plate-forme (#1256).
- Alignez la conversion de
MediaMetadatasurMediaDescriptionCompatpour utiliser le même ordre et la même logique préférés lors de la sélection des propriétés de métadonnées que dans media1. - Ajout de
MediaSession.sendError(), qui permet d'envoyer des erreurs non fatales au contrôleur Media3. Lorsque vous utilisez le contrôleur de notification (voirMediaSession.getMediaNotificationControllerInfo()), l'erreur personnalisée est utilisée pour mettre à jour lePlaybackStatede la session de la plate-forme vers un état d'erreur avec les informations d'erreur fournies (#543). - Ajoutez
MediaSession.Callback.onPlayerInteractionFinished()pour informer les sessions lorsqu'une série d'interactions du joueur à partir d'un contrôleur spécifique est terminée. - Ajoutez
SessionErroret utilisez-le dansSessionResultetLibraryResultau lieu du code d'erreur pour fournir plus d'informations sur l'erreur et sur la façon de la résoudre, si possible. - Publiez le code de l'application de test du contrôleur media3, qui peut être utilisée pour tester les interactions avec les applications publiant une session multimédia.
- Propagation des extras transmis à
MediaSession[Builder].setSessionExtras()de media3 versPlaybackStateCompat.getExtras()d'un contrôleur media1. - Mappez les erreurs fatales et non fatales vers et depuis la session de la plate-forme. Un
PlaybackExceptionest mappé à un état d'erreur fatale dePlaybackStateCompat. UnSessionErrorenvoyé au contrôleur de notification multimédia avecMediaSession.sendError(ControllerInfo, SessionError)est mappé à une erreur non fatale dansPlaybackStateCompat, ce qui signifie que le code d'erreur et le message sont définis, mais que l'état de la session de la plate-forme reste différent deSTATE_ERROR. - Autorisez la définition de l'activité de session par contrôleur pour remplacer l'activité de session globale. L'activité de session peut être définie pour un contrôleur au moment de la connexion en créant un
ConnectionResultavecAcceptedResultBuilder.setSessionActivivty(PendingIntent). Une fois la connexion établie, l'activité de la session peut être mise à jour avecMediaSession.setSessionActivity(ControllerInfo, PendingIntent). - Amélioration de la réplication des erreurs des appels à
MediaLibrarySession.Callback. La réplication des erreurs peut désormais être configurée à l'aide deMediaLibrarySession.Builder.setLibraryErrorReplicationMode()pour choisir le type d'erreur ou désactiver la réplication des erreurs, qui est activée par défaut.
- Remplacez la valeur par défaut de
- Interface utilisateur :
- Ajout de la prise en charge de l'affichage d'images à
PlayerViewlorsqu'il est connecté à unExoPlayer(#1144). - Ajout de la personnalisation de différentes icônes dans
PlayerControlViewvia des attributs XML pour autoriser différents drawables par instancePlayerView, plutôt que des remplacements globaux (#1200). - Contournement d'un bug de la plate-forme qui étirait/recadrait la vidéo lors de l'utilisation de
SurfaceViewdans unAndroidViewCompose sur l'API 34 (#1237).
- Ajout de la prise en charge de l'affichage d'images à
- Téléchargements :
- S'assure que
DownloadHelperne divulgue pas d'instancesRenderernon publiées, ce qui peut entraîner le plantage d'une application avecIllegalStateException: Too many receivers, total of 1000, registered for pid(#1224).
- S'assure que
- Extension Cronet :
- Correction de
SocketTimeoutExceptiondansCronetDataSource. Dans certaines versions de Cronet, la requête fournie par le rappel n'est pas toujours la même. Le rappel n'est donc pas terminé et la requête expire (https://issuetracker.google.com/328442628).
- Correction de
- Extension HLS :
- Correction d'un bug qui entraînait la délégation des échantillons EMSG en attente d'une discontinuité dans
HlsSampleStreamWrapperavec un décalage incorrect, ce qui provoquait uneIndexOutOfBoundsExceptionou uneIllegalArgumentException(#1002). - Correction d'un bug qui entraînait le rechargement continu des playlists non principales pour les flux LL-HLS (#1240).
- Correction d'un bug qui entraînait l'affichage de
Source ErroretIllegalArgumentExceptionlorsque CMCD était activé pour HLS avec des segments d'initialisation. - Correction d'un bug qui empêchait l'actualisation des playlists non principales en cours de lecture pendant la lecture en direct (#1240).
- Correction d'un bug qui entraînait une exception
ArrayIndexOutOfBoundsExceptionlorsque CMCD était activé pour les diffusions en direct HLS (#1395).
- Correction d'un bug qui entraînait la délégation des échantillons EMSG en attente d'une discontinuité dans
- Extension DASH :
- Extension Cast :
- Correction d'un bug qui convertissait le titre de l'album de
MediaQueueItemen artiste dans l'élément multimédia Media3 (#1255).
- Correction d'un bug qui convertissait le titre de l'album de
- Utilitaires de test :
- Implémentez
onInit()etonRelease()dansFakeRenderer. - 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éthodesTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()pour désactiver ce comportement.
- Implémentez
- Application de démonstration :
- Utilisez
DefaultPreloadManagerdans l'application de démonstration de vidéos courtes. - Autorisation de définir le mode de répétition avec des arguments
Intentà partir de la ligne de commande (#1266). - Utilisez
HttpEngineDataSourcecommeHttpDataSourcelorsque l'appareil est compatible.
- Utilisez
- Suppression des symboles obsolètes :
- Suppression de
CronetDataSourceFactory. Utilisez plutôtCronetDataSource.Factory. - Suppression de certains constructeurs
DataSpec. UtilisezDataSpec.Builderà la place. - Suppression de la méthode
setContentTypePredicate(Predicate)deDefaultHttpDataSource,OkHttpDataSourceetCronetDataSource. Utilisez plutôt la méthode équivalente sur chaqueXXXDataSource.Factory. - Suppression des constructeurs
OkHttpDataSourceet deOkHttpDataSourceFactory. Utilisez plutôtOkHttpDataSource.Factory. - Supprimez
PlayerMessage.setHandler(Handler). Utilisez plutôtsetLooper(Looper). - Supprimez le champ
Timeline.Window.isLive. Utilisez plutôt la méthodeisLive(). - Suppression des constructeurs
DefaultHttpDataSource. UtilisezDefaultHttpDataSource.Factoryà la place. - Suppression de
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. UtilisezDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MSà la place. - Supprimez
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). UtilisezMediaCodecInfo.canReuseCodec(Format, Format)à la place. - Suppression des méthodes
DrmSessionManager.DUMMYetgetDummyDrmSessionManager(). Utilisez plutôtDrmSessionManager.DRM_UNSUPPORTED. - Supprimez
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilisez plutôt les surcharges qui acceptent unDecoderReuseEvaluation. - Suppression de l'IntDef
RendererSupport.FormatSupportet des constantesFORMAT_HANDLED,FORMAT_EXCEEDS_CAPABILITIES,FORMAT_UNSUPPORTED_DRM,FORMAT_UNSUPPORTED_SUBTYPEetFORMAT_UNSUPPORTED_TYPE. Utilisez plutôt l'IntDef et les constantes équivalents dansandroidx.media3.common.C(par exemple,C.FORMAT_HANDLED). - Supprimez l'interface
Bundleable. Cela inclut la suppression de tous les champs de constanteBundleable.Creator<Foo> CREATOR. Les appelants doivent utiliser les méthodesBundle toBundle()etstatic Foo fromBundle(Bundle)sur chaque type à la place.
- Suppression de
Version 1.4.0-rc01
10 juillet 2024
Utilisez la version stable 1.4.0.
Version 1.4.0-beta01
26 juin 2024
Utilisez la version stable 1.4.0.
Version 1.4.0-alpha02
7 juin 2024
Utilisez la version stable 1.4.0.
Version 1.4.0-alpha01
17 avril 2024
Utilisez la version stable 1.4.0.
Version 1.3.0
Version 1.3.1
11 avril 2024
Publication d'androidx.media3:media3-*:1.3.1. Liste des commits de la version 1.3.1
- Bibliothèque commune :
- Ajoutez
Format.labelspour autoriser les libellés localisés ou d'autres libellés alternatifs.
- Ajoutez
- ExoPlayer :
- Correction d'un problème qui empêchait
PreloadMediaPeriodde conserver les flux lorsqu'il était préchargé à nouveau. - Appliquez le
TrackSelectionResultcorrespondant à la période de lecture lors de la nouvelle sélection de la piste. - Ne démarre les moteurs de rendu activés de manière anticipée qu'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 ProGuard
-keepclasseswithmemberspourDefaultVideoFrameProcessor.Factory.Builder.build()(#1187).
- Correction d'un problème qui empêchait
- Transformateur :
- Ajout d'une solution de contournement pour l'exception générée, car
MediaMuxern'est pas compatible avec les codes temporels de présentation négatifs avant l'API 30.
- Ajout d'une solution de contournement pour l'exception générée, car
- Sélection de la piste :
DefaultTrackSelector: privilégie les pistes vidéo avec une fréquence d'images "raisonnable" (>=10 fps) par rapport à celles dont la fréquence d'images est inférieure ou non définie. Cela permet au lecteur de sélectionner la "vraie" 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 qui empêchait d'ignorer la marge intérieure lors de la lecture de fragments de taille impaire à partir de fichiers WAV (#1117).
- MP3 : renseignez
Format.averageBitrateà partir de frames de métadonnées telles queXINGetVBRI. - MPEG-TS : annulation d'une modification visant à s'assurer que la dernière image est affichée en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (#7909). En effet, la modification entraîne de nouveaux problèmes avec les flux HLS I-frame uniquement (#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 l'initialisation de la piste audio échoue en mode déchargement.
- Vidéo :
- Ajout d'une solution de contournement pour un problème sur les appareils 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 du tunneling, même si l'appareil ne le fait pas automatiquement comme l'exige l'API (#1169). (#966).
- Correction d'un problème où la gestion des informations de couleur HDR entraîne un dysfonctionnement du codec et empêche les changements de format adaptatifs pour les pistes vidéo SDR (#1158).
- Texte :
- WebVTT : empêche les repères directement consécutifs de créer des instances
CuesWithTimingsupplémentaires parasites à partir deWebvttParser.parse(#1177).
- WebVTT : empêche les repères directement consécutifs de créer des instances
- DRM :
- Contournement d'une
NoSuchMethodErrorqui peut être générée par le frameworkMediaDrmau lieu deResourceBusyExceptionouNotProvisionedExceptionsur certains appareils Android 14 (#1145).
- Contournement d'une
- Effet :
- Amélioration du mappage des tons PQ vers SDR en convertissant les espaces colorimétriques.
- Session :
- Interface utilisateur :
- Création de remplacement pour inclure le nom de la langue de la piste audio si
Localene peut pas identifier de nom à afficher (#988).
- Création de remplacement pour inclure le nom de la langue de la piste audio si
- Extension DASH :
- Remplissez tous les éléments
Labeldu fichier manifeste dansFormat.labels(#1054).
- Remplissez tous les éléments
- Extension RTSP :
- Les valeurs d'informations de session vides (balises i) sont ignorées lors de l'analyse SDP (#1087).
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- Désactivez l'extension MIDI en tant que dépendance locale par défaut, car elle nécessite la configuration d'un dépôt Maven supplémentaire. Les utilisateurs qui ont besoin de ce module à partir d'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émentation de la compatibilité avec les URI de ressources brutes
android.resource://package/[type/]nameoùpackageest différent du package de l'application actuelle. Cette fonctionnalité a toujours été documentée comme fonctionnant, mais elle n'était pas correctement implémentée jusqu'à présent. - Normalisez les types MIME définis par le code de l'application ou lus à partir du contenu multimédia pour qu'ils soient entièrement en minuscules.
- Définissez les annonces avec un
MediaItemcomplet au lieu d'un seulUridansAdPlaybackState. - Augmentez
minSdkà 19 (Android KitKat). Cette modification est alignée sur toutes les autres bibliothèques AndroidX et est nécessaire pour que nous puissions passer aux dernières versions de nos dépendances AndroidX. - Remplissage de
artworkUrietartworkDatadansMediaMetadata.Builder.populate(MediaMetadata)lorsqu'au moins l'un d'eux n'est pas nul (#964).
- Implémentation de la compatibilité avec les URI de ressources brutes
- ExoPlayer :
- Ajout de
PreloadMediaSourceetPreloadMediaPeriod, qui permettent aux applications de précharger une source multimédia de contenu à une position de départ spécifique avant la lecture.PreloadMediaSourcese charge de préparer la source multimédia de contenu pour recevoir leTimeline, de préparer et de mettre en cache la période à la position de départ donnée, de sélectionner les pistes et de charger les données multimédias pour la période. Les applications contrôlent la progression du préchargement en implémentantPreloadMediaSource.PreloadControlet en définissant la source préchargée sur le lecteur pour la lecture. - Ajout de
ExoPlayer.setImageOutput, qui permet aux applications de définirImageRenderer.ImageOutput. DefaultRenderersFactoryfournit désormais unImageRendererau lecteur par défaut avec des valeursImageOutputetImageDecoder.Factory.DEFAULTnulles.- Émission de l'événement
Player.Listener.onPositionDiscontinuitylorsque 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(). - Prise en charge des sources multimédias adaptatives avec
PreloadMediaSource. - Implémentez
HttpEngineDataSource, unHttpDataSourceutilisant l'API HttpEngine. - Empêcher la sous-classification de
CompositeSequenceableLoader. Ce composant a déjà été rendu extensible, mais n'a jamais été sous-classé dans la bibliothèque. Pour personnaliser l'instance, vous pouvez l'encapsuler à l'aide du modèle de décorateur et implémenter unCompositeSequenceableLoaderFactorypersonnalisé. - Correction d'un problème qui entraînait l'effacement des métadonnées d'un élément lorsque la même heure était répétée (#1007).
- Renommage des méthodes
experimentalSetSubtitleParserFactorysurBundledChunkExtractor.FactoryetDefaultHlsExtractorFactoryensetSubtitleParserFactoryet interdiction de transmettrenull. Utilisez les nouvelles méthodesexperimentalParseSubtitlesDuringExtraction(boolean)pour contrôler le comportement d'analyse. - Ajout de la prise en charge de la personnalisation de l'
SubtitleParser.Factoryutilisé lors de l'extraction. Pour ce faire, utilisezMediaSource.Factory.setSubtitleParserFactory(). - Ajoutez un préfixe de source à tous les champs
Format.idgénérés à partir deMergingMediaSource. Cela permet d'identifier la source qui a produit unFormat(#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 qu'elle ne vérifie que les traits d'union (#1028).
- Arrêt du double encodage des paramètres de requête CMCD (#1075).
- Ajout de
- Transformateur :
- Ajout de la compatibilité avec l'aplatissement des vidéos au ralenti SEF H.265/HEVC.
- Augmentation de la vitesse de transmuxage, en particulier pour les modifications de type "supprimer la vidéo".
- Ajout d'une API pour s'assurer que le fichier de sortie commence sur une image vidéo. Cela peut rendre le résultat des opérations de découpage plus compatible avec les implémentations de lecteur qui n'affichent pas la première image vidéo avant son code temporel de présentation (#829).
- Ajout de la compatibilité avec l'optimisation des opérations de découpage MP4 d'un seul élément.
- Ajout de la compatibilité pour s'assurer qu'une image vidéo comporte le premier code temporel dans le fichier de sortie. Correction des fichiers de sortie commençant par une image noire sur les lecteurs iOS (#829).
- Sélection de la piste :
- Ajoutez
DefaultTrackSelector.selectImageTrackpour activer la sélection de pistes d'images. - Ajoutez
TrackSelectionParameters.isPrioritizeImageOverVideoEnabledpour 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 estfalse, ce qui signifie que la sélection d'une piste vidéo est prioritaire.
- Ajoutez
- Extracteurs :
- Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs
ColorInfo.colorSpace,ColorInfo.colorTransferetColorInfo.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êteXing). Auparavant, nous utilisions la table de recherche de l'en-têteInfo, mais cela entraînait une recherche moins précise que si nous l'ignorions et supposions que le fichier était CBR. - MPEG2-TS : ajout de la compatibilité avec DTS, DTS-LBR et DTS:X Profile2 (#275).
- Extrayez les types audio des descripteurs TS et mappez-les aux indicateurs de rôle, ce qui permet aux utilisateurs de sélectionner des pistes audio en toute connaissance de cause (#973).
- Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs
- Audio :
- Vidéo :
- Remplacez le constructeur
MediaCodecVideoRendererqui utilise un argumentVideoFrameProcessor.Factorypar un constructeur qui utilise un argumentVideoSinkProvider. Les applications qui souhaitent injecter unVideoFrameProcessor.Factorypersonnalisé peuvent instancier unCompositingVideoSinkProviderqui utilise leVideoFrameProcessor.Factorypersonnalisé et transmettre le fournisseur de récepteur vidéo àMediaCodecVideoRenderer.
- Remplacez le constructeur
- Texte :
- Correction de la sérialisation des repères bitmap pour résoudre l'erreur
Tried to marshall a Parcel that contained Binder objectslors de l'utilisation deDefaultExtractorsFactory.setTextTrackTranscodingEnabled(#836). - CEA-708 : ignorez la valeur
rowLock. La spécification CEA-708-E S-2023 indique querowLocketcolumnLockdoivent tous deux être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la compatibilité aveccolumnLockn'est pas implémentée, elle est donc considérée comme toujours fausse).
- Correction de la sérialisation des repères bitmap pour résoudre l'erreur
- Image :
- Ajout de la prise en charge des miniatures DASH. Les images de la grille sont recadrées et des miniatures individuelles sont fournies à
ImageOutputà proximité de leurs heures de présentation.
- Ajout de la prise en charge des miniatures DASH. Les images de la grille sont recadrées et des miniatures individuelles sont fournies à
- DRM :
- Lire immédiatement par défaut les échantillons non chiffrés "clear lead" dans le contenu DRM, même si les clés des échantillons chiffrés ultérieurs ne sont pas encore prêtes. Cela peut entraîner des blocages en cours de lecture si les clés ne sont toujours pas prêtes lorsque la position de lecture atteint les échantillons chiffrés (mais auparavant, la lecture n'aurait pas du tout commencé à ce stade). Ce comportement peut être désactivé avec
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyouDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.- Extension IMA :
- Correction d'un problème qui empêchait la lecture des annonces DASH et HLS sans l'extension de fichier appropriée.
- Lire immédiatement par défaut les échantillons non chiffrés "clear lead" dans le contenu DRM, même si les clés des échantillons chiffrés ultérieurs ne sont pas encore prêtes. Cela peut entraîner des blocages en cours de lecture si les clés ne sont toujours pas prêtes lorsque la position de lecture atteint les échantillons chiffrés (mais auparavant, la lecture n'aurait pas du tout commencé à ce stade). Ce comportement peut être désactivé avec
- Session :
- Désactivation de la détection du double-clic pour les applications TV (#962).
- Correction d'un problème qui empêchait la transmission de
MediaItem.RequestMetadataavec des extras non nuls entre les contrôleurs multimédias et les sessions. - Ajout d'un constructeur à
MediaLibrarySession.Builderqui n'accepte qu'unContextau lieu d'unMediaLibraryService.
- Extension HLS :
- Réduisez la visibilité de
HlsMediaPeriodà "privée pour le paquet". Ce type ne doit pas dépendre directement de l'extérieur du package HLS. - Résolution plus efficace des recherches au début d'un segment (#1031).
- Réduisez la visibilité de
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- Décodeur MIDI : ignorer les messages d'événement SysEx (#710).
- Utilitaires de test :
- Ne mettez pas la lecture en pause dans
TestPlayerRunHelper.playUntilPosition. Le test maintient la lecture en cours, mais suspend la progression jusqu'à ce qu'il puisse ajouter des assertions et d'autres actions.
- Ne mettez pas la lecture en pause dans
- Application de démonstration :
- Ajout d'un module de démonstration de contenu court pour illustrer l'utilisation de
PreloadMediaSourceavec le cas d'utilisation de contenu court.
- Ajout d'un module de démonstration de contenu court pour illustrer l'utilisation de
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ù les recherches manuelles en dehors de la plage
LiveConfiguration.min/maxOffsetcontinuent d'ajuster le décalage surmin/maxOffset. - Correction d'un problème de disposition incorrecte des canaux OPUS et VORBIS pour 3, 5, 6, 7 et 8 canaux (#8396).
- Correction d'un problème qui permettait à la diffusion de démarrer à sa position par défaut après une recherche de zéro dans une diffusion en direct (#9347).
- Correction du problème où les nouvelles instances de
CmcdData.Factoryrecevaient des valeurs négatives pourbufferedDurationUsà partir de sources de fragments, ce qui entraînait uneIllegalArgumentException(#888).
- Correction d'un problème où les recherches manuelles en dehors de la plage
- Transformateur :
- Contournement d'un problème qui entraînait l'arrêt de l'encodeur au moment de la configuration en raison d'un taux de fonctionnement élevé.
- Extracteurs :
- Marquez les pistes HEVC secondaires (non lisibles) des photos animées JPEG comme
ROLE_FLAG_ALTERNATEpour éviter qu'elles ne soient automatiquement sélectionnées pour la lecture en raison de leur résolution plus élevée. - Correction de la détection incorrecte des images clés pour les flux TS H264 (#864).
- Correction de l'estimation de la durée des flux TS de plus de 47 721 secondes (#855).
- Marquez les pistes HEVC secondaires (non lisibles) des photos animées JPEG comme
- Audio :
- Correction de la gestion de l'EOS pour
SilenceSkippingAudioProcessorlorsqu'il est appelé plusieurs fois (#712).
- Correction de la gestion de l'EOS pour
- Vidéo :
- Ajout d'une solution de contournement pour 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 AVC 60 fps comme non compatibles (#693).
- Métadonnées :
- Correction d'un bug où
MediaMetadatan'était renseigné qu'à partir des commentaires Vorbis avec des clés en majuscules (#876). - Interception de
OutOfMemoryErrorlors de l'analyse de très grands frames ID3, ce qui signifie que la lecture peut continuer sans les informations de tag au lieu d'échouer complètement.
- Correction d'un bug où
- DRM :
- Extension de la solution de contournement pour l'URL de licence ClearKey
https://default.urlparasite à l'API 33 et versions ultérieures (auparavant, la solution de contournement ne s'appliquait qu'à l'API 33) (#837). - Correction de
ERROR_DRM_SESSION_NOT_OPENEDlors du passage d'un contenu chiffré à un contenu en clair sans surface associée au lecteur. L'erreur était due à l'utilisation incorrecte d'un décodeur sécurisé pour lire le contenu en clair.
- Extension de la solution de contournement pour l'URL de licence ClearKey
- Session :
- Placez les clés et les valeurs personnalisées dans
MediaMetadataCompatversMediaMetadata.extrasetMediaMetadata.extrasversMediaMetadataCompat(#756, #802). - Correction de la diffusion de
notifyChildrenChangedpour les anciens contrôleurs (#644). - Correction d'un bug qui entraînait un plantage sur certains appareils lorsque l'on définissait une durée négative pour un minuteur
setWhendésactivé de la notification (#903). - Correction de
IllegalStateExceptionlorsque le contrôleur de notification multimédia n'a pas terminé la connexion lorsque la première mise à jour de notification est demandée (#917).
- Placez les clés et les valeurs personnalisées dans
- Interface utilisateur :
- Correction du problème qui empêchait l'affichage des boutons d'avance et de retour rapide lorsqu'ils étaient utilisés avec Material Design dans un BottomSheetDialogFragment (#511).
- Correction d'un problème qui entraînait un mauvais alignement des numéros dans le bouton d'avance rapide de
PlayerControlView(#547).
- Extension DASH :
- Analyse "f800" en tant que nombre de canaux de 5 pour Dolby dans le fichier manifeste DASH (#688).
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- Extension Cast :
- Nettoyage de la création d'un
Timelinepour ne pas faire planter l'application en cas d'échec du chargement du contenu multimédia sur l'appareil Cast (#708).
- Nettoyage de la création d'un
Version 1.2.0
15 novembre 2023
- Bibliothèque commune :
- Ajoutez un paramètre
@Nullable Throwableaux méthodes de l'interfaceLog.Logger. Le paramètremessagede ces méthodes ne contient plus d'informations sur leThrowabletransmis aux méthodesLog.{d,i,w,e}(). Les implémentations devront donc ajouter manuellement ces informations si vous le souhaitez (éventuellement à l'aide deLogger.appendThrowableString(String, Throwable)). - Correction d'un problème de compatibilité Kotlin qui empêchait la détection des paramètres de type générique nullable et des types d'éléments de tableau nullable comme étant nullables. Exemples : paramètres de méthode
TrackSelectorResultetSimpleDecoder(#6792). - Modifiez le comportement par défaut de l'interface utilisateur et des notifications dans
Util.shouldShowPlayButtonpour afficher un bouton de lecture lorsque la lecture est temporairement supprimée (par exemple, en raison d'une perte temporaire de la priorité audio). L'ancien comportement peut être conservé à l'aide dePlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)ouMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Mettez à niveau
androidx.annotation:annotation-experimentalvers1.3.1pour corriger https://issuetracker.google.com/251172715. - Déplacement de
ExoPlayer.setAudioAttributesvers l'interfacePlayer.
- Ajoutez un paramètre
- ExoPlayer :
- Correction des problèmes de recherche dans les flux AC4 causés par une identification incorrecte des échantillons de décodage uniquement (#11000).
- Ajout de la suppression de la lecture sur les périphériques de sortie audio non adapté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 sera mis à jour surPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTsi une tentative de lecture est effectuée alors qu'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.canUpdateMediaItemetMediaSource.updateMediaItempour accepter les mises à jour deMediaItemaprès la création viaPlayer.replaceMediaItem(s). - Autorisation des mises à jour
MediaItempour toutes les classesMediaSourcefournies par la bibliothèque viaPlayer.replaceMediaItem(s)(#33, #9978). MimeTypes.TEXT_EXOPLAYER_CUESa été renomméMimeTypes.APPLICATION_MEDIA3_CUES.- Ajoutez
PngExtractorqui envoie et lit un fichier PNG entier dansTrackOutputen tant qu'échantillon. - Amélioration de la méthode
SequenceableLoader.continueLoading(long)dans l'interfaceSequenceableLoaderpourSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfocontient des paramètres supplémentaires, y comprisplaybackSpeedetlastRebufferRealtimeMsen plus du paramètreplaybackPositionUsexistant. - Améliorez la méthode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)dans l'interfaceChunkSourcepourChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder). - Ajout de champs supplémentaires à la journalisation CMCD (Common Media Client Data) : manque de mémoire tampon (
bs), échéance (dl), vitesse 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
ConcurrentModificationExceptiondansExperimentalBandwidthMeter(#612). - Ajout du paramètre
MediaPeriodIdàCompositeMediaSource.getMediaTimeForChildMediaTime. - Prise en charge de
ClippingMediaSource(et d'autres sources avec des décalages temporels de période/fenêtre) dansConcatenatingMediaSource2(#11226). - Modifiez
BaseRenderer.onStreamChanged()pour qu'il reçoive également un argumentMediaPeriodId.
- Transformateur :
- Analysez les données de rotation EXIF pour les entrées d'image.
- Suppression du type d'annotation
TransformationRequest.HdrModeet de ses constantes associées. Utilisez plutôtComposition.HdrModeet ses constantes associées. - Simplifiez le
OverlaySettingspour résoudre les problèmes de rotation. - Remplacement des paramètres
frameRateetdurationUsdeSampleConsumer.queueInputBitmapparTimestampIterator.
- Sélection de la piste :
- Ajoutez
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenesspour autoriser ou interdire explicitement l'adaptation non fluide. La valeur par défaut reste définie sur son comportement actuel detrue.
- Ajoutez
- Extracteurs :
- MPEG-TS : assurez-vous que la dernière image est affichée en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (#7909).
- Correction d'une faute de frappe lors de la détermination de
rotationDegrees. Remplacement deprojectionPosePitchparprojectionPoseRoll(#461). - Suppression de l'hypothèse selon laquelle les instances
Extractorpeuvent être inspectées directement avecinstanceof. Si vous souhaitez accéder aux détails d'implémentation d'unExtractorau moment de l'exécution, vous devez d'abord appelerExtractor.getUnderlyingInstance. - Ajout de
BmpExtractor. - Ajout de
WebpExtractor. - Ajout de
HeifExtractor. - Ajout de la prise en charge de QuickTime Classic à
Mp4Extractor.
- Audio :
- Ajout de la compatibilité avec le PCM big-endian 24/32 bits dans MP4 et Matroska, et analyse de l'encodage PCM pour
lpcmdans MP4. - Ajout de la prise en charge de l'extraction de l'audio Vorbis au format MP4.
- Ajout de
AudioSink.getFormatOffloadSupport(Format)qui récupère le niveau de compatibilité avec le déchargement que le récepteur peut fournir pour le format via unDefaultAudioOffloadSupportProvider. Elle renvoie le nouveauAudioOffloadSupportqui contientisFormatSupported,isGaplessSupportedetisSpeedChangeSupported. - Ajout de
AudioSink.setOffloadMode(), qui permet de configurer la configuration de déchargement sur le récepteur audio. La valeur par défaut estAudioSink.OFFLOAD_MODE_DISABLED. - Le déchargement peut être activé via
setAudioOffloadPreferencedansTrackSelectionParameters. Si la préférence définie est l'activation, que l'appareil est compatible avec le déchargement pour le format et que la sélection de la piste est une seule piste audio, le déchargement audio sera activé. - Si
audioOffloadModePreferenceest défini surAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,DefaultTrackSelectorne sélectionnera qu'une piste audio, et uniquement 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 ne sera sélectionnée. - Désactivation de la compatibilité avec la lecture sans blanc pour le déchargement avant le niveau d'API 33 en raison d'un problème de position de lecture après la transition de piste.
- Suppression du paramètre
enableOffloadde la signature de la méthodeDefaultRenderersFactory.buildAudioSink. - Supprimez la méthode
DefaultAudioSink.Builder.setOffloadMode. - Supprimer la valeur intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Ajout de la prise en charge des métadonnées Opus sans interruption pendant la lecture en mode déchargement.
- Autorisation 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 du déchargement par défaut pour la lecture déchargée audio uniquement.
- Supprimez
ExoPlayer.experimentalSetOffloadSchedulingEnabledetAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged. onExperimentalSleepingForOffloadChangeda été renomméonSleepingForOffloadChangedetonExperimentalOffloadedPlaybacka été renomméonOffloadedPlayback.- Déplacement des interfaces et définitions
TrackSelectionParametersliées au mode de déchargement audio vers une classeAudioOffloadPreferencesinterne. - Ajoutez les rappels
onAudioTrackInitializedetonAudioTrackReleasedàAnalyticsListener,AudioRendererEventListeneretAudioSink.Listener. - Correction d'un problème de sous-débit du tampon audio DTS Express (#650).
- Correction d'un bug où la vérification des capacités pour E-AC3-JOC génère une exception
IllegalArgumentException(#677).
- Ajout de la compatibilité avec le PCM big-endian 24/32 bits dans MP4 et Matroska, et analyse de l'encodage PCM pour
- Vidéo :
- Autorisez
MediaCodecVideoRendererà utiliser unVideoFrameProcessor.Factorypersonnalisé. - 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).
- Autorisez
- Texte :
- Supprimez
ExoplayerCuesDecoder. Les pistes de texte avecsampleMimeType = application/x-media3-cuessont désormais gérées directement parTextRenderersans nécessiter d'instanceSubtitleDecoder.
- Supprimez
- Métadonnées :
MetadataDecoder.decodene sera plus appelé pour les échantillons "décodage uniquement", car l'implémentation doit de toute façon renvoyer la valeur "null".
- Effet :
- Ajoutez l'entrée de bitmap de mise en file d'attente
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)par code temporel. - Modifiez
VideoFrameProcessor.registerInputStream()pour qu'il ne soit pas bloquant. Les applications doivent implémenterVideoFrameProcessor.Listener#onInputStreamRegistered(). - Remplacement des paramètres
frameRateetdurationUsdeVideoFrameProcessor.queueInputBitmapparTimestampIterator.
- Ajoutez l'entrée de bitmap de mise en file d'attente
- Extension IMA :
- Correction d'un bug qui provoquait une exception lorsqu'un flux en direct DASH multipériode n'était 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éfinissez le comportement du service de premier plan des notifications sur
FOREGROUND_SERVICE_IMMEDIATEdansDefaultMediaNotificationProvider(#167). - Utilisez uniquement
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()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 notification multimédia comme proxy pour définir les commandes disponibles et la mise en page personnalisée utilisées pour remplir 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 de les renvoyer vers Media3. Ainsi, le contrôleur de l'appelant est toujours le contrôleur de notification multimédia, 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é à unMediaSessionCompatancien. - Ajoutez
MediaLibrarySession.getSubscribedControllers(mediaId)pour plus de commodité. - Remplacez
MediaLibrarySession.Callback.onSubscribe()pour vérifier la disponibilité de l'ID parent auquel le contrôleur s'abonne. Si l'opération réussit, l'abonnement est accepté etnotifyChildrenChanged()est appelé immédiatement pour en informer le navigateur (#561). - Ajout d'un module de démonstration de session pour Automotive OS et activation de la démonstration de session pour Android Auto.
- Ne définissez pas la file d'attente de la session du framework lorsque
COMMAND_GET_TIMELINEn'est pas disponible pour le contrôleur de notification multimédia. Comme Android Auto est le contrôleur client qui lit la session du framework, le boutonqueuen'est pas affiché dans l'UI d'Android Auto (#339). - Utilisez
DataSourceBitmapLoaderpar défaut au lieu deSimpleBitmapLoader(#271, #327). - Ajout de
MediaSession.Callback.onMediaButtonEvent(Intent), qui permet aux applications de remplacer la gestion par défaut des événements de bouton multimédia.
- Définissez le comportement du service de premier plan des notifications sur
- Interface utilisateur :
- Ajoutez une implémentation
Player.Listenerpour les appareils Wear OS qui gère la suppression de la lecture en raison dePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTen lançant une boîte de dialogue système pour permettre à l'utilisateur de connecter une sortie audio appropriée (par exemple, un casque Bluetooth). La lecture reprendra automatiquement si un appareil adapté est connecté dans un délai configurable (cinq minutes par défaut).
- Ajoutez une implémentation
- Téléchargements :
- Déclarez le type de service de premier plan "data sync" pour
DownloadServiceafin d'assurer la compatibilité avec Android 14. Lorsque vous utilisez ce service, l'application doit également ajouterdataSyncen tant queforegroundServiceTypedans le fichier manifeste et ajouter l'autorisationFOREGROUND_SERVICE_DATA_SYNC(#11239).
- Déclarez le type de service de premier plan "data sync" pour
- Extension HLS :
- Actualisez la playlist HLS en direct 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 :
- Autoriser plusieurs occurrences du 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. Cette version offre une meilleure compatibilité avec la fusion des sous-titres qui se chevauchent, y compris la résolution du scintillement 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
IndexOutOfBoundsExceptionlors du basculement vers TCP ou un blocage de la lecture dans certaines situations. - Vérification de l'état dans la configuration RTSP lors du renvoi de l'état de chargement de
RtspMediaPeriod(#577). - Les méthodes de requête RTSP personnalisées sont ignorées dans l'en-tête public de la réponse Options (#613).
- Utilisez 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 de persistance (#662).
- Correction d'une condition de concurrence pouvant entraîner une
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- Lancement du 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.
- Ajoutez
DecoderOutputBuffer.shouldBeSkippedpour 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. - Ajoutez
Decoder.setOutputStartTimeUsetSimpleDecoder.isAtLeastOutputStartTimeUspour permettre aux décodeurs de supprimer les échantillons de décodage uniquement avant l'heure de début. Cette option doit être privilégiée par rapport àBuffer.isDecodeOnly, qui sera obsolète. - Correction d'un bug lors de la publication de l'artefact du décodeur MIDI dans le dépôt Maven. L'artefact est renommé
media3-exoplayer-midi(#734).
- Extension Leanback :
- Correction d'un bug où la désactivation d'une surface peut générer une exception
ArithmeticExceptiondans le code Leanback (#617).
- Correction d'un bug où la désactivation d'une surface peut générer une exception
- Utilitaires de test :
- Rendre
TestExoPlayerBuilderetFakeClockcompatibles avec les tests d'UI Espresso et les tests d'UI Compose. Correction d'un bug qui entraînait une progression non déterministe de la lecture lors des interactions avec les vues Espresso ou Compose.
- Rendre
- Suppression des symboles obsolètes :
- Suppression de
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)etTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Utilisez plutôtComposition.Builder.setHdrMode(int)et transmettezCompositionàTransformer.start(Composition, String). - Suppression de la méthode
DownloadNotificationHelper.buildProgressNotificationobsolète. Utilisez plutôt une méthode non obsolète qui accepte un paramètrenotMetRequirements.
- Suppression de
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
multidexajoutée accidentellement à tous les modules (#499).
- Suppression de la dépendance
- ExoPlayer :
- Correction d'un problème dans
PlaybackStatsListener, où desPlaybackStatsparasites étaient créés après l'effacement de la playlist. - Ajout de champs supplémentaires à la journalisation des données CMCD (Common Media Client Data) : format de streaming (sf), type de flux (st), version (v), débit maximal (tb), durée de l'objet (d), débit mesuré (mtp) et type d'objet (ot) (#8699).
- Correction d'un problème dans
- Audio :
- Correction d'un bug qui empêchait
Player.getState()de passer àSTATE_ENDEDlors de la lecture de fichiers très courts (#538).
- Correction d'un bug qui empêchait
- Déchargement audio :
- Ajoutez les pages d'en-tête d'ID Ogg et d'en-tête de commentaire au flux binaire pour la lecture Opus déchargée conformément à la RFC 7845.
- Vidéo :
- H.265/HEVC : correction de l'analyse des informations sur les images de référence à court et long terme SPS.
- Texte :
- CEA-608 : modification de la logique de troncature des repères pour ne prendre en compte que le texte visible. Auparavant, le retrait et le décalage de tabulation étaient inclus lorsque la longueur du repère était limitée à 32 caractères (ce qui était techniquement correct selon la spécification) (#11019).
- Extension IMA :
- Passage du SDK IMA à 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.onCustomLayoutChangedest appelé. Les applications qui souhaitent envoyer différentes mises en page personnalisées à différents contrôleurs Media3 peuvent le faire dansMediaSession.Callback.onConnecten utilisant unAcceptedResultBuilderpour s'assurer que la mise en page personnalisée est disponible pour le contrôleur une fois la connexion établie. - Correction des cas où
MediaLibraryServiceLegacyStubenvoyait une erreur à unResultqui ne la prenait pas en charge, ce qui produisait unUnsupportedOperationException(#78). - Correction de la façon dont
PlayerWrappercrée unVolumeProviderCompaten déterminantvolumeControlTypevia les anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUMEetCOMMAND_SET_DEVICE_VOLUME) et les nouvelles commandes (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGSetCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).
- 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,
Version 1.1.0
5 juillet 2023
- Bibliothèque commune :
- Ajoutez un motif de suppression pour un itinéraire audio inapproprié et lisez-le lorsque vous êtes prêt. Modifiez le motif de suppression trop long. (#15).
- Ajoutez des commandes au lecteur :
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Ajout de méthodes surchargées à Player 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
BuilderpourDeviceInfoet abandon du constructeur existant. - Ajout de
DeviceInfo.routingControllerIdpour 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 à contrôler les méthodes de volume de l'appareil uniquement si l'utilisateur l'a explicitement accepté. Utilisez
ExoPlayer.Builder.setDeviceVolumeControlEnabledpour accéder aux éléments suivants :getDeviceVolume()isDeviceMuted()setDeviceVolume(int)etsetDeviceVolume(int, int)increaseDeviceVolume(int)etincreaseDeviceVolume(int, int)decreaseDeviceVolume(int)etdecreaseDeviceVolume(int, int)
- Ajout de
FilteringMediaSource, qui permet de filtrer les types de pistes disponibles à partir d'unMediaSource. - Ajout de la compatibilité avec l'inclusion des données CMCD (Common Media Client Data) dans les requêtes sortantes des formats de streaming adaptatif DASH, HLS et SmoothStreaming. Les champs suivants ont été intégrés :
br,bl,cid,rtpetsid(#8699). Structure et méthodes de l'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. - Remplacez
CmcdConfiguration.RequestConfig.getCustomData()pour activer la journalisation des clés personnalisées.
- La journalisation CMCD est désactivée par défaut. Utilisez
- 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.jsonpersonnalisé (#439). - Ajoutez
ExoPlayer.setVideoEffects()pour utiliserEffectpendant la lecture de la vidéo. - Mettez à jour
SampleQueuepour stockersourceIden tant quelongplutôt qu'en tant queint. Cela modifie les signatures des méthodes publiquesSampleQueue.sourceIdetSampleQueue.peekSourceId. - Ajoutez des paramètres aux méthodes
LoadControlshouldStartPlaybacketonTracksSelectedqui permettent d'associer ces méthodes auMediaPeriodpertinent. - 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. Cette opération 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)etBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). La variante des méthodes sansmediaTimeOffsetUspeut être appelée à la place. Notez que même pour les variantes obsolètes, le décalage n'est plus ajouté àstartTimeUsetendTimeUsdes objetsMediaLoadDatadistribués par le distributeur. ExoTrackSelection.blacklista été renomméexcludeTracketisBlacklisteda été renomméisTrackExcluded.- Correction du comportement incohérent entre
ExoPlayer.setMediaItem(s)etaddMediaItem(s)lorsqu'ils sont appelés sur une playlist vide.
- Autorisez ExoPlayer à contrôler les méthodes de volume de l'appareil uniquement si l'utilisateur l'a explicitement accepté. Utilisez
- Transformateur :
- Supprimez
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). UtilisezExoPlayerAssetLoader.Factory(MediaSource.Factory)etTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)à la place. - Supprimez
Transformer.startTransformation(MediaItem, ParcelFileDescriptor). - Correction d'un bug qui pouvait bloquer la transformation (entraînant un délai avant 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
MediaCodecListau lieu d'utiliser les utilitairesfindDecoder/EncoderForFormatpour étendre la compatibilité. - Supprimez la configuration de l'image B dans
DefaultEncoderFactory, car elle ne fonctionne pas sur certains appareils.
- Supprimez
- Sélection de la piste :
- Ajout de
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, qui est désactivé par défaut. Lorsque cette option est activée,DefaultTrackSelectordéclenche une nouvelle sélection de pistes lorsque les fonctionnalités du moteur de rendu changent.
- Ajout de
- Extracteurs :
- Audio :
- Correction d'un bug qui empêche certaines lectures lorsque le tunneling est activé et que
AudioProcessorsest actif, par exemple pour le découpage sans interruption (#10847). - Encapsulation des frames Opus dans des paquets Ogg lors des lectures directes (déchargement).
- Extrapoler la position actuelle pendant la mise en veille avec la planification du déchargement.
- Ajoutez
Renderer.release()etAudioSink.release()pour libérer les ressources à la fin du cycle de vie du lecteur. - Écoutez les modifications des fonctionnalités audio dans
DefaultAudioSink. Ajoutez un paramètre obligatoirecontextdans le constructeur deDefaultAudioSink, avec lequelDefaultAudioSinks'enregistrera en tant qu'écouteur deAudioCapabilitiesReceiveret mettra à jour sa propriétéaudioCapabilitieslorsqu'il sera informé d'un changement de fonctionnalités. - Propagation des modifications des fonctionnalités audio via un nouvel événement
onAudioCapabilitiesChangeddans l'interfaceAudioSink.Listeneret une nouvelle interfaceRendererCapabilities.Listenerqui déclenche des événementsonRendererCapabilitiesChanged. - Ajout de
ChannelMixingAudioProcessorpour appliquer une mise à l'échelle/un mixage aux canaux audio. - Ajout d'une nouvelle valeur int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEàDecoderDiscardReasonspour supprimer le décodeur audio lorsque le mode de contournement est possible après un changement des fonctionnalités audio. - Ajout de la prise en charge de la lecture directe pour DTS Express et DTS:X (#335).
- Correction d'un bug qui empêche certaines lectures lorsque le tunneling est activé et que
- Vidéo :
- Faites en sorte que
MediaCodecVideoRenderersignale unVideoSizeavec une largeur et une hauteur de 0 lorsque le moteur de rendu est désactivé.Player.Listener.onVideoSizeChangedest appelé en conséquence lorsquePlayer.getVideoSize()change. Avec ce changement, la taille de la vidéo d'ExoPlayer avecMediaCodecVideoRenderera une largeur et une hauteur de 0 lorsquePlayer.getCurrentTracksn'est pas compatible avec la vidéo, ou que la taille de la piste vidéo compatible n'est pas encore déterminée.
- Faites en sorte que
- DRM :
- Réduction de la visibilité de plusieurs méthodes internes sur
DefaultDrmSessionqui ne sont pas censées être appelées depuis l'extérieur du package DRM :void onMediaDrmEvent(int)void provision()void onProvisionCompleted()onProvisionError(Exception, boolean)
- Réduction de la visibilité de plusieurs méthodes internes sur
- Multiplexeur :
- Ajout d'une bibliothèque de multiplexeurs permettant de créer un fichier conteneur MP4.
- Extension IMA :
- Activez les flux DASH multipériodes en direct 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 insérait un nouveau groupe d'annonces dans les diffusions en direct, car la position calculée du contenu dans les chronologies consécutives variait légèrement.
- Session :
- Ajoutez la méthode d'assistance
MediaSession.getControllerForCurrentRequestpour obtenir des informations sur le contrôleur qui appelle actuellement une méthodePlayer. - Ajout de
androidx.media3.session.MediaButtonReceiverpour permettre aux applications d'implémenter la reprise de la lecture avec des événements de bouton multimédia envoyés, par exemple, par un casque Bluetooth (#167). - Ajout d'une implémentation par défaut à
MediaSession.Callback.onAddMediaItemspour permettre la transmission de l'élémentMediaItemsdemandé àPlayers'il comporteLocalConfiguration(par exemple, un URI) (#282). - Ajout par défaut des boutons de commande "rechercher le précédent" et "rechercher le suivant" dans la vue de notification multimédia compacte pour Android 12 et versions antérieures (#410).
- Ajout d'une implémentation par défaut à
MediaSession.Callback.onAddMediaItemspour permettre la transmission de l'élémentMediaItemsdemandé àPlayers'il comporteLocalConfiguration(par exemple, un URI) (#282). - Ajout par défaut des boutons de commande "rechercher le précédent" et "rechercher le suivant" dans la vue de notification multimédia compacte pour Android 12 et versions antérieures (#410).
- Ajoutez la méthode d'assistance
- Interface utilisateur :
- Ajoutez les méthodes utilitaires
shouldShowPlayButtonethandlePlayPauseButtonActionpour écrire des éléments d'interface utilisateur personnalisés avec un bouton de lecture/pause.
- Ajoutez les méthodes utilitaires
- Extension RTSP :
- Extension DASH :
- Supprimez le décalage temporel du contenu multimédia de
MediaLoadData.startTimeMsetMediaLoadData.endTimeMspour les flux DASH multipériodes. - Correction d'un bug où la nouvelle préparation d'une source multimédia DASH en direct multipériode générait une exception
IndexOutOfBoundsException(#10838).
- Supprimez le décalage temporel du contenu multimédia de
- Extension HLS :
- Ajoutez
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)pour définir un délai avant expiration pour le thread de chargement afin d'attendre l'initialisation deTimestampAdjuster. Si l'initialisation ne se termine pas avant l'expiration du délai, une exceptionPlaybackExceptionest générée pour éviter que la lecture ne se bloque indéfiniment. Le délai avant expiration est défini sur zéro par défaut (#323).
- Ajoutez
- Utilitaires de test :
- Vérifiez que le schéma d'URI n'est pas sensible à la casse dans
DataSourceContractTest.
- Vérifiez que le schéma d'URI n'est pas sensible à la casse dans
- Suppression des symboles obsolètes :
- Suppression des constructeurs
DefaultAudioSink. Utilisez plutôtDefaultAudioSink.Builder. - Supprimez
HlsMasterPlaylistet utilisezHlsMultivariantPlaylistà la place. - Supprimez
Player.stop(boolean). Utilisez plutôtPlayer.stop()etPlayer.clearMediaItems()(siresetesttrue). - Suppression de deux constructeurs
SimpleCacheobsolètes. Utilisez un constructeur non obsolète qui utilise unDatabaseProviderpour de meilleures performances. - Suppression du constructeur
DefaultBandwidthMeter. Utilisez plutôtDefaultBandwidthMeter.Builder. - Suppression des constructeurs
DefaultDrmSessionManager. Utilisez plutôtDefaultDrmSessionManager.Builder. - Suppression de deux constructeurs
HttpDataSource.InvalidResponseCodeExceptionobsolètes. 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.forDashetDownloadHelper.forSmoothStreaming, et utilisezDownloadHelper.forMediaItemà la place. - Suppression du constructeur
DownloadServiceobsolète. Utilisez un constructeur non obsolète qui inclut l'option permettant de fournir un paramètrechannelDescriptionResourceId. - Suppression des constantes de chaîne obsolètes pour les jeux de caractères (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEetUTF16LE_NAME). Utilisez plutôt les jeux de caractères Kotlin du packagekotlin.text,java.nio.charset.StandardCharsetsoucom.google.common.base.Charsets. - Suppression du constructeur
WorkManagerSchedulerobsolète. Utilisez plutôt un constructeur non obsolète qui inclut l'option permettant de fournir un paramètreContext. - Suppression des méthodes obsolètes
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatetcreateSampleFormat, qui étaient utilisées pour instancier la classeFormat. Utilisez plutôtFormat.Builderpour créer des instances deFormat. - Suppression des méthodes obsolètes
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateetcopyWithVideoSize. Utilisez plutôtFormat.buildUpon()et les méthodes setter. - Suppression de
ExoPlayer.retry()(obsolète). Utilisezprepare()à la place. - Suppression du constructeur
DefaultTrackSelectorobsolète sans argument. Utilisez plutôtDefaultTrackSelector(Context). - Suppression du constructeur
OfflineLicenseHelperobsolète. Utilisez plutôtOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Suppression du constructeur
DownloadManagerobsolète. Utilisez plutôt le constructeur qui accepte unExecutor. - Suppression des constructeurs
Cueobsolètes. Utilisez plutôtCue.Builder. - Suppression du constructeur
OfflineLicenseHelperobsolète. Utilisez plutôtOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher). - Suppression de quatre méthodes
AnalyticsListenerobsolètes :onDecoderEnabled, utilisez plutôtonAudioEnabledet/ouonVideoEnabled.onDecoderInitialized, utilisez plutôtonAudioDecoderInitializedet/ouonVideoDecoderInitialized.onDecoderInputFormatChanged, utilisez plutôtonAudioInputFormatChangedet/ouonVideoInputFormatChanged.onDecoderDisabled, utilisez plutôtonAudioDisabledet/ouonVideoDisabled.
- Supprimez les éléments obsolètes
Player.Listener.onSeekProcessedetAnalyticsListener.onSeekProcessed, et utilisez plutôtonPositionDiscontinuityavecDISCONTINUITY_REASON_SEEK. - Supprimez
ExoPlayer.setHandleWakeLock(boolean)et utilisez plutôtsetWakeMode(int). - Suppression de
DefaultLoadControl.Builder.createDefaultLoadControl()(obsolète). Utilisez plutôtbuild(). - Suppression de
MediaItem.PlaybackProperties(obsolète). UtilisezMediaItem.LocalConfigurationà la place. Le champ obsolèteMediaItem.playbackPropertiesest désormais de typeMediaItem.LocalConfiguration.
- Suppression des constructeurs
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 siBuffercontient l'optionC.BUFFER_FLAG_LAST_SAMPLE. - Correction d'un problème qui pouvait empêcher l'affichage de la dernière image si le dernier échantillon contenant des images était retiré de la file d'attente sans lire l'échantillon "fin du flux". (#11079).
- Ajout de
- Extracteurs :
- Correction de l'analyse de H.265 SPS 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 : les fichiers UTF-16 sont acceptés s'ils commencent par un ordre d'octet (#319).
- Session :
- Correction d'un problème qui empêchait
MediaControllerde mettre à jour ses commandes disponibles lorsqu'il était connecté à unMediaSessionCompatancien qui mettait à jour ses actions. - Correction d'un bug qui empêchait
MediaLibraryServicede renvoyer une valeur nulle pour un appel de l'UI système versCallback.onGetLibraryRootavecparams.isRecent == truesur l'API 30 (#355). - Correction de la fuite de mémoire de
MediaSessionServiceouMediaLibraryService(#346). - Correction d'un bug qui provoquait l'affichage d'une erreur
IllegalStateExceptionparMediaControllerlors d'une mise à jour combinée deTimelineet de la position dans unMediaSession.
- Correction d'un problème qui empêchait
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 remplacement de la diffusion en direct cible lors de la recherche de la position par défaut (#11051).
- Correction d'un bug où des flux d'échantillons vides dans le contenu multimédia pouvaient bloquer la lecture.
- Session :
- Correction d'un bug qui entraînait une exception dans
MediaControllerlorsque plusieurs éléments de file d'attente identiques étaient publiés par unMediaSessionCompatancien (#290). - Ajout du transfert manquant de
MediaSession.broadcastCustomCommandvers l'ancienMediaControllerCompat.Callback.onSessionEvent(#293). - Correction d'un bug qui empêchait l'appel de
MediaSession.setPlayerde mettre à jour les commandes disponibles. - Correction d'un problème qui ignorait les instances
TrackSelectionOverrideenvoyées depuis unMediaControllersi elles référençaient un groupe avecFormat.metadata(#296). - Correction d'un problème où
Player.COMMAND_GET_CURRENT_MEDIA_ITEMdoit être disponible pour accéder aux métadonnées via l'ancienMediaSessionCompat. - Correction d'un problème où les instances
MediaSessionsur un thread en arrière-plan provoquaient des plantages lorsqu'elles étaient utilisées dansMediaSessionService(#318). - Correction d'un problème qui entraînait la déclaration d'un récepteur de bouton multimédia par la bibliothèque sans que l'application ne l'ait prévu (#314).
- Correction d'un bug qui entraînait une exception dans
- DASH :
- Correction de la gestion 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 :
- Téléchargements :
- Rendre configurable la différence maximale de l'heure de début de deux segments à fusionner dans
SegmentDownloaderet les sous-classes (#248).
- Rendre configurable la différence maximale de l'heure de début de deux segments à fusionner dans
- Audio :
- Vidéo :
- Mappez le format HEVC HDR10 sur
HEVCProfileMain10HDR10au lieu deHEVCProfileMain10. - Ajout d'une solution de contournement pour 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 d'images lors de la lecture de contenus multimédias avec une fréquence d'images bien supérieure à la fréquence d'actualisation de l'écran.
- Mappez le format HEVC HDR10 sur
- Google Cast :
- Correction d'un problème de
STATE_IDLEtemporaire lors de la transition entre des éléments multimédias (#245).
- Correction d'un problème de
- RTSP :
- Interception de l'exception IllegalArgumentException générée lors de l'analyse des messages de réponse Describe RTSP non valides (#10971).
- Session :
- Correction d'un bug qui empêchait le bouton de lecture/mise en 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 DAI sans annonces, car le premier événement
LOADED(et le seul dans le cas sans annonces) n'était pas reçu.
- Correction d'un bug qui empêchait le démarrage des flux DAI sans annonces, car le premier événement
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.setPlaybackLooperqui 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.seekTopour 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
ConcatenatingMediaSource2qui permet de combiner plusieurs éléments multimédias dans une seule fenêtre. (#247)
- Ajustement de la logique de tri du moteur de rendu pour respecter les préférences de
- Extracteurs :
- Exception
ParserExceptiongénérée au lieu deNullPointerExceptionsi 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)
- Exception
- Audio :
- Utilisation du débit au format audio compressé pour calculer la taille minimale de la mémoire tampon pour
AudioTrackdans les lectures directes (passthrough).
- Utilisation du débit au format audio compressé pour calculer la taille minimale de la mémoire tampon pour
- Texte :
- Correction de
TextRendereren transmettant un index (négatif) non valide àSubtitle.getEventTimesi 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.
- Correction de
- 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.mediaTypepour indiquer le type de contenu ou le type de dossier décrit par les métadonnées. - Ajout de
MediaMetadata.isBrowsablepour remplacerMediaMetadata.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)
- Interface utilisateur :
- 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
PlayerViewavec une mise en page de droite à gauche. (#227)
- Correction du
- Session :
- Ajout du
SimpleBasePlayerabstrait afin de faciliter l'implémentation de l'interfacePlayerpour les lecteurs personnalisés. - Ajout d'une méthode d'assistance pour convertir le jeton de session de la plate-forme en
SessionTokenMedia3. (171) - Utilisation de
onMediaMetadataChangedpour 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()deDefaultMediaNotificationProvideret utilisation des listes immuables pour plus de clarté. (#216) - Ajout d'un écouteur de rappel
onSetMediaItemspour fournir un moyen de modifier/définir la listeMediaItem, 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
QueueTimelineen cas d'état de session hérité douteux. (#241)
- Ajout du
- 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.mediaTypepour indiquer le type de contenu ou le type de dossier décrit par les métadonnées. - Ajout de
MediaMetadata.isBrowsablepour remplacerMediaMetadata.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
ImaServerSideAdInsertionMediaSourcesur le thread de l'application pour éviter les problèmes de thread. - Ajout d'une propriété
focusSkipButtonWhenAvailableàImaServerSideAdInsertionMediaSource.AdsLoader.Builderpour 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.AdsLoaderpour demander par programmation de mettre en surbrillance le bouton "Ignorer". - Passage du SDK IMA vers la version 3.29.0.
- Suppression de l'écouteur du lecteur de
- 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.isTunnelingEnabledpour vérifier si la tunnellisation est activée pour les canaux actuellement sélectionnés. (#2518) - Ajout de
WrappingMediaSourcepour simplifier l'encapsulation d'une seuleMediaSource(#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
onMediaItemTransitionmanquant lors de l'appel deseekToNextou deseekToPreviousdans une playlist contenant un seul élément (#10667). - Ajout de
Player.getSurfaceSizequi 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).
- Ajout de
- Compilation :
- Applique un nombre minimal de
compileSdkVersionpour éviter les erreurs de compilation (#10684). - Permet d'éviter la publication d'un bloc lorsqu'il est inclus dans une autre compilation Gradle.
- Applique un nombre minimal de
- 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
ProgressiveDownloaderpouvant être provoquée par le téléchargement et la lecture simultanés avec le mêmePriorityTaskManager(#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).
- Correction d'une boucle infinie dans
- Vidéo :
- Essaie un autre décodeur pour Dolby Vision si l'écran ne le prend pas en charge. (#9794).
- Audio :
- Utilisation de
SingleThreadExecutorpour le lancement d'instancesAudioTrackafin d'éviter les erreurs de mémoire insuffisante lors de la libération de plusieurs lecteurs en même temps (#10057). - Ajout de
AudioOffloadListener.onExperimentalOffloadedPlaybackpour l'état de décharge audio d'une piste audio. (#134). - Conversion de
AudioTrackBufferSizeProvideren interface publique. - Ajout de
ExoPlayer.setPreferredAudioDevicepour définir l'appareil de sortie audio préféré (#135). androidx.media3.exoplayer.audio.AudioProcessora é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).
- Utilisation de
- Métadonnées :
MetadataRendererpeut désormais être configuré pour afficher les métadonnées dès qu'elles sont disponibles. Créez une instance avecMetadataRenderer(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 openedlors 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).
- Analyse
- Interface utilisateur :
- Utilisation de remplacements actuels du lecteur comme préréglage dans
TrackSelectionDialogBuilder(#10429)
- Utilisation de remplacements actuels du lecteur comme préréglage dans
- 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.Builderpour créer des instancesDefaultMediaNotificationProvider. 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éthodeDefaultMediaNotificationProvider.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). SimpleBitmapLoaderpeut charger le bitmap à partir des URIfile://(#108).- Correction d'une assertion qui empêche
MediaControllerde rechercher une annonce dans une période (#122). - À la fin de la lecture,
MediaSessionServiceest 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
DefaultNotificationProvidersur 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 :
- 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 identifierCastPlayerlors du contrôle de la lecture avecMediaController(#142).
- Implémentation de
- 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é.
- Suppression de
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
ShuffleOrderavecExoPlayer.setShuffleOrderentraîne un appel dePlayer.Listener#onTimelineChangedavecreason=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
setDataSourceFactorydansDefaultMediaSourceFactory, qui n'était pas fonctionnelle dans certains cas (#116).
- S'assure que la modification de
- Extracteurs :
- DASH :
- Analyse l'URL de licence ClearKey à partir des fichiers manifestes (#10246).
- Interface utilisateur :
- 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
playWhenReadydansLeanbackAdapter(10420).
- Écoute les modifications de
- Google Cast :
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 désactiver la contribution aux diagnostics de plate-forme pour ExoPlayer avecExoPlayer.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.setDrmSessionManagerProvideretMediaSource.Factory.setLoadErrorHandlingPolicy. Les instances deDefaultDrmSessionManagerProvideretDefaultLoadErrorHandlingPolicypeuvent être transmises explicitement si nécessaire. - Ajout de
MediaItem.RequestMetadatapour représenter les métadonnées nécessaires à la lecture de contenus multimédias lorsque l'élémentLocalConfigurationexact n'est pas connu. Suppression deMediaMetadata.mediaUrl, qui est maintenant inclus dansRequestMetadata. - Ajout de
Player.Command.COMMAND_SET_MEDIA_ITEMpour permettre aux joueurs de définir un seul élément.
- Active la prise en charge des diagnostics de la plate-forme Android via
- Sélection de la piste :
- Réduction de la classe
TrackSelectionOverridesqui devientTrackSelectionParameterset promotion deTrackSelectionOverrideen classe de niveau supérieur. TracksInfoa été renomméTracksetTracksInfo.TrackGroupInfoa été renomméTracks.Group.Player.getCurrentTracksInfoetPlayer.Listener.onTracksInfoChangedont également été renommésPlayer.getCurrentTracksetPlayer.Listener.onTracksChanged. Cela permet d'annuler l'abandon du nom de la méthodePlayer.Listener.onTracksChanged, mais avec différents types de paramètres.- Remplacement de
DefaultTrackSelector.buildUponParametersetDefaultTrackSelector.Parameters.buildUponpour renvoyerDefaultTrackSelector.Parameters.Builderau lieu deDefaultTrackSelector.ParametersBuilder. - Ajout de
DefaultTrackSelector.Parameters.constrainAudioChannelCountToDeviceCapabilities, qui est activé par défaut. Lorsque cette option est activée,DefaultTrackSelectorprivilé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,DefaultTrackSelectorpré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,DefaultTrackSelectorsurveille les modifications apportées aux propriétés de spatialisation et déclenche une nouvelle sélection de pistes. Les appareils avec un mode UItelevisionne 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'instanceDefaultTrackSelectordoit être créée avec unContext.
- Réduction de la classe
- Vidéo :
DummySurfacea é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()parandroid.media.AudioAttributespar une nouvelle classe de wrapperAudioAttributesV21afin 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
AudioTrackavec le masque de canalAudioFormat.CHANNEL_OUT_7POINT1POINT4si 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 renvoyerCueGroupau lieu deList<Cue>. - SSA : Prise en charge du paramètre de style
OutlineColourlorsqueBorderStyle == 3(c'est-à-dire lorsqueOutlineColourdé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.
- Modification de
- Extracteurs :
- Interface utilisateur :
- Correction de la diffusion des événements dans les
OnClickListenerdéfinis surPlayerView, lorsqueuseController=false. (#9605) Correction de la diffusion des événements dansOnLongClickListenerpour toutes les configurations de vue. - Correction du traitement incorrect d'une séquence d'événements tactiles qui sortent des limites de
PlayerViewavant un clicACTION_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
TrackSelectionViewetTrackSelectionDialogBuilderpour qu'elles fonctionnent avec l'interfacePlayerau lieu deExoPlayer. Cela permet d'utiliser les vues avec d'autres implémentationsPlayeret 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)
- Correction de la diffusion des événements dans les
- DASH :
- Analyse le nombre de canaux à partir des éléments
AudioChannelConfigurationde 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 deDefaultCompositeSequenceableLoaderFactorypeuvent être transmises explicitement si nécessaire.
- Analyse le nombre de canaux à partir des éléments
- 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.setPlaylistParserFactoryetHlsMediaSource.Factory.setPlaylistTrackerFactory. Les instances deDefaultCompositeSequenceableLoaderFactoryouDefaultHlsPlaylistParserFactory, ou une référence àDefaultHlsPlaylistTracker.FACTORYpeuvent être transmises explicitement si nécessaire.
- Streaming fluide :
- Interdiction de la transmission de
nullàSsMediaSource.Factory.setCompositeSequenceableLoaderFactory. Les instances deDefaultCompositeSequenceableLoaderFactorypeuvent être transmises explicitement si nécessaire.
- Interdiction de la transmission de
- 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 :
DummyDataSourcea été renomméPlaceholderDataSource.- Solution de contournement de la gestion des interruptions OkHttp.
- Session :
- Remplacement de
MediaSession.MediaItemFillerparMediaSession.Callback.onAddMediaItemspour permettre la résolution asynchrone des requêtes. - Utilisation des méthodes
setMediaItems(s)lorsqueMediaControllerse connecte à une ancienne session multimédia. - Suppression de
MediaController.setMediaUrietMediaSession.Callback.onSetMediaUri. Vous pouvez obtenir la même fonctionnalité en utilisantMediaController.setMediaItemetMediaSession.Callback.onAddMediaItems. - Transfert des anciens appels
MediaControllerpour lire des contenus multimédias versMediaSession.Callback.onAddMediaItemsau lieu deonSetMediaUri. - Ajout de
MediaNotification.ProvideretDefaultMediaNotificationProviderpour personnaliser la notification. - Ajout de
BitmapLoaderetSimpleBitmapLoaderpour 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.MediaSessionCallbacka été renomméMediaSession.Callback,MediaLibrarySession.MediaLibrarySessionCallbacka été renomméMediaLibrarySession.CallbacketMediaSession.Builder.setSessionCallbacka é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
MediaControllerImplBaseaprès le relâchement du contrôleur (#74).
- Remplacement de
- 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).
- Définit la version CMake sur
- Suppression des symboles obsolètes :
- Suppression de
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray). Utilisation dePlayer.Listener.onTracksChanged(Tracks)à la place. - Suppression de
Player.getCurrentTrackGroupsetPlayer.getCurrentTrackSelections. Utilisation dePlayer.getCurrentTracksà la place. Vous pouvez également continuer à utiliserExoPlayer.getCurrentTrackGroupsetExoPlayer.getCurrentTrackSelections, bien que ces méthodes restent obsolètes. - Suppression des constantes
DownloadHelperDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORTetDEFAULT_TRACK_SELECTOR_PARAMETERS. Utilisation degetDefaultTrackSelectorParameters(Context)si possible, etDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXTdans le cas contraire. - Suppression du constructeur
DefaultTrackSelector(ExoTrackSelection.Factory). UtilisezDefaultTrackSelector(Context, ExoTrackSelection.Factory)à la place. - Suppression de
Transformer.Builder.setContext.Contextdoit être transmis au constructeurTransformer.Builder.
- Suppression de
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.setTrackIdetMediaItem.SubtitleConfiguration.Builder.setIdpour donner la priorité au champSubtitleConfiguration, et utilisation de la valeurFactorysi celle-ci n'est pas définie (#10016).
- Corrige l'interaction entre
- 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 deDefaultRenderersFactoryqui ignorentbuildVideoRenderers()oubuildAudioRenderers()puissent accéder à la fabrique d'adaptateurs de codec et les transmettre aux instancesMediaCodecRenderer. qu'ils créent. - Propagation des champs d'en-tête ICY
nameetgenrerespectivement surMediaMetadata.stationetMediaMetadata.genreafin qu'ils atteignent l'application viaPlayer.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 deMediaCodec. (#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#inputBufferCountparqueuedInputBufferCount. SimpleExoPlayer.renderersdevient privé. Les moteurs de rendu sont accessibles viaExoPlayer.getRenderer.- Mise à jour de certaines valeurs constantes de
AnalyticsListener.EventFlagspour correspondre aux valeurs dansPlayer.EventFlags. - Division de
AnalyticsCollectoren 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.
- Ajout de la méthode protégée
- 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
TrackGroupen double dans unTrackGroupArray. Il est toujours possible de distinguer lesTrackGroupen définissant uniddans le constructeurTrackGroup. 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
AdaptiveTrackSelectionpour 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
AudioCapabilitiespour exiger la transmission explicite deAudioCapabilities.DEFAULT_AUDIO_CAPABILITIESau lieu denull. - Autorisation de personnaliser le calcul de la taille de la mémoire tampon
AudioTracken injectant unAudioTrackBufferSizeProviderdansDefaultAudioSink(#8891). - Nouvelle tentative de création de
AudioTracksi la taille de la mémoire tampon demandée était supérieure à 1 Mo (#9712).
- Extracteurs :
- Texte :
- Ajout d'un champ
MediaItem.SubtitleConfiguration.idqui est propagé au champFormat.idde 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
Cea708Decoderde lire plus que la taille déclarée d'un bloc de service.
- Ajout d'un champ
- DRM :
- Suppression de
playbackLooperdeDrmSessionManager.(pre)acquireSession. Lorsqu'un élémentDrmSessionManagerest utilisé par une application dans un élémentMediaSourcepersonnalisé, le champplaybackLooperdoit être transmis àDrmSessionManager.setPlayer.
- Suppression de
- Lecture des annonces / IMA :
- Ajout de l'insertion dynamique d'annonce IMA (#8213).
- Ajout d'une méthode à
AdPlaybackStatepour 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).
- Interface utilisateur :
- 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
maincommeC.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.Locationrelatives (#9939).
- Ajout des propriétés essentielles et supplémentaires analysées dans
- HLS :
- Renseigne correctement le
Format.labelpour 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).
- Renseigne correctement le
- RTSP :
- Fournit une API cliente pour remplacer le paramètre
SocketFactoryutilisé 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).
- Fournit une API cliente pour remplacer le paramètre
- Transformateur :
- La version minimale requise de l'API passe à 21.
TransformationExceptionpermet désormais de décrire les erreurs qui se produisent lors d'une transformation.- Ajout de
TransformationRequestpour 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.getProgresslors du lancement des throws du multiplexeur. - Ajout d'une application de démonstration pour appliquer des transformations.
- Extension MediaSession :
- Par défaut,
MediaSessionConnectorefface la playlist à l'arrêt. Les applications qui souhaitent conserver la playlist peuvent appelersetClearMediaItemsOnStop(false)sur le connecteur.
- Par défaut,
- Extension Cast :
- Extension FFmpeg :
- Fait en sorte que
build_ffmpeg.shdépende des utilitaires bin de LLVM plutôt que de GNU (#9933).
- Fait en sorte que
- 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 deplay-services-cast-frameworkne sont pas compatibles avec les applications ciblant Android 12 et plantent avecIllegalArgumentExceptionlors de la création dePendingIntent(#9528).
- Mise à niveau de l'extension Cast pour qu'elle dépende de
- Suppression des symboles obsolètes :
- Suppression de
Player.EventListener. UtilisezPlayer.Listenerà la place. - Suppression de
MediaSourceFactory#setDrmSessionManager,MediaSourceFactory#setDrmHttpDataSourceFactoryetMediaSourceFactory#setDrmUserAgent. UtilisezMediaSourceFactory#setDrmSessionManagerProviderà la place. - Suppression de
MediaSourceFactory#setStreamKeys. UtilisezMediaItem.Builder#setStreamKeysà la place. - Suppression de
MediaSourceFactory#createMediaSource(Uri). UtilisezMediaSourceFactory#createMediaSource(MediaItem)à la place. - Suppression de
setTagdeDashMediaSource,HlsMediaSourceetSsMediaSource. UtilisezMediaItem.Builder#setTagà la place. - Suppression de
DashMediaSource#setLivePresentationDelayMs(long, boolean). UtilisezMediaItem.Builder#setLiveConfigurationetMediaItem.LiveConfiguration.Builder#setTargetOffsetMspour remplacer le fichier manifeste, ouDashMediaSource#setFallbackTargetLiveOffsetMspour 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
ActionFileetActionFileUpgradeUtil. Utilisez ExoPlayer 2.16.1 ou une version antérieure pour utiliserActionFileUpgradeUtilafin de fusionner les anciens fichiers d'action dansDefaultDownloadIndex. - Suppression de
ProgressiveMediaSource#setExtractorsFactory. Utilisez le constructeurProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)à la place. - Suppression de
ProgressiveMediaSource.Factory#setTagetProgressiveMediaSource.Factory#setCustomCacheKey. UtilisezMediaItem.Builder#setTagetMediaItem.Builder#setCustomCacheKeyà la place. - Suppression des constructeurs
DefaultRenderersFactory(Context, @ExtensionRendererMode int)etDefaultRenderersFactory(Context, @ExtensionRendererMode int, long). Utilisez plutôt le constructeurDefaultRenderersFactory(Context),DefaultRenderersFactory#setExtensionRendererModeetDefaultRenderersFactory#setAllowedVideoJoiningTimeMs. - Suppression de tous les constructeurs
CronetDataSourcepublics. UtilisezCronetDataSource.Factoryà la place.
- Suppression de
- Remplacement de
IntDefspar@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 packagecom.google.android.exoplayer2.ext.flac)@FlacExtractor.Flags(dans le packagecom.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
Playerqu'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.