Media3
| Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
|---|---|---|---|---|
| 22 octobre 2025 | 1.8.0 | - | - | 1.9.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.8.0" // 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 integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.8.0" // 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 integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // 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.9.0
Version 1.9.0-alpha01
22 octobre 2025
Publication d'androidx.media3:media3-*:1.9.0-alpha01.
La version 1.9.0-alpha01 contient ces commits.
- Bibliothèque commune :
- Mise à jour de
minSdkvers23pour l'aligner sur les autres bibliothèques AndroidX. - Ajoutez
PlayerTransferState, ce 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 du lecteur avant et après l'avoir défini sur zéro. - Publiez les classes utilitaires
WakeLockManager,WifiLockManager,AudioFocusManager,AudioBecomingNoisyManageretStuckPlayerDetectorprécédemment utilisées en interne parExoPlayerpour permettre leur réutilisation par 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'écouteur (#2675). - Ajoutez une fonction d'extension de suspension
Player.listenTodans la bibliothèquemedia3-common-ktxqui spécifie lePlayer.Eventsparticulier sur lequel agir. - Correction d'un plantage dans
BasePlayer.getBufferedPercentagerésultant d'un dépassement de capacité d'entier lorsque la position tamponnée signalée est beaucoup plus grande que la durée signalée (#2750).
- Mise à jour de
- ExoPlayer :
- Ajoutez une détection de lecteur bloqué 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_BUFFERINGsans progression de la mise en mémoire tampon. - Après 10 secondes de
STATE_READYsans 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 de la tentative de lecture.
- Après 10 minutes de
- Activez la gestion du verrouillage de l'écran par défaut pour résoudre les problèmes de mise en mémoire tampon lors de 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 à
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 renderers 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 pré-mise en cache 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 pré-mis en cache. - Utilisez la fonctionnalité de pré-mise en cache de
DefaultPreloadManagerdans l'application de démonstration Shortform. - Ajoutez des setters
DefaultLoadControl.Builderpour la lecture locale et ajustez les valeurs par défaut deDefaultLoadControlpour qu'elles fonctionnent bien avec un large éventail de fichiers locaux. - Correction d'un bug qui pouvait laisser le lecteur dans l'état
STATE_READYouSTATE_BUFFERINGlorsqu'une playlist vide était définie. - 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 multimédias ou les sources multimédias par lot, et appelez automatiquementinvalidate()par la suite. - Ajoutez
removeMediaItems((List<MediaItem>)etremoveMediaSources(List<MediaSource>)pour supprimer les éléments multimédias ou les 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'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 avant dans le même groupe d'images en mode d'avance rapide.
- Ajoutez
DefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)pour que les applications définissent une valeur d'octets de mémoire tampon cible pour un lecteur avec leplayerNamespécifié. LeDefaultLoadControlpeut désormais prendre des décisions pour chaque lecteur séparément en fonction de ses propres octets alloués et de ses octets de mémoire tampon cible. - Ajoutez
SkipInfoàAdPlaybackState.AdGrouppour inclure les informations sur la possibilité d'ignorer chaque annonce du groupe. - Correction d'un bug où l'appel de
removeMediaItems(List)pendant la lecture d'un post-roll entraînait un plantage (#2746). - Correction de certains problèmes de saccades lors de la lecture de playlists, où les frames étaient toujours définies par erreur comme le dernier échantillon et rendues.
- Activation du chemin de nouvelle tentative si le lecteur ne parvient pas à générer l'ID de session audio (#2382, #2678).
- Ajoutez la prise en charge pour contrôler le nombre total d'octets du tampon pour les sources dans
DefaultPreloadManagerafin d'éviter que le nombre total d'octets du tampon pour le préchargement ne croisse de manière arbitraire. Pour utiliser la logique de contrôle par défaut, les applications peuvent définir les octets de mémoire tampon cibles pour le préchargement viaDefaultLoadControl.Builder.setPlayerTargetBufferBytes(String, int)pour unplayerNamedePlayerId.Preload.name("preload") et injecter leDefaultLoadControlcréé viaDefaultPreloadManager.Builder.setLoadControl(LoadControl).
- Ajoutez une détection de lecteur bloqué 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. Il est probable que certaines API changent considérablement dans les prochaines versions. De plus, des problèmes et des limites connus existent pour certains cas d'utilisation (certains ne sont pas documentés). - Ajout de la prise en charge de
COMMAND_SET_AUDIO_ATTRIBUTESet de la gestion de la mise au point audio dansCompositionPlayer. - Ajout de la prise en charge de la modification de la vitesse dans les séquences secondaires de
CompositionPlayer.
- Publiez
- Transformateur :
- Utilisez
InAppMp4Muxercomme multiplexeur par défaut. - Ajoutez
EditedMediaItem.Builder#setSpeed()et abandonnezEffects#createExperimentalSpeedChangingEffects(). - Remplacez
forceAudioTracketforceVideoTrackpartrackTypesdansEditedMediaItemSequence.
- Utilisez
- Sélection de la piste :
- Ajoutez
TrackSelectionParameters.selectTextByDefaultpour préférer la sélection de n'importe quelle piste de texte sans spécifier d'autres préférences plus spécifiques. - Ajoutez
preferredVideoLabels,preferredAudioLabelsetpreferredTextLabelsdansTrackSelectionParameterspour spécifier une préférence pour les pistes portant un libellé spécifique, par exemple celles lues à partir des balises 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 factices 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).
- MP4 : faites la distinction entre les types MIME
audio/mpeg(MP3),audio/mpeg-L1etaudio/mpeg-L2en examinant la valeur du calque du premier échantillon avant d'émettre un format de piste à partir de l'extracteur (#2683). - MP4 : améliorez l'efficacité de l'analyse des fichiers très volumineux en supposant qu'une boîte
stblde plus de 1 Mo implique que le fichier ne doit pas être fragmenté (#2650). - Matroska : Ajout de la prise en charge de la détection DTS-HD (#6225).
- Correction d'un problème dans
MatroskaExtractoroù la recherche pouvait être 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. - 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 IDMVNMetMVIN, respectivement (#2754). - MPEG-TS : correction de
IllegalArgumentExceptionà partir deReorderingBufferQueuecausé par des paquets PES sans code temporel (#2764). - MP4 : Ignore les pistes dont le conteneur
stsdest manquant (au lieu d'échouer à analyser l'intégralité du fichier). - 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. - MP3 : remplacez
FLAG_ENABLE_INDEX_SEEKINGpour privilégier la recherche d'informations à partir des en-têtes de métadonnées (comme Xing et VBRI) lorsqu'ils 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 pour les fichiers avec des métadonnées de recherche (#2839).
- Inspecteur :
- Introduction d'un nouveau module
:media3-inspectorqui servira de page d'accueil dédiée aux utilitaires d'inspection des contenus multimédias. Ce module contient désormais un nouveauandroidx.media3.inspector.MetadataRetriever, qui fournira une API unifiée pour l'extraction des métadonnées et des frames. Leandroidx.media3.exoplayer.MetadataRetrieverexistant est désormais obsolète au profit de cette nouvelle version. - Introduction de
androidx.media3.inspector.FrameExtractor, une nouvelle API publique pour l'extraction d'images. Cette classeAutoCloseablepermet d'extraire des frames avec la prise en charge des vidéos HDR, des effets vidéo et de la sélection de décodeur personnalisé. Il doit être créé via sonBuilderpour unMediaItemspécifique. - FrameExtractor : ajoutez
getThumbnail()pour extraire un frame miniature représentatif d'un fichier multimédia sans nécessiter de code temporel spécifique.
- Introduction d'un nouveau module
- Audio :
- Rendez les instances
AudioProcessorconscientes de 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. - Utilisez les capacités de profil et de niveau du décodeur AC-4 dans l'évaluation de la compatibilité du format de piste (#2580).
- Évitez les retards potentiels causés par la gestion des rappels de modification du routage au début de la lecture (#2646).
- Autorisez la réutilisation du codec pour les formats EAC3, EAC3-JOC et AC-4 (#1346).
- Ajout de la prise en charge des échantillons PCM flottants dans
Sonic. - Ajout de la prise en charge des échantillons PCM 16 bits dans
ToFloatPcmAudioProcessor.
- Rendez les instances
- Vidéo :
- Désactivez la réutilisation du codec pour le contenu Dolby Vision avec différents profils.
- Texte :
- Correction de l'analyse des sous-titres CEA-6/708 dans le contenu Dolby Vision (#2775).
- Image :
- Correction d'un problème lié à ScrubbingMode où le lecteur se bloque lors du déplacement sur une piste de miniatures DASH (#2815).
- DRM :
- Le type renvoyé des méthodes
MediaDrmCallbackest passé debyte[]à un nouveau typeMediaDrmCallback.Responsepour 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 l'ancienne valeur de retourbyte[]avecnew Responseavant de la renvoyer. - Ajout d'informations sur les demandes de clés, telles que l'URL et la latence, à
AnalyticsListener.onDrmKeysLoaded(#1001). - Déplacez les données de la demande de provisionnement d'un paramètre d'URL vers le corps POST.
- Le type renvoyé des méthodes
- Muxers :
- Ajout de
MediaMuxerCompat, un remplacement direct pour le frameworkMediaMuxer. - Ajoutez
MuxerUtil.createMotionPhotoFromJpegImageAndBmffVideo()pour autoriser la création de photos animées. - Ajoutez
WebmMuxerpour autoriser 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.
- Ajoutez
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 de réseau, consultez cet article. - Passage de la dépendance IMA à la version 3.37.0, qui nécessite l'activation de la désucrage 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'UI personnalisées pour l'insertion d'annonces côté serveur incluent la compatibilité avec l'affichage des options "Ignorable" et "À propos de cette annonce". Cette fonctionnalité est actuellement disponible pour certains éditeurs qui figurent sur une liste d'autorisation. Cette modification permet également de mettre à niveau la version du SDK IMA vers la version 3.38.0 (notes de version) pour accéder à l'API des options d'UI personnalisées.
- Session :
- Ajout d'un nouveau paramètre à
MediaSession.Callback.onPlaybackResumptionpour indiquer si l'appel sert uniquement à collecter des informations ou à démarrer la lecture (#1764). - Mise à jour de
MediaSession.ControllerInfo.isTrustedpour déclarer également les contrôleurs de l'application propre comme fiables (#2542). - Ajout de
MediaSessionService.triggerNotificationUpdatepour déclencher manuellement une mise à jour des notifications (#1833). - Ajoutez
ProgressListeneraux méthodes de commande personnalisées. - Remplacez la valeur par défaut de
MediaLibrarySession.Builder.setLibraryErrorReplicationModepar une valeur non fatale. - Ajoutez 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 les uns aux autres. - Correction d'un bug qui entraînait le filtrage des événements clés
ACTION_UPavant de les transmettre au rappel pour une gestion personnalisée. Cela permet d'atteindre la parité avec ce que media1 faisait et ce que la plate-forme 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 du Looper principal, ce qui entraînait une fuite de mémoire après l'arrêt du service (#2692).
- Lorsqu'une application de session ancienne est connectée à un
MediaBrowser, les commandes personnalisées ne sont envoyées à la session que si l'action personnalisée est annoncée comme action personnalisée dansPlaybackStateCompatde la session ancienne. Toutes les autres actions personnalisées sont envoyées au service. - Implémentation de
onAudioSessionIdChangedpour notifier les contrôleurs multimédias lorsqu'un ID de session audio est défini par la session (#244). - Correction d'un bug qui empêchait
KEYCODE_HEADSETHOOKde démarrer le lecteur lors de l'arrivée de l'événement de touche multimédiaIntentdansonStartCommand(). Ce problème est résolu en traitant "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 entraînait l'échec de l'application des effets vidéo dans la session de démonstration. Si vous utilisez une manette, il s'agit peut-être d'un changement cassant si votre lecteur ne peut pas gérer un appel
setVideoSurfaceHolder. - Correction de la propagation des valeurs de métadonnées
CharSequencenon-String, comme les chaînes avec style span (#2853).
- Ajout d'un nouveau paramètre à
- Interface utilisateur :
- Ajoutez la classe
ProgressStateWithTickIntervalet le composablerememberProgressStateWithTickIntervalcorrespondant au modulemedia3-ui-compose. Ce détenteur d'état est utilisé dansdemo-composepour afficher la position et la durée actuelles sous forme de texte. - Ajoutez
MuteButtonStateàui-composequi gère la désactivation du volumePlayer. Ce support d'état est utilisé dansdemo-composepour afficher le bouton bascule permettant d'activer ou de désactiver le son. - Ajoutez les classes
ProgressStateWithTickCountet le composablerememberProgressStateWithTickCountcorrespondant au modulemedia3-ui-compose. Ce support d'état est utilisé dansdemo-composepour afficher la progression sous forme de barre de progression horizontale en lecture seule. - Ajoutez le composable
ContentFrameàmedia3-ui-compose, qui combine la gestionPlayerSurfaceavec le redimensionnement du format et la couverture avec un obturateur. - Contournement d'un bug connu de la plate-forme API 34 qui provoque l'étirement/le recadrage des vidéos lors de l'utilisation de
SurfaceViewdans unAndroidViewCompose, affectant ainsi 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). - Ajout de la prise en charge de l'emplacement d'un bouton de route multimédia dans
PlayerView.
- Ajoutez la classe
- Extension HLS :
- Analysez les attributs de désactivation des interstitiels HLS.
- Mappez les attributs de contrôle d'ignorance de la playlist HLS et du document de liste d'éléments dans
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).
- Utilisez la recherche binaire pour trouver l'index de segment d'une position donnée dans la playlist (#2826).
- Extension DASH :
- Correction de
UnsupportedOperationExceptionlors de la lecture de flux DASH avec un fichier manifeste d'URIdata:non hiérarchique (#2688). - Réinitialisez
LiveConfigurationsur la valeur fournie parMediaItemdeDashMediaSourcelors de la libération et lorsque l'élément multimédia est mis à jour par l'utilisateur (#2606). - Éviter les plantages causés par des mises à jour de fichier manifeste non valides qui n'ont pas été signalées comme 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, qui remplace l'implémentationlibgav1précédente pour améliorer la vitesse de décodage.
- 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 la diffusion Cast. Pour conserver l'ancien comportement deCastPlayerqui ne prend en charge que la lecture Cast, vous pouvez utiliserRemoteCastPlayer. Les constructeursCastPlayerpréexistants conservent leur ancien comportement, mais sont obsolètes au profit des constructeursCastPlayerouRemoteCastPlayer. - Arrêtez d'appliquer un type MIME non nul dans
DefaultMediaItemConverter. - Utilisez
MediaItem.mediaMetadata.mediaTypepour déduire le MEDIA_TYPE Cast à utiliser dansDefaultCastOptionsProvider#toMediaQueueItem, le cas échéant. - Activez les transferts à distance vers le local dans
DefaultCastOptionsProvider. - Ajout de la prise en charge de Cast dans la démo de session.
- Ajout de la prise en charge de l'affichage d'un bouton de route média sur une interface utilisateur composable.
- Ajoutez la prise en charge de l'affichage d'un bouton de route média dans un menu de barre d'action.
- Ajout de la prise en charge de l'affichage d'un bouton de route multimédia en tant qu'interface utilisateur View.
- 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 peut être configurée viaFakeClock.Builder. - Ajoutez la différence de temps maximale entre les messages pour
RobolectricUtil.runMainLooperUntil(etrunLooperUntil). La valeur par défaut est de 1 seconde, mais elle peut être configurée via de nouvelles surcharges de ces méthodes. - Déplacez
CapturingRenderersFactorydetest-utilsverstest-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 du constructeur
Version 1.8.0
Version 1.8.0
30 juillet 2025
La version 1.8.0 contient ces commits.
- 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ère une exception plus clairement si
DefaultAudioSinkest accessible à partir de plusieurs threads. Si cela se produit en raison d'un appel àRendererCapabilities.getFormatSupporten dehors du lecteur, assurez-vous d'appeler cette méthode sur le même thread que le thread de lecture d'ExoPlayer ou d'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 (qui est activé par défaut en mode lecture rapide). - Ajoutez la prise en charge de l'utilisation de l'ID de l'appareil virtuel à partir de
Contexttransmis àExoPlayer.Builder. - Activez la programmation dynamique par défaut en mode Scrubbing.
- Évitez le rechargement inutile d'une source lorsque vous recherchez la fin d'un élément.
- Utilisez
MediaCodec.BUFFER_FLAG_DECODE_ONLYpar défaut en mode Scrubbing. - Génération de
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). - Modifiez le 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 de la vidéo en mode pause. Pour le moment, la correction de bug ne prend effet que si
ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabledest activé. - Ajoutez la méthode
ExoPlayer.setScrubbingModeEnabled(boolean). Cela permet d'optimiser le lecteur pour de nombreuses recherches fréquentes (par exemple, lorsqu'un utilisateur fait glisser une barre de défilement). Le comportement du mode Scrubbing peut être personnalisé avecsetScrubbingModeParameters(..)surExoPlayeretExoPlayer.Builder. - Autoriser la personnalisation de la tolérance de recherche fractionnée en mode Scrubbing.
- Augmentez le débit du codec en mode Scrubbing.
- Correction d'un bug qui empêchait parfois le signalement des 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 de sous-titres (#2338). - Autoriser
CmcdConfiguration.Factoryà renvoyernullpour désactiver la journalisation CMCD pour des éléments multimédias spécifiques (#2386). - Augmentez la taille du tampon d'image par défaut de 128 Ko (erreur de copier-coller à partir des pistes de texte) à 26 Mo, ce qui est suffisant pour les images Ultra HDR de 50 MP (#2417).
- Ajout de
PreCacheHelperqui permet aux applications de précharger un seul élément 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
CodecDbLitepour permettre des optimisations spécifiques au chipset des paramètres d'encodage vidéo. - Ajoutez l'option
setEnableCodecDbLiteàDefaultEncoderFactorypour activer l'optimisation des paramètres CodecDB Lite. Par défaut, ce signalement est défini sur "false". - Pour combler un silence initial (ajouté via
addGap()) avec de l'audio silencieux, vous devez désormais définir explicitementexperimentalSetForceAudioTrack(true)dansEditedMediaItemSequence.Builder. Si le trou se trouve au milieu de la séquence, ce signalement n'est pas nécessaire. - Déplacez l'interface
Muxerdemedia3-transformerversmedia3-muxer. - Rendez 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 modifications MP4 lors du découpage, pour indiquer aux lecteurs d'ignorer les échantillons entre l'image clé avant le point de début du découpage et le point de début du découpage. - Mettez à jour l'application de démonstration Composition 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 du flagFLAG_MERGE_FRAGMENTED_SIDXsurFragmentedMp4Extractor(#9373). - Ignorer les tables de recherche vides dans les fichiers FLAC (y compris celles qui ne contiennent que des points de recherche de substitution) 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 prise en charge des boîtes
ipcmetfpcmdéfinissant les pistes audio PCM brutes (le PCM à virgule flottante 64 bits n'est pas pris en charge). - MP4 : gérez la partie rotation des matrices de transformation
tkhdqui font à la fois pivoter et refléter la vidéo. Cela permet de s'assurer que les vidéos réfléchies prises par la caméra avant de l'iPhone s'affichent à l'endroit, mais qu'elles sont mal réfléchies sur l'axe Y (#2012). - MP3 : utiliser la durée et la taille des données à partir des métadonnées Xing, VBRI et similaires à débit variable non consultables lors du retour à la recherche à 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 commençait très près de la fin du contenu multimédia. - Ajoutez la prise en charge de tous les formats d'échantillons PCM linéaires dans
ChannelMappingAudioProcessoretTrimmingAudioProcessor. - Ajout de la prise en charge des silences dans
CompositionPlayer. - Supprimez 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-flux dansDefaultAudioSinkau lieu d'une estimation au mieux. - Amélioration du lissage des codes temporels audio en cas de décalage inattendu de la position du périphérique de sortie audio.
- Correction d'un bug qui entraînait une désynchronisation audio/vidéo pendant les 10 premières secondes après la reprise de la lecture depuis une pause lorsque l'appareil était connecté à des appareils Bluetooth.
- Correction d'un bug qui empêchait
AnalyticsListener.onAudioPositionAdvancingd'indiquer l'heure à laquelle l'audio avait commencé à avancer, mais indiquait l'heure de la première mesure. - Correction de la récupération de l'audio multicanal après le retour à l'audio stéréo sur certains appareils (#2258).
- Correction d'un bug qui empêchait l'appel de
- Vidéo :
- Étendre la solution de contournement de la surface détachée 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.
- Étendre 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 en mode décodage uniquement. Cet indicateur signale au décodeur qu'il doit ignorer les tampons de décodage uniquement, ce qui permet une recherche plus rapide. Activez-le avecDefaultRenderersFactory.experimentalSetEnableMediaCodecBufferDecodeOnlyFlag. - Amélioration des vérifications des performances des codecs pour les codecs vidéo logiciels. Cela peut entraîner le marquage de certains titres supplémentaires comme
EXCEEDS_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-titres 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 lorsque les sous-titres sont activés (#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 illisibles lors de la lecture de flux H.262 contenant des B-frames (#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 du contenu multimédia et de
TimelineàMetadataRetriever, et migration vers une APIAutoCloseablebasée sur les instances. Utilisez le nouveauBuilderpour créer une instance pour unMediaItem, puis appelezretrieveTrackGroups(),retrieveTimeline()etretrieveDurationUs()pour obtenir desListenableFuturepour les métadonnées. Les méthodes statiques précédentes sont désormais obsolètes (#2462).
- Ajout de la prise en charge de la récupération de la durée du contenu multimédia et de
- Image :
- Limitez les bitmaps décodés à la taille de l'écran dans
BitmapFactoryImageDecoderpour éviter qu'une application plante avecCanvas: trying to draw too large bitmap.à partir dePlayerViewlors de la tentative d'affichage d'images très volumineuses (par exemple, 50 MP). - Modifiez la signature de
DefaultRenderersFactory.getImageDecoderFactory()pour qu'elle accepte un paramètreContext. - Alignez la taille de sortie bitmap maximale utilisée dans
CompositionPlayeravec celle déjà utilisée dansTransformer(ce qui signifie queCompositionPlayerne tient pas compte de la taille de l'écran lors du décodage des bitmaps, contrairement àExoPlayer).
- Limitez les bitmaps décodés à la taille de l'écran dans
- DRM :
- Ajoutez une nouvelle surcharge de
OfflineLicenseHelper.newWidevineInstanceacceptant unMediaItem.DrmConfigurationafin que les en-têtes de requête HTTP puissent être appliqués correctement (#2169).
- Ajoutez une nouvelle surcharge de
- Effet :
- Ajoutez
Presentation.createForShortSide(int)qui crée unPresentationqui garantit que le côté le plus court correspond toujours à la valeur donnée, quelle que soit l'orientation de l'entrée.
- Ajoutez
- Muxers :
- Correction d'un bug qui empêchait la définition des indicateurs d'échantillon corrects 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 pouvait entraîner l'invalidation accidentelle d'un autre groupe d'annonces en cas d'erreur de chargement dans une annonce.
- Correction d'un bug qui entraînait l'arrêt de la lecture des groupes d'annonces après la fin d'une fenêtre VOD.
Les groupes d'annonces dont l'heure de début est postérieure à la période ne sont plus mis en file d'attente dans
MediaPeriodQueue(#2215).
- Session :
- Correction d'un bug à cause duquel les connexions des contrôleurs Media3 non privilégiés tiers sont ignorées.
- Supprimez la vérification des commandes disponibles lorsque vous envoyez des commandes personnalisées à un
MediaBrowserServiceCompatancien. Ce comportement est identique à celui des anciens navigateurs et manettes 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 où certains changements de contrôleur qui ne sont pas gérés par la session peuvent entraîner
IllegalStateExceptions. - Correction d'un bug qui pouvait laisser le contrôleur dans un état non valide lorsque les 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 entraînait une
IllegalStateExceptionlors de l'appel desetSessionExtrasdepuis le thread principal lorsque le lecteur était exécuté à partir d'un autre thread d'application (#2265). - Ne pas afficher 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 certains d'entre eux. - Correction d'un bug où la recherche dans une diffusion en direct sur un
MediaControllerpouvait entraîner unIllegalArgumentException. - 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 plate-forme, afin d'éviter les artefacts de position dans l'UI Android Auto (et d'autres contrôleurs utilisant ces informations à partir de la session multimédia de la plate-forme) (#1758).
- Correction d'un bug qui entraînait la production d'un
NullPointerExceptionlorsqu'une valeur nulle était transmise àgetLibraryRootd'unMediaBrowserconnecté à un ancienMediaBrowserServiceCompat. - Correction d'un bug qui entraînait le plantage de l'ancienne application de session avec un
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 entraînait le partage de
MediaItem.LocalConfiguration.uriavec leMediaMetadatades sessions 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 du bug qui empêchait
PlayerSurfacede fonctionner correctement dans les composants réutilisables tels queLazyColumn(#2493). - Correction d'un bug Compose qui entraînait un décalage 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 détenteurs d'état et des composables au module
media3-ui-composepourSeekBackButtonStateetSeekForwardButtonState. - Ajoutez la prise en charge du mode de recherche d'ExoPlayer à
PlayerControlView. Lorsqu'il est activé, le lecteur passe en mode d'avance rapide lorsque l'utilisateur commence à faire glisser la barre de défilement, émet un appelplayer.seekTopour chaque mouvement, puis quitte le mode d'avance rapide lorsque le doigt est retiré de l'écran. Cette intégration peut être activée avectime_bar_scrubbing_enabled = truedans XML ou la méthodesetTimeBarScrubbingEnabled(boolean)à partir de Java/Kotlin. - Faites en sorte que
PlayerSurfaceaccepte un argumentPlayerpouvant être nul.
- Correction du 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'assistant en spécifiant les positions de début et de fin du contenu multimédia basé sur le temps que le téléchargement doit couvrir. LeDownloadRequestrenvoyé contient la plage d'octets résolue, avec laquelle unProgressiveDownloaderpeut être créé et le contenu téléchargé en conséquence. - Ajoutez
DownloadHelper.Factoryavec lequel les méthodesDownloadHelper.forMediaItem()statiques sont remplacées. - Ajoutez
Factorypour les implémentationsSegmentDownloader. - 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 basé sur le temps que le téléchargement doit couvrir. LeDownloadRequestrenvoyé contient la plage de temps résolue, avec laquelle unSegmentDownloaderconcret peut être créé et le contenu téléchargé 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'il n'y a aucun bloc 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 piste changeait après le chargement de parties à faible latence et que les indications de préchargement pouvaient entraîner le blocage ou le gel de la lecture (#2299).
- Empêche les rechargements excessifs 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 entraînait l'arrêt de la lecture lors du démarrage d'un flux d'annonces interstitielles avant un mid-roll et où la résolution de la liste d'assets était tentée 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).
- Regroupez les rendus de sous-titres par balise NAME, comme les rendus audio le sont déjà (#1666).
- Prise en charge de X-ASSET-LIST et des 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 rapide avec son ensemble d'adaptation principal pour former un
TrackGroupnon valide (#2148). - Correction d'un bug qui pouvait entraîner 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 le suivi de la redirection lors de l'utilisation des paramètres de requête CMCD (#2475).
- Correction d'un problème qui entraînait la fusion de l'ensemble d'adaptation de lecture rapide avec son ensemble d'adaptation principal pour former un
- Extension RTSP :
- Ajout de la prise en charge du paquet d'agrégation RTP pour H265 conformément à la section 4.4.2 de la RFC 7798 (#2413).
- Correction de
RtspClientpour utiliser l'URI de localisation tel qu'il est 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 caractères d'espacement de fin (#2357).
- Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
- Correction d'un bug où
DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChangen'a aucun effet pour les extensions de décodeur audio (#2258).
- Correction d'un bug où
- Extension Cast :
- Utilitaires de test :
- Ajoutez
advance(player).untilPositionAtLeastetuntilMediaItemIndexàTestPlayerRunHelperpour faire avancer le lecteur jusqu'à une position spécifiée. 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.- Le préfixe "exotest" a été remplacé par "media3" dans les noms de codecs signalés par
ShadowMediaCodecConfig.
- Ajoutez
- 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
Player.hasNext()etPlayer.hasNextWindow()obsolètes. 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
Player.seekToNextWindow()obsolète. UtilisezPlayer.seekToNextMediaItem()à la place. - Suppression de
BaseAudioProcessor, qui est 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 contient 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 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 entraînait l'échec de la transition d'un élément multimédia en raison d'une erreur de rendu récupérable lors de l'initialisation de l'élément multimédia suivant (#2229).
- Correction du problème où
ProgressiveMediaPeriodgénère uneIllegalStateExceptionlorsquePreloadMediaSourcetente d'appeler songetBufferedDurationUs()avant qu'il ne soit prêt (#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 piste (#2242).
- MP4 : Analyse
- Audio :
- Correction d'un problème de déchargement où la position pouvait rester bloquée lors de la lecture d'une playlist de contenus courts (#1920).
- Session :
- Réduction du délai d'agrégation pour les rappels de 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 que l'utilisateur les avait fermées (#2302).
- Correction d'un bug où la session renvoyait une timeline à un seul élément alors que le lecteur encapsulé était en fait vide. Cela se produisait lorsque le lecteur encapsulé ne disposait pas de
COMMAND_GET_TIMELINEalors queCOMMAND_GET_CURRENT_MEDIA_ITEMétait disponible et que le lecteur encapsulé était vide (#2320). - Correction d'un bug qui entraînait l'ignorance silencieuse de 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 plate-forme
- Interface utilisateur :
- Activez
PlayerSurfacepour qu'il fonctionne avecExoPlayer.setVideoEffectsetCompositionPlayer. - Correction d'un bug qui empêchait de recomposer
PlayerSurfaceavec un nouveauPlayer.
- Activez
- Extension HLS :
- Correction d'un problème qui empêchait la définition de la durée des blocs dans
CmcdDatapour les contenus multimédias HLS, ce qui entraînait un échec de l'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 des blocs 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 prise en charge des métadonnées de playlist (#2235).
1.6.0
26 mars 2025
Publication d'androidx.media3:media3-*:1.6.0.
La version 1.6.0 contient ces commits.
- Bibliothèque commune :
- Ajoutez
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. Mettez à niveau 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). Utilisez plutôtFormat.toBundle(). - Correction d'un bug dans
SimpleBasePlayeroù la définition d'un nouveaucurrentMediaItemIndexdansStateaprèssetPlaylistavecnullMediaMetadatane réévalue pas les métadonnées (#1940). - Modifiez l'accès
SimpleBasePlayer.Statede protégé à public pour faciliter la gestion des mises à jour dans d'autres classes (#2128).
- Ajoutez
- ExoPlayer :
- Ajoutez
MediaExtractorCompat, une nouvelle classe qui fournit des fonctionnalités équivalentes à la plate-formeMediaExtractor. - Ajout de la prise en charge expérimentale du préchauffage "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 pour 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 activé à l'aide desetDeviceVolumeControlEnabled). Ces valeurs ne sont pas disponibles immédiatement aprèsExoPlayer.Builder.build(), etPlayer.Listenernotifie les modifications viaonDeviceInfoChangedetonDeviceVolumeChanged. - L'ID de session audio initiale 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" qui correspond à la langue de la piste audio sélectionnée, si disponible. Les préférences explicites concernant la langue des vidéos peuvent être exprimées avec
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s). - Ajoutez le paramètre
selectedAudioLanguageà la méthodeDefaultTrackSelector.selectVideoTrack(). - Ajoutez le paramètre
retryCountàMediaSourceEventListener.onLoadStartedet aux méthodesMediaSourceEventListener.EventDispatchercorrespondantes. - Correction d'un bug où les éléments de playlist ou les périodes dans les flux DASH multipériodes dont les durées ne correspondent pas au contenu réel pouvaient entraîner des blocages d'images à la fin de l'élément (#1698).
- Déplacez
BasePreloadManager.Listenervers unPreloadManagerListenerde premier niveau. RenderersFactory.createSecondaryRendererpeut être implémenté pour fournir des renderers secondaires pour le préchauffage. Le préchauffage permet des transitions plus rapides 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 croître en ajoutant des groupes d'annonces. Des modifications non valides sont détectées et une exception est générée. - Correction du problème lié à l'affichage d'images supplémentaires en mode décodage uniquement qui peuvent s'afficher rapidement et successivement lors de la transition vers le 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éévaluez si le chargement en cours d'un fragment doit être annulé lorsque la lecture est suspendue (#1785).
- Ajoutez l'option
ClippingMediaSourcepour autoriser le découpage dans les contenus multimédias non séquentiels. - Correction d'un bug qui pouvait bloquer la transition vers l'élément multimédia suivant lors de la recherche avec préchauffage.
- Correction d'un bug qui entraînait le maintien de
ExoPlayer.isLoading()surtruealors qu'il était passé àSTATE_IDLEouSTATE_ENDED(#2133). - Ajout de
lastRebufferRealtimeMsàLoadControl.Parameter(#2113).
- Ajoutez
- Transformateur :
- Ajout de la prise en charge du transmuxage dans d'autres formats rétrocompatibles.
- Ajout de la prise en charge du transcodage et du 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. - Active 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 de performances à la plate-forme, ce qui permet de fournir des informations sur les performances du système et le débogage sur l'appareil. Ces données peuvent également être collectées par Google si le partage des données d'utilisation et de diagnostic est activé par l'utilisateur de l'appareil. Les applications peuvent cesser de contribuer aux diagnostics de plate-forme pour 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 flux audio compressé à débit constant où l'en-tête du flux stocke le nombre d'octets au lieu du nombre de blocs.
- 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 à un frame non synchronisé sans frame de synchronisation précédent (#2062). - Correction d'un problème de blocage des flux TS sur certains appareils (#2069).
- FLAC : ajout de la compatibilité avec les fichiers FLAC 32 bits. Auparavant, ces vidéos ne pouvaient pas être lues avec
IllegalStateException: Playback stuck buffering and not loading(#2197).
- Audio :
- Correction de
onAudioPositionAdvancingpour qu'il soit appelé lorsque la lecture reprend (auparavant, il était appelé lorsque la lecture était mise en pause). - Ne contournez pas
SonicAudioProcessorlorsqueSpeedChangingAudioProcessorest configuré avec des paramètres par défaut. - Correction du problème de dépassement 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. - Définissez
androidx.media3.common.audio.SonicAudioProcessorcomme numéro définitif. - Ajout de la prise en charge de float PCM à
ChannelMappingAudioProcessoretTrimmingAudioProcessor.
- Correction de
- Vidéo :
- Remplacez
MediaCodecVideoRenderer.shouldUsePlaceholderSurfacepar "protected" afin que les applications puissent remplacer pour bloquer l'utilisation des surfaces d'espace réservé (#1905). - Ajout de l'analyse des dépendances d'échantillons AV1
ExoPlayerexpérimentale pour accélérer la recherche. Activez-le avec la nouvelle APIDefaultRenderersFactory.experimentalSetParseAv1SampleDependencies. - Ajout de l'API expérimentale
ExoPlayerpour supprimer les tampons d'entrée du décodeurMediaCodecVideoRenderertardifs dont il n'a pas besoin. Activez-le avecDefaultRenderersFactory.experimentalSetLateThresholdToDropDecoderInputUs. - Correction d'un problème qui empêchait un lecteur sans surface d'être prêt immédiatement et de décoder très lentement les frames en attente (#1973).
- Excluez les appareils Xiaomi et OPPO du mode Surface détachée pour éviter le scintillement de l'écran (#2059).
- Remplacez
- Texte :
- Ajout de la prise en charge des sous-titres VobSub (#8260).
- Arrêt du chargement anticipé 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 piste (#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 incorrectement n'importe quel nombre de décimales, mais nous supposions toujours que la valeur était en millisecondes, ce qui entraînait des codes temporels incorrects (#1997).
- Correction du 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 avec une durée nulle (heure de début et de fin identiques) (#2052). - Suppression (et journalisation) des erreurs d'analyse des sous-titres lorsque ceux-ci 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 autoriser les paramètres de superposition dynamique.
- La fonctionnalité de
- Muxers :
MuxerExceptiona été déplacé hors de l'interfaceMuxerpour éviter un nom complet très long.- Remplacement du nom de la méthode
setSampleCopyEnabled()parsetSampleCopyingEnabled()dansMp4Muxer.BuilderetFragmentedMp4Muxer.Builder. Mp4Muxer.addTrack()etFragmentedMp4Muxer.addTrack()renvoient désormais un ID de pisteintau lieu d'unTrackToken.Mp4MuxeretFragmentedMp4Muxern'implémentent plus l'interfaceMuxer.- Désactivation par défaut du traitement par lot et de la copie des exemples
Mp4Muxer. - Correction d'un bug dans
FragmentedMp4Muxerqui crée de nombreux fragments lorsque seule la piste audio est écrite.
- 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 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(). - Maintenir la notification visible lorsque la lecture entre dans un é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 ACTION_PLAY et ACTION_PAUSE de la plate-forme Android pour n'en définir qu'une seule en fonction des commandes disponibles et accepter également si une seule d'entre elles est définie.
- Ajoutez
Contexten tant que paramètre àMediaButtonReceiver.shouldStartForegroundService(#1887). - Correction d'un bug qui entraînait la suppression des modifications d'une mise à jour en attente lors de l'appel d'une méthode
Playersur unMediaControllerconnecté à une ancienne session. - Accepter la valeur nulle pour
MediaSession.setSessionActivity(PendingIntent)(#2109). - Correction d'un bug qui empêchait la suppression d'une notification obsolète 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 restrictions de service de premier plan sur différents appareils. Notez que l'appel de
- Interface utilisateur :
- Ajoutez des détenteurs d'état et des composables au module
media3-ui-composepourPlayerSurface,PresentationState,PlayPauseButtonState,NextButtonState,PreviousButtonState,RepeatButtonState,ShuffleButtonStateetPlaybackSpeedState.
- Ajoutez des détenteurs d'état et des composables au module
- Téléchargements :
- Correction d'un 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 unExceptionautre queIOException(#9760).
- Correction d'un 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 auAdPlaybackStatetransmis auAdsMediaSource. Cette première version n'est compatible qu'avec les flux VOD HLS comportant des 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 niveau 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:supplementalCodecsdu 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 du 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.) :
- Ajoutez le 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 :
- Insérez des instances
AudioSinketAudioRendererEventListenerpersonnalisées dansMidiRenderer.
- Insérez des instances
- Extension Cast :
- Mettez à jour la dépendance
play-services-cast-frameworkvers la version 21.5.0 pour corriger un plantageFLAG_MUTABLEdans les applications ciblant l'API 34 ou version ultérieure sur les appareils sur lesquels les services Google Play sont installés, mais désactivés (#2178).
- Mettez à jour 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 de la mise à l'échelle 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(), utilisezEditedMediaItem.Builder.setRemoveAudio()pour supprimer l'audio deEditedMediaItemtransmis àTransformer.start()à la place.setRemoveVideo(), utilisezEditedMediaItem.Builder.setRemoveVideo()pour supprimer la vidéo deEditedMediaItemtransmise àTransformer.start().setFlattenForSlowMotion(), utilisezEditedMediaItem.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).
- Supprimez la classe
TransformationResultobsolète. Utilisez plutôtExportResult. - Supprimez 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. - Suppression de
ExoPlayer.VideoComponent,ExoPlayer.AudioComponent,ExoPlayer.TextComponentetExoPlayer.DeviceComponent. - 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().
- Constructeur
- Suppression de la méthode
PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). UtilisezPlayerNotificationManager.setMediaSessionToken(MediaSession.Token)et transmettez-le dans(MediaSession.Token) compatToken.getToken()à la place.
- 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 d'attente du codec signalés avec cette API de plate-forme (#1641).
- Extracteurs :
- MP3 : la lecture ne s'arrête pas 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 : la lecture ne s'arrête pas prématurément lorsque la table des matières d'un frame
- Vidéo :
- Restauration de l'utilisation des valeurs de proportions de pixels
MediaCodecAdapterfournies lors du traitement deonOutputFormatChanged(#1371).
- Restauration de l'utilisation des valeurs de proportions de pixels
- Texte :
- Correction d'un bug dans
ReplacingCuesResolver.discardCuesBeforeTimeUsoù le repère actif àtimeUs(démarré avant, mais pas encore terminé) était supprimé à tort (#1939).
- Correction d'un bug dans
- Métadonnées :
- Extraction du numéro de disque/de piste et du genre des commentaires Vorbis dans
MediaMetadata(#1958).
- Extraction du numéro de disque/de piste et du genre 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
ForwardingSimpleBasePlayerqui 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
SimpleBasePlayer.State.playlistpar la méthodegetPlaylist(). - Ajoutez un remplacement pour
SimpleBasePlayer.State.Builder.setPlaylist()afin de spécifier directement unTimelineet lesTracksetMetadataactuels au lieu de créer une structure de playlist. - Augmentez
minSdkà 21 (Android Lollipop). Cela correspond à toutes les autres bibliothèques AndroidX. - Ajoutez l'artefact
androidx.media3:media3-common-ktxqui fournit des fonctionnalités spécifiques à Kotlin basées sur la bibliothèque Common. - Ajoutez la fonction d'extension de suspension
Player.listenpour lancer une coroutine afin d'écouterPlayer.Eventsdans la bibliothèquemedia3-common-ktx. - Supprimez les annotations
@DoNotInlinedes classes internes manuellement mises en ligne pour éviter les échecs de validation des classes au moment de l'exécution. Les versions récentes de R8 mettent désormais automatiquement hors ligne les appels de ce type 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 le fait, 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 de mise en ligne automatique similaire afin d'éviter les échecs de validation de classe au moment de l'exécution. Cette modification a déjà été apportée à d'autres bibliothèques AndroidX.
- Ajout de
- ExoPlayer :
MediaCodecRenderer.onProcessedStreamChange()peut désormais être appelé pour chaque élément multimédia. Auparavant, il n'était pas appelé pour le premier. Pour l'activer, utilisezMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart().- Ajoutez
PreloadMediaSource.PreloadControl.onPreloadErrorpour permettre aux implémentationsPreloadMediaSource.PreloadControld'effectuer des actions en cas d'erreur. - Ajoutez
BasePreloadManager.Listenerpour propager les événements de préchargement aux applications. - Autoriser la modification du délai avant expiration du client SNTP et la nouvelle tentative d'adresses alternatives en cas de délai avant expiration (#1540).
- Supprimez
MediaCodecAdapter.Configuration.flags, car ce champ a toujours été défini sur zéro. - Permet à l'utilisateur de sélectionner le haut-parleur intégré pour la lecture sur Wear OS API 35+ (lorsque l'appareil indique qu'il est compatible).
- Différez l'appel de blocage à
Context.getSystemService(Context.AUDIO_SERVICE)jusqu'à ce que la gestion de la priorité audio soit activée. Cela permet de s'assurer que l'appel bloquant n'est pas effectué si la gestion de la priorité audio n'est pas activée (#1616). - Autoriser la lecture quelle que soit la durée mise en mémoire tampon en cas d'échec du chargement (#1571).
- Ajoutez
AnalyticsListener.onRendererReadyChanged()pour signaler quand les renderers individuels autorisent la lecture à être prête. - Correction du problème qui fait que
MediaCodec.CryptoExceptionest parfois signalé comme une "erreur d'exécution inattendue" lorsqueMediaCodecest utilisé en mode asynchrone (comportement par défaut sur l'API 31 et versions ultérieures). - Transmettez
bufferedDurationUsau lieu debufferedPositionUsavecPreloadMediaSource.PreloadControl.onContinueLoadingRequested(). De plus,DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MSest remplacé parDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS. Les applications doivent alors 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 transmet 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 l'utilisateur a activé le préchargement et pour ne pas interférer avec la lecture,DefaultLoadControllimite le préchargement au démarrage et à la poursuite uniquement lorsque le lecteur n'est pas en train de charger la lecture. Les applications peuvent modifier ce comportement en implémentantLoadControl.shouldContinuePreloading()en conséquence (comme lors du remplacement de 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. - Ajoutez la méthode
MediaSourceEventListener.EventDispatcher.dispatchEvent()pour permettre l'appel d'événements d'écouteurs de sous-classe (1736). - Ajoutez
DefaultPreloadManager.Builderqui crée les instancesDefaultPreloadManageretExoPlayeravec des configurations partagées de manière cohérente. - Supprimez le paramètre
Renderer[]deLoadControl.onTracksSelected(), car l'implémentationDefaultLoadControlpeut récupérer les types de flux à partir deExoTrackSelection[]. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])obsolète et méthode 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 la création d'événements de début/d'erreur/d'annulation/d'achèvement du 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.
Au lieu de cela, la piste problématique est désactivée et la lecture des pistes restantes se poursuit (#1722).
- Dans la nouvelle gestion des sous-titres (lors de 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'ancienne gestion des sous-titres (lors du rendu), seules les erreurs de chargement associées sont émises via les rappels
onLoadError, tandis que les erreurs d'analyse sont ignorées silencieusement (comportement préexistant).
- Dans la nouvelle gestion des sous-titres (lors de 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 où les éléments de playlist ou les périodes dans les flux DASH multipériodes dont les durées ne correspondent pas au contenu réel pouvaient entraîner des blocages d'images à la fin de l'élément (#1698).
- Ajout d'un setter à
SntpClientpour définir le temps écoulé maximal depuis la dernière mise à jour après laquelle le client est réinitialisé (#1794).
- Transformateur :
- Ajoutez
SurfaceAssetLoader, qui permet de mettre en file d'attente les données vidéo dans le Transformer via unSurface. ImageAssetLoadersignale une entrée non acceptée viaAssetLoader.onErrorau lieu de générer uneIllegalStateException.- Rendez 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 silences dans les séquences d'EditedMediaItems audio.
- Ajoutez
- Sélection de la piste :
DefaultTrackSelector: préfère l'audio basé sur des objets à l'audio basé sur des canaux lorsque d'autres facteurs sont égaux.
- Extracteurs :
- Autorisez
Mp4ExtractoretFragmentedMp4Extractorà identifier les exemples H264 qui ne sont pas utilisés comme référence par les exemples suivants. - Ajoutez une option permettant d'activer la recherche basée sur l'index dans
AmrExtractor. - Les fichiers MP3 dont l'espace entre les frames valides est supérieur à 128 Ko sont désormais considérés comme tronqués (et non comme non valides). Cela signifie que les fichiers contenant des données non MP3 à la fin, sans autre métadonnée 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 préroll pour les positions de début de contenu multimédia autres que les images clés 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 à partir de la boîte
mdhddansMp4ExtractoretFragmentedMp4Extractor(#1531). - Correction de la mise à l'échelle incorrecte de
media_timedans les listes de modifications MP4. Alors quesegment_durationétait déjà correctement mis à l'échelle à l'aide de l'échelle temporelle du film,media_timeest désormais correctement mis à l'échelle à l'aide de l'échelle temporelle de la piste, comme spécifié par la norme du format MP4 (#1792). - Gérer les frames hors séquence dans le calcul de
endIndicespour les fichiers MP4 avec liste de montage (#1797). - Correction de l'analyse de la durée du contenu multimédia dans la boîte
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 prise en charge du format de fichier multimédia de base ISO AC-4 de niveau 4 (#1265).
- Autorisez
- DataSource :
- Mise à jour de
HttpEngineDataSourcepour permettre l'utilisation à partir de l'extension S7 au lieu du niveau d'API 34 (#1262). DataSourceContractTest: affirmer queDataSource.getUri()renvoie l'URI résolue (comme indiqué dans la documentation). Lorsque cela diffère de l'URI demandé, les tests peuvent l'indiquer à l'aide de la nouvelle méthodeDataSourceContractTest.TestResource.Builder.setResolvedUri().DataSourceContractTest: affirmez queDataSource.getUri()etgetResponseHeaders()renvoient leur valeur "open" après un appelopen()ayant échoué (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 tous les en-têtes attendus. Cela permet de faire la distinction entre une erreur HTTP 404 (avec des en-têtes) et un message "Serveur introuvable" (sans en-têtes).
- Le remplacement de
- Mise à jour de
- Audio :
- Configurer automatiquement les métadonnées d'intensité sonore CTA-2075 sur le codec si elles sont présentes dans le contenu multimédia.
- Assurez-vous que le volume diminue progressivement lors de la recherche.
- Correction des sons pop qui peuvent se produire lors des recherches.
- Correction de l'accumulation d'erreurs de troncature pour l'algorithme d'étirement temporel/de décalage de hauteur de Sonic.
- Correction d'un bug dans
SpeedChangingAudioProcessorqui entraînait la suppression des frames de sortie.
- Vidéo :
MediaCodecVideoRendererévite de décoder les échantillons qui ne sont ni rendus ni utilisés comme référence par d'autres échantillons.- Sur l'API 35 et 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 proportions de pixels
MediaCodecAdapterfournies, 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).
- Ajoutez une solution de contournement pour les codecs qui se bloquent après le dernier échantillon sans renvoyer de signal de fin de flux.
- Texte :
- Ajoutez un
VoiceSpanpersonnalisé et remplissez-le pour les étendues vocales WebVTT (#1632). - Assurez-vous que les sous-titres WebVTT dans HLS avec des codes temporels très longs (qui dépassent un
long64 bits lorsqu'ils sont représentés en microsecondes et multipliés par la base temporelle MPEG90,000) s'affichent (#1763). - Prise en charge des sous-titres CEA-608 dans les contenus Dolby Vision (#1820).
- Correction du blocage de la lecture sur les flux DASH multipériodes lorsque les sous-titres CEA-608 sont activés (#1863).
- Ajoutez un
- Métadonnées :
- Attribuez le type
C.TRACK_TYPE_METADATAaux titres contenant du contenu icy ou vnd.dvb.ait.
- Attribuez le type
- Image :
- Ajoutez
ExternallyLoadedImageDecoderpour une intégration simplifiée avec des bibliothèques de chargement d'images externes telles que Glide ou Coil.
- Ajoutez
- DataSource :
- Ajout de
FileDescriptorDataSource, un nouveauDataSourcequi peut être utilisé pour lire à partir d'unFileDescriptor(#3757).
- Ajout de
- Effet :
- Ajout d'une solution de contournement
DefaultVideoFrameProcessorpour la mise à l'échelle mineureSurfaceTexture.SurfaceTexturepeut inclure une petite mise à l'échelle qui coupe une bordure de 1 texel autour du bord d'un tampon recadré. Ce problème est désormais résolu, de sorte que le résultat est plus proche de ce qui est 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 un
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 préroll peuvent générer un
ArrayIndexOutOfBoundsExceptionlors de la lecture après le dernier mid-roll (#1741).
- Correction d'un bug qui pouvait entraîner un
- Session :
- Ajoutez
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 depuis un
MediaBrowserversMediaSessionCompat.Callbackau lieu de la varianteMediaBrowserServiceCompatde la méthode lorsqu'il était connecté à un ancien service. Cela empêchaitMediaBrowserde recevoir la valeur de retour réelle renvoyée par l'ancien service (#1474). - Gérez
IllegalArgumentExceptiongénéré par les appareils de certains fabricants lors de la configuration du broadcast receiver pour les intents du 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 permettre à une application de session de démarrer un service de premier plan après avoir demandé
play(). - Limitez
CommandButton.Builder.setIconUripour n'accepter que les URI de contenu. - Transmettez les hints de connexion d'un navigateur Media3 à l'
MediaBrowserCompatinitial lors de la connexion à unMediaBrowserCompathérité. Le service peut recevoir les indices de connexion transmis en tant qu'indices 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éliorer le comportement d'interopérabilité afin qu'un navigateur Media3 connecté à un
MediaBrowserServicehérité ne demande pas deux fois les enfants d'unparentIdlors de l'abonnement à un parent.
- Ajoutez
- Interface utilisateur :
- Activez la solution de contournement pour la vidéo étirée/recadrée dans
PlayerView-in-Compose-AndroidViewen raison de problèmes liés aux transitions partagées basées sur XML. Les applications utilisantPlayerViewdansAndroidViewdoivent appelerPlayerView.setEnableComposeSurfaceSyncWorkaroundpour activer l'option (#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 de manière réactive à une interaction par clic (#1590, #184). - Correction d'un bug qui empêchait le choix "Aucun" dans la sélection de texte de fonctionner en cas de préférences de sélection de pistes de texte définies par l'application.
- Activez la solution de contournement pour la vidéo étirée/recadrée dans
- Extension DASH :
- Ajout de la prise en charge des 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.) :
- Ajoutez le module de décodage IAMF, qui permet de lire les 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'avec une disposition 5.1 avec spatialisation et suivi des mouvements de la tête en option. Toutefois, 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).
- Ajoutez le module de décodage IAMF, qui permet de lire les fichiers MP4 contenant des pistes IAMF à l'aide de la bibliothèque native libiamf pour synthétiser l'audio.
- Extension Cast :
- Arrête le nettoyage de la timeline après la déconnexion de CastSession, ce qui permet à l'application émettrice de reprendre la lecture en local après une déconnexion.
- Renseignez le
DeviceInfode CastPlayer lorsqu'unContextest fourni. Cela permet d'associer leMediaSessionà 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 les éléments suivants :- 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 format court (#1839).
- Suppression des symboles obsolètes :
- Suppression des
Player.hasPreviousetPlayer.hasPreviousWindow()obsolètes. UtilisezPlayer.hasPreviousMediaItem()à la place. - 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
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.
La version 1.4.1 contient ces commits.
- 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
tts:fontSizeen pourcentage pour s'assurer qu'elles sont correctement héritées des nœuds parents avec des valeurstts:fontSizeen pourcentage. - Correction de
IndexOutOfBoundsExceptiondansLegacySubtitleUtilen raison d'une gestion incorrecte du cas où l'heure de début de la sortie demandée est supérieure ou égale à l'heure de fin de l'événement dansSubtitle(#1516).
- TTML : correction de la gestion des valeurs
- DRM :
- Correction de l'erreur
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLEsur les appareils utilisant l'API 31 ou une version ultérieure lors de la lecture de 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 :
- Transformez un double appui sur
KEYCODE_HEADSETHOOKen action "Passer à la piste suivante", comme indiqué dans la documentation (#1493). - Gérez
KEYCODE_HEADSETHOOKcomme une commande "play" dansMediaButtonReceiverlorsque vous décidez de l'ignorer pour éviter unForegroundServiceDidNotStartInTimeException(#1581).
- Transformez un double appui sur
- Extension RTSP :
- Ignorer les descriptions de contenu multimédia non valides lors de l'analyse SDP (#1087).
Version 1.4.0
25 juillet 2024
Publication d'androidx.media3:media3-*:1.4.0.
La version 1.4.0 contient ces commits.
- Bibliothèque commune :
- Transférez les appels de recherche présumés no-op 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ésucrification Java 8 améliorée (#1312).
- Assurez-vous que la durée transmise à
MediaItem.Builder.setImageDurationMs()est ignorée pour unMediaItemnon image (comme indiqué dans la documentation). - Ajoutez
Format.customDatapour stocker les informations personnalisées fournies par l'application sur les instancesFormat.
- Transférez les appels de recherche présumés no-op vers les méthodes protégées
- ExoPlayer :
- Ajoutez
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. AjoutezDefaultPreloadManagerqui utilisePreloadMediaSourcepour précharger des exemples de contenus multimédias des sources en mémoire et utilise un entierrankingDataqui indique l'index d'un élément dans l'UI. - Ajoutez
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 le temps tampon 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. - Autoriser une valeur nulle à être renvoyée par
TargetPreloadStatusControl.getTargetPreloadStatus(T)pour indiquer de ne pas précharger unMediaSourceavec lerankingDatadonné. - Ajout de
remove(MediaSource)àBasePreloadManager. - Ajoutez
reset()àBasePreloadManagerpour libérer toutes les sources de détention tout en conservant l'instance du gestionnaire de préchargement. - Ajout de
ExoPlayer.setPriority()(etBuilder.setPriority()) pour définir la valeur de priorité utilisée dansPriorityTaskManageret pour l'importance MediaCodec à partir de l'API 35. - Correction d'un problème lié à la mise à jour de la dernière heure de mise en mémoire tampon, qui entraînait une clé
bs(manque de 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 du passage à la fin des éléments.
- Ajoutez
clearàPreloadMediaSourcepour ignorer la période de préchargement. - Ajoutez le nouveau code d'erreur
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMEDqui est utilisé lorsque les ressources du codec sont récupérées pour des tâches de priorité plus élevée. - Permet à
AdsMediaSourcede charger les annonces vidéo pré-roll avant la fin de la préparation du contenu multimédia initial (#1358). - Correction d'un bug qui entraînait le déplacement de la lecture sur
STATE_ENDEDlors de la préparation d'une diffusion en direct DASH multipériode après la suppression de la période d'origine du fichier manifeste. - Renommage de
onTimelineRefreshed()enonSourcePrepared()et deonPrepared()enonTracksSelected()dansPreloadMediaSource.PreloadControl. Renommez également les IntDefs dansDefaultPreloadManager.Stageen conséquence. - Ajout d'une prise en charge expérimentale de 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 de lecture à avancer pour que le rendu progresse. SiExoPlayerest défini surexperimentalSetDynamicSchedulingEnabled(),ExoPlayerappellera cette méthode lors du calcul du temps nécessaire pour planifier sa tâche de travail. - Ajoutez
MediaCodecAdapter#OnBufferAvailableListenerpour envoyer une alerte lorsque les tampons d'entrée et de sortie sont disponibles pour être utilisés parMediaCodecRenderer.MediaCodecRenderersignaleraExoPlayerlors de la réception de ces rappels et, siExoPlayerest défini avecexperimentalSetDynamicSchedulingEnabled(),ExoPlayerplanifiera sa boucle de travail à mesure que les renderers progresseront. - Utilisez la 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é. - Ajoutez
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 le fait de ne pas signaler la perte de priorité complète ou transitoire lorsque le lecteur est en pause (#1436).
- Correction d'un potentiel
IndexOutOfBoundsExceptioncausé par des extracteurs signalant des pistes supplémentaires après l'étape de préparation initiale (#1476). EffectsdansExoPlayer.setVideoEffect()recevra les codes temporels avec le décalage du moteur de rendu supprimé (#1098).- Correction d'une potentielle
IllegalArgumentExceptionlors de la gestion d'une erreur du lecteur survenue lors de la lecture anticipée d'un autre élément de playlist (#1483).
- Ajoutez
- Transformateur :
- Ajoutez
audioConversionProcessetvideoConversionProcessàExportResultpour indiquer comment la piste correspondante du fichier de sortie a été créée. - Assouplissement des vérifications du niveau H.264 pour l'optimisation des découpes.
- Ajout de la possibilité de passer d'un média d'entrée SDR à un média d'entrée HDR dans une séquence.
- Ajout de la prise en charge des effets audio au niveau de la composition.
- Ajout de la prise en charge du transcodage des images Ultra HDR en vidéos HDR.
- Correction d'un problème qui empêchait
DefaultAudioMixerd'afficher la quantité d'octets correcte après avoir été réinitialisé et réutilisé. - Contournement d'un bug du décodeur où le nombre de canaux audio était limité à la stéréo lors du traitement de l'entrée PCM.
- Lorsque vous sélectionnez des pistes dans
ExoPlayerAssetLoader, ignorez les contraintes liées au 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 audio/vidéo. - 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 : déployez la modification en vous assurant que la dernière frame est rendue 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 qui sont apparus dans les flux HLS avec uniquement des i-frames(#1150) et les flux HLS H.262 (#1126).
- MP3 : préférez la taille des données d'un frame
Infoà celle indiqué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 bandes-annonces non lisibles (par exemple, les pochettes d'album) des calculs de recherche à débit constant, ce qui rend les recherches plus précises (#1376). - MP3 : utilisez le nombre de frames et d'autres données dans un frame
Info(le cas échéant) pour calculer un débit moyen pour la recherche à débit constant, plutôt que d'extrapoler à partir du débit du frame après le frameInfo, qui peut être artificiellement petit, par exemple le framePCUT(#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 l'achèvement 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, de stéréo à mono) peuvent entraîner une exception du processeur (#1352). - Implémentez
MediaCodecAudioRenderer.getDurationToProgressUs()afin qu'ExoPlayer planifie dynamiquement sa boucle de travail principale au moment où MediaCodecAudioRenderer peut progresser.
- Vidéo :
- Correction d'un problème entraînant 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 qui peut être causée par l'activation d'un moteur de rendu vidéo en cours de lecture.
- Correction d'un problème entraînant l'arrivée trop précoce de
- Texte :
- Correction d'un problème qui entraînait l'ignorance des sous-titres commençant avant une position de recherche. Ce problème n'a été introduit que dans Media3 1.4.0-alpha01.
- Modifiez le comportement d'analyse des sous-titres par défaut afin qu'il se produise lors de l'extraction au lieu du rendu (consultez le schéma d'architecture d'ExoPlayer pour connaître la différence entre l'extraction et le rendu).
- Cette modification peut être remplacée en appelant both
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.Factoryà la place deSubtitleDecoderFactory).
- Cette modification peut être remplacée en appelant both
- PGS : correction du décodage de 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 : ignorer la valeur
rowLock. La spécification CEA-708-E S-2023 indique querowLocketcolumnLockdoivent être considérés comme étant définis sur "true", quelles que soient les valeurs présentes dans le flux (la prise en charge decolumnLockn'est pas implémentée, donc elle est effectivement considérée comme étant toujours définie sur "false").- Cette fonctionnalité était initialement incluse dans les notes de version de
1.3.0-alpha01, mais la modification a été annulée par erreur avant la version1.3.0-rc01. Ce problème est maintenant résolu. La modification est donc de nouveau visible.
- Cette fonctionnalité était initialement incluse dans les notes de version de
- CEA-708 : évitez l'ajout de sauts de ligne en double par la gestion naïve de la commande "set pen location" d'ExoPlayer (#1315).
- Correction d'un
IllegalArgumentExceptionà partir deLegacySubtitleUtillorsqu'un exemple de sous-titres WebVTT ne contient aucun signal, par exemple dans un flux DASH (#1516).
- Métadonnées :
- Correction du mappage des balises de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (
soal), "artist sort" (soar) et "album artist sort" (soaa) étaient incorrectement mappés aux tags ID3TSO2,TSOAetTSOP(#1302). - Correction de la lecture des tags numériques
gnre(genre) ettmpo(tempo) MP4 (/iTunes) lorsque la valeur comporte plus d'un octet. - Propager le frame ID3
TCONàMediaMetadata.genre(#1305).
- Correction du mappage des balises de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (
- Image :
- Ajout de la prise en charge des grilles de vignettes DASH non carrées (#1300).
- Ajout de la prise en charge d'AVIF pour l'API 34 et versions ultérieures.
- Autorisez
nullcomme paramètre pourExoPlayer.setImageOutput()afin d'effacer unImageOutputprécédemment défini.
- DataSource :
- Implémentez la compatibilité avec les URI de ressources brutes
android.resource://package/idoùpackageest différent du package de l'application actuelle. Cette méthode n'était pas documentée auparavant, mais elle permet d'accéder plus efficacement aux ressources d'un autre package que par leur nom. - Vérifiez 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 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 de la sortie HLG et PQ à partir d'une entrée bitmap Ultra HDR.
- Ajout de la prise en charge de EGL_GL_COLORSPACE_BT2020_HLG_EXT, qui améliore la sortie de surface HLG dans ExoPlayer.setVideoEffect et Debug SurfaceView de Transformer.
- Mettez à jour l'implémentation de la matrice de superposition pour qu'elle soit 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 des couleurs SDR par défaut, qui passe des couleurs linéaires à la vidéo SDR électrique BT 709. Fournissez également une troisième option pour conserver l'espace colorimétrique d'origine.
- Autoriser la définition d'un ordre Z indéterminé pour les EditedMediaItemSequences (#1055).
- Maintenez une plage de luminance cohérente pour les différents contenus HDR (utilise la plage HLG).
- Ajout de la prise en charge des calques Ultra HDR (bitmap) sur les contenus HDR.
- Autoriser l'utilisation des effets
SeparableConvolutionavant l'API 26. - Supprimez les
OverlaySettings.useHdrinutilisés, car la plage dynamique de la superposition et du frame doit correspondre. - Ajout de la prise en charge du 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, ce qui permet de remplacer les paramètres de tag d'annonce lors de l'exécution. - Correction d'un bug qui empêchait l'appel de
VideoAdPlayer.VideoAdPlayerCallback.onError()lorsqu'une erreur de lecteur se produisait lors de la lecture d'une annonce (#1334). - Passage du SDK IMA vers la version 3.33.0 pour corriger un
NullPointerExceptionlors de l'utilisation d'URI de tags d'emplacement publicitairedata://(#700).
- Session :
- Définissez la valeur par défaut de
CommandButton.enabledsurtrueet assurez-vous que la valeur peut rester "false" pour les contrôleurs, même si la commande associée est disponible. - Ajoutez des constantes d'icônes pour
CommandButtonqui doivent être utilisées à la place des ressources d'icônes personnalisées. - Ajout de
MediaSessionService.isPlaybackOngoing()pour permettre aux applications de vérifier 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 d'appelerstopSelf()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 arrête le service dans le cas contraire. - Masquer 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 la session de plate-forme (#1256).
- Alignez la conversion de
MediaMetadataàMediaDescriptionCompatpour 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 plate-forme vers un état d'erreur avec les informations d'erreur données (#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é pour tester les interactions avec les applications publiant une session multimédia.
- Propager les extras transmis à
MediaSession[Builder].setSessionExtras()de media3 àPlaybackStateCompat.getExtras()de 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 duPlaybackStateCompat. 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 et le message d'erreur sont définis, mais que l'état de la session de plate-forme reste différent deSTATE_ERROR. - Autorise la définition de l'activité de session par contrôleur pour remplacer l'activité de session globale. L'activité de la 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.
- Définissez 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 diverses 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 plate-forme entraînant l'étirement ou le recadrage de 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'assurer 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'assurer 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. Cela entraîne l'échec du rappel et le délai d'expiration de la requête (https://issuetracker.google.com/328442628).
- Correction de
- Extension HLS :
- Correction d'un bug qui entraînait la délégation d'exemples EMSG en attente d'une discontinuité dans
HlsSampleStreamWrapperavec un décalage incorrect, ce qui provoquait une erreurIndexOutOfBoundsExceptionouIllegalArgumentException(#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 de lecture non principales pendant la lecture en direct (#1240).
- Correction d'un bug qui entraînait une exception
ArrayIndexOutOfBoundsExceptionlors de l'activation de CMCD pour les diffusions en direct HLS (#1395).
- Correction d'un bug qui entraînait la délégation d'exemples EMSG en attente d'une discontinuité dans
- Extension DASH :
- Extension Cast :
- Correction d'un bug qui convertissait le titre de l'album du
MediaQueueItemen artiste dans l'élément multimédia Media3 (#1255).
- Correction d'un bug qui convertissait le titre de l'album du
- 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éthodeTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()pour désactiver ce comportement.
- Implémentez
- Application de démonstration :
- Utilisez
DefaultPreloadManagerdans l'application de démonstration de format court. - Autoriser la définition du mode Répéter avec les arguments
Intentà partir de la ligne de commande (#1266). - Utilisez
HttpEngineDataSourcecommeHttpDataSourcelorsque l'appareil le prend en charge.
- 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
OkHttpDataSourceetOkHttpDataSourceFactory. UtilisezOkHttpDataSource.Factoryà la place. - 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(). UtilisezDrmSessionManager.DRM_UNSUPPORTEDà la place. - Supprimez
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format),AnalyticsListener.onVideoInputFormatChanged(EventTime, Format),AudioRendererEventListener.onAudioInputFormatChanged(Format),VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilisez plutôt les surcharges qui acceptent unDecoderReuseEvaluation. - Suppression d'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 constantsBundleable.Creator<Foo> CREATOR. Les appelants doivent plutôt utiliser les méthodesBundle toBundle()etstatic Foo fromBundle(Bundle)sur chaque type.
- 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.
La version 1.3.1 contient ces commits.
- Bibliothèque commune :
- Ajoutez
Format.labelspour autoriser les libellés localisés ou 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 resélection de la piste. - Ne démarrez les renderers avec démarrage anticipé qu'après avoir avancé la période de lecture lors de la transition entre les éléments multimédias (#1017).
- Ajout du type de retour 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
MediaMuxerne prend pas en charge 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égiez les pistes vidéo avec une fréquence d'images "raisonnable" (>=10 fps) par rapport à celles avec une fréquence d'images 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, qui peuvent 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 l'ignorer du remplissage lors de la lecture de blocs de taille impaire à partir de fichiers WAV (#1117).
- MP3 : renseignez
Format.averageBitrateà partir des cadres de métadonnées tels queXINGetVBRI. - MPEG-TS : annulation d'une modification visant à s'assurer que la dernière image est rendue en transmettant la dernière unité d'accès d'un flux à la file d'échantillons (#7909). Cela est dû au fait que la modification entraîne de nouveaux problèmes avec les flux HLS d'images clés uniquement (#1150) et les flux HLS H.262 (#1126).
- Audio :
- Autoriser la récupération du moteur de rendu en désactivant le déchargement si la piste audio ne parvient pas à s'initialiser en mode déchargement.
- Vidéo :
- Ajout d'une solution de contournement pour un problème d'appareil sur Galaxy Tab S7 FE, Chromecast avec Google TV et Lenovo M10 FHD Plus qui fait que les flux H265 à 60 fps sont marqués comme non compatibles
- Ajout d'une solution de contournement qui garantit que le premier frame est toujours rendu lors du tunneling, même si l'appareil ne le fait pas automatiquement comme requis par l'API (#1169). (#966).
- Correction d'un problème où la gestion des informations de couleur HDR entraînait un mauvais comportement du codec et empêchait les changements de format adaptatifs pour les pistes vidéo SDR (#1158).
- Texte :
- WebVTT : empêchez les repères consécutifs directs de créer des instances
CuesWithTimingsupplémentaires factices à partir deWebvttParser.parse(#1177).
- WebVTT : empêchez les repères consécutifs directs de créer des instances
- DRM :
- Solution de contournement pour un
NoSuchMethodErrorqui peut être généré par le frameworkMediaDrmau lieu deResourceBusyExceptionouNotProvisionedExceptionsur certains appareils Android 14 (#1145).
- Solution de contournement pour un
- Effet :
- Amélioration du tone mapping PQ vers SDR grâce à la conversion des espaces colorimétriques.
- Session :
- Correction d'un problème qui entraînait un retour en arrière de la position actuelle lorsque le contrôleur remplaçait l'élément actuel (#951).
- Correction d'un problème qui empêchait la transmission de
MediaMetadataavec uniquementextrasnon null entre les contrôleurs et les sessions multimédias (#1176).
- Interface utilisateur :
- Inclut le nom de la langue de la piste audio si
Localene parvient pas à identifier un nom à afficher (#988).
- Inclut 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 :
- Ignorer les valeurs d'informations de session vides (i-tags) lors de l'analyse SDP (#1087).
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- L'extension MIDI est désactivée 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émentez 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 fonctionnelle, mais elle n'a pas été 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 conforme à toutes les autres bibliothèques AndroidX et est nécessaire pour que nous puissions passer aux dernières versions de nos dépendances AndroidX. - Renseignez
artworkUrietartworkDatadansMediaMetadata.Builder.populate(MediaMetadata)lorsqu'au moins l'un d'eux n'est pas nul (#964).
- Implémentez la compatibilité avec les URI de ressources brutes
- ExoPlayer :
- Ajout de
PreloadMediaSourceetPreloadMediaPeriodqui permettent aux applications de précharger une source de contenu multimédia à une position de départ spécifique avant la lecture.PreloadMediaSourcese charge de préparer la source de contenu multimédia pour recevoir leTimeline, de préparer et de mettre en cache la période à la position de début 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 définissent la source préchargée sur le lecteur pour la lecture. - Ajout de
ExoPlayer.setImageOutputpour permettre aux applications de définirImageRenderer.ImageOutput. DefaultRenderersFactoryfournit désormais unImageRendererau lecteur par défaut avecImageOutputetImageDecoder.Factory.DEFAULTdéfinis sur null.- Émission de l'événement
Player.Listener.onPositionDiscontinuitylorsque le silence est ignoré (#765). - Ajout de la prise en charge expérimentale de 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, unHttpDataSourceà l'aide de l'API HttpEngine. - Empêchez la création de sous-classes
CompositeSequenceableLoader. Ce composant a déjà été rendu extensible, mais n'a jamais été sous-classé dans la bibliothèque. Les personnalisations peuvent être effectuées en encapsulant une instance à l'aide du modèle de décoration et en implémentant 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).
- Renommez les méthodes
experimentalSetSubtitleParserFactorysurBundledChunkExtractor.FactoryetDefaultHlsExtractorFactoryensetSubtitleParserFactoryet interdisez la transmission denull. Utilisez les nouvelles méthodesexperimentalParseSubtitlesDuringExtraction(boolean)pour contrôler le comportement d'analyse. - Ajout de la prise en charge de la personnalisation du
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 recherche que les tirets (#1028).
- Arrêt du double encodage des paramètres de requête CMCD (#1075).
- Ajout de
- Transformateur :
- Ajout de la prise en charge de l'aplatissement des vidéos au ralenti SEF H.265/HEVC.
- Augmentation de la vitesse de transmuxing, en particulier pour les modifications de type "Supprimer la vidéo".
- Ajout d'une API pour s'assurer que le fichier de sortie commence par un frame 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 tant que son code temporel de présentation n'est pas disponible (#829).
- Ajout de la prise en charge de l'optimisation des opérations de découpage MP4 d'un seul composant.
- Ajoutez une prise en charge pour vous assurer qu'une image vidéo comporte le premier code temporel dans le fichier de sortie. Correction des fichiers de sortie commençant par une image noire sur les lecteurs basés sur 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 prise en charge des profils 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 de manière plus éclairée (#973).
- Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs
- Audio :
- Vidéo :
- Modifiez le constructeur
MediaCodecVideoRendererqui accepte un argumentVideoFrameProcessor.Factoryet remplacez-le par un constructeur qui accepte 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.
- Modifiez 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 : ignorer la valeur
rowLock. La spécification CEA-708-E S-2023 indique querowLocketcolumnLockdoivent être considérés comme étant définis sur "true", quelles que soient les valeurs présentes dans le flux (la prise en charge decolumnLockn'est pas implémentée, donc elle est effectivement considérée comme étant toujours définie sur "false").
- 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 à
ImageOutputprès 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 :
- Par défaut, les exemples non chiffrés "clear lead" dans le contenu DRM sont lus immédiatement, même si les clés des exemples 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 (alors qu'auparavant, la lecture n'aurait pas commencé du tout à ce moment-là). Ce comportement peut être désactivé avec
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKeyouDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys.
- Par défaut, les exemples non chiffrés "clear lead" dans le contenu DRM sont lus immédiatement, même si les clés des exemples 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 (alors qu'auparavant, la lecture n'aurait pas commencé du tout à ce moment-là). Ce comportement peut être désactivé avec
- Extension IMA :
- Correction d'un problème qui empêchait la lecture des annonces DASH et HLS sans l'extension de fichier appropriée.
- Session :
- La détection du double-clic est désactivée 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 et les sessions multimédias. - Ajoutez un constructeur à
MediaLibrarySession.Builderqui ne prend qu'unContextau lieu d'unMediaLibraryService.
- Extension HLS :
- Réduisez la visibilité de
HlsMediaPeriodà "privée pour le paquet". Ce type ne doit pas être utilisé directement en dehors 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 dans un état de lecture, mais suspend la progression jusqu'à ce que le test puisse ajouter des assertions et d'autres actions.
- Ne mettez pas la lecture en pause dans
- Application de démonstration :
- Ajoutez un module de démonstration de format court pour illustrer l'utilisation de
PreloadMediaSourceavec le cas d'utilisation de contenu de format court.
- Ajoutez un module de démonstration de format 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 du problème lors duquel les recherches manuelles en dehors de la plage
LiveConfiguration.min/maxOffsetcontinuaient d'ajuster le décalage surmin/maxOffset. - Correction du problème lié à la disposition des canaux OPUS et VORBIS qui était incorrecte pour 3, 5, 6, 7 et 8 canaux (#8396).
- Correction d'un problème qui entraînait le démarrage incorrect du flux à sa position par défaut après une recherche à 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 blocs, ce qui entraînait une erreurIllegalArgumentException(#888).
- Correction du problème lors duquel les recherches manuelles en dehors de la plage
- Transformateur :
- Contournez un problème qui entraînait l'échec de l'encodeur lors de la configuration en raison d'un taux de fonctionnement élevé.
- Extracteurs :
- Marquez les pistes HEVC secondaires (non lisibles) dans les 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) dans les photos animées JPEG comme
- Audio :
- Correction de la gestion de la fin du flux pour
SilenceSkippingAudioProcessorlorsqu'il est appelé plusieurs fois (#712).
- Correction de la gestion de la fin du flux pour
- Vidéo :
- Ajout d'une solution de contournement pour un problème d'appareil sur Galaxy Tab S7 FE, Chromecast avec Google TV et Lenovo M10 FHD Plus, qui fait que les flux AVC à 60 fps sont marqués 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). OutOfMemoryErrorest détecté lors de l'analyse de très grandes frames ID3, ce qui signifie que la lecture peut se poursuivre sans les informations de tag au lieu d'échouer complètement.
- Correction d'un bug où
- DRM :
- Étendre la solution de contournement pour l'URL de licence ClearKey
https://default.urlerronée à l'API 33 et versions ultérieures (auparavant, la solution de contournement ne s'appliquait qu'à l'API 33 exactement) (#837). - Correction de
ERROR_DRM_SESSION_NOT_OPENEDlors du passage d'un contenu chiffré à un contenu non chiffré sans surface associée au lecteur. L'erreur était due à l'utilisation incorrecte d'un décodeur sécurisé pour lire le contenu non chiffré.
- Étendre la solution de contournement pour l'URL de licence ClearKey
- Session :
- Placez les clés et valeurs personnalisées dans
MediaMetadataCompatàMediaMetadata.extrasetMediaMetadata.extrasàMediaMetadataCompat(#756, #802). - Correction de la diffusion
notifyChildrenChangedpour les anciens contrôleurs (#644). - Correction d'un bug qui entraînait un plantage sur certains appareils lorsqu'un délai négatif était défini 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 lors de la première demande de mise à jour de la notification (#917).
- Placez les clés et valeurs personnalisées dans
- Interface utilisateur :
- Extension DASH :
- Analyse de "f800" comme nombre de canaux de 5 pour Dolby dans le fichier manifeste DASH (#688).
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- Extension Cast :
- Assainissement de la création d'un
Timelinepour éviter le plantage de l'application en cas d'échec du chargement du contenu multimédia sur l'appareil Cast (#708).
- Assainissement 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 elles le souhaitent (éventuellement à l'aide deLogger.appendThrowableString(String, Throwable)). - Correction d'un problème de compatibilité Kotlin où les paramètres de type générique nullable et les types d'éléments de tableau nullable ne sont pas détectés comme nullable. Par exemple, les paramètres de méthode
TrackSelectorResultetSimpleDecoder(#6792). - Modifiez le comportement par défaut de l'UI et des notifications dans
Util.shouldShowPlayButtonpour afficher un bouton "Lecture" lorsque la lecture est temporairement suspendue (par exemple, en raison d'une perte temporaire de focus audio). L'ancien comportement peut être conservé en utilisantPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)ouMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)(#11213). - Mettez à niveau
androidx.annotation:annotation-experimentalvers1.3.1pour corriger https://issuetracker.google.com/251172715. - Déplacez
ExoPlayer.setAudioAttributesvers l'interfacePlayer.
- Ajoutez un paramètre
- ExoPlayer :
- Correction des problèmes de recherche dans les flux AC4 causés par l'identification incorrecte des échantillons de décodage uniquement (#11000).
- Ajoutez la suppression de la lecture sur les appareils de sortie audio non adaptés (par exemple, le haut-parleur intégré des appareils Wear OS) lorsque cette fonctionnalité est activée via
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. La raison de la suppression de la lecture sera mise à jour surPlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUTsi la lecture est tenté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. La raison de la suppression sera supprimée lorsqu'une sortie appropriée sera connectée. - Ajoutez
MediaSource.canUpdateMediaItemetMediaSource.updateMediaItempour accepter les mises à jourMediaItemaprès la création viaPlayer.replaceMediaItem(s). - Autoriser les 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éliorez la méthode
SequenceableLoader.continueLoading(long)dans l'interfaceSequenceableLoaderpourSequenceableLoader.continueLoading(LoadingInfo loadingInfo).LoadingInfocontient des paramètres supplémentaires, y comprisplaybackSpeedetlastRebufferRealtimeMsen plus deplaybackPositionUsexistant. - 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 des données CMCD (Common Media Client Data) :
bs(manque de mémoire tampon),dl(délai),pr(vitesse de lecture) etsu(démarrage) (#8699). - Ajout de la profondeur de bits de luma et de chroma à
ColorInfo(#491). - Ajoutez des champs supplémentaires à la journalisation des données CMCD (Common Media Client Data) : prochaine demande d'objet (
nor) et prochaine demande de plage (nrr) (#8699). - Ajout d'une fonctionnalité permettant de transmettre les 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 de période/de fenêtre temporelle) dansConcatenatingMediaSource2(#11226). - Modifiez
BaseRenderer.onStreamChanged()pour qu'il reçoive également un argumentMediaPeriodId.
- Transformateur :
- Analyser 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. - Les paramètres
frameRateetdurationUsdeSampleConsumer.queueInputBitmapont été remplacés parTimestampIterator.
- Sélection de la piste :
- Ajoutez
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptivenesspour autoriser ou interdire explicitement l'adaptation non fluide. La valeur par défaut reste à 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). - Supprimez l'hypothèse selon laquelle les instances
Extractorpeuvent être inspectées directement avecinstanceof. Si vous souhaitez accéder au moment de l'exécution aux détails d'implémentation d'unExtractor, 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 audio Vorbis au format MP4.
- Ajoutez
AudioSink.getFormatOffloadSupport(Format)qui récupère le niveau de prise en charge du déchargement que le récepteur peut fournir pour le format via unDefaultAudioOffloadSupportProvider. Il renvoie le nouveauAudioOffloadSupportqui contientisFormatSupported,isGaplessSupportedetisSpeedChangeSupported. - Ajoutez
AudioSink.setOffloadMode()pour 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 piste est une piste audio unique, le déchargement audio est activé. - Si
audioOffloadModePreferenceest défini surAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED,DefaultTrackSelectorne sélectionnera une piste audio que si son format 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é sans interruption 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.
- Supprimez le paramètre
enableOffloadde la signature de la méthodeDefaultRenderersFactory.buildAudioSink. - Supprimez la méthode
DefaultAudioSink.Builder.setOffloadMode. - Supprimez la valeur intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED. - Ajout de la prise en charge des métadonnées sans silence Opus lors de la lecture en mode déchargement.
- Autoriser la récupération du moteur de rendu en désactivant le déchargement en cas d'échec 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. - Remplacement du nom de
onExperimentalSleepingForOffloadChangedparonSleepingForOffloadChangedet deonExperimentalOffloadedPlaybackparonOffloadedPlayback. - Déplacez les interfaces et définitions
TrackSelectionParametersliées au mode de déchargement audio vers une classeAudioOffloadPreferencesinterne. - Ajoutez des rappels
onAudioTrackInitializedetonAudioTrackReleasedàAnalyticsListener,AudioRendererEventListeneretAudioSink.Listener. - Correction du problème de sous-dépassement 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 :
- Autoriser
MediaCodecVideoRendererà utiliser unVideoFrameProcessor.Factorypersonnalisé. - Correction d'un bug qui empêchait le rendu du premier frame si le flux audio commençait par des codes temporels négatifs (#291).
- Autoriser
- 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 "decode-only" (décodage uniquement), car l'implémentation doit de toute façon renvoyer la valeur "null".
- Effet :
- Ajoutez l'entrée bitmap de mise en file d'attente
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)par code temporel. - Modifiez
VideoFrameProcessor.registerInputStream()pour qu'il ne soit plus bloquant. Les applications doivent implémenterVideoFrameProcessor.Listener#onInputStreamRegistered(). - Les paramètres
frameRateetdurationUsdeVideoFrameProcessor.queueInputBitmapont été remplacés parTimestampIterator.
- Ajoutez l'entrée bitmap de mise en file d'attente
- Extension IMA :
- Correction d'un bug qui provoquait l'affichage d'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 à la version 3.31.0.
- Session :
- Définissez le comportement du service de premier plan des notifications sur
FOREGROUND_SERVICE_IMMEDIATEdansDefaultMediaNotificationProvider(#167). - N'utilisez que
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ée pour remplir la notification et la session de plate-forme.
- Convertissez les événements de boutons multimédias reçus par
MediaSessionService.onStartCommand()dans Media3 au lieu de les rediriger vers la session de plate-forme et de les renvoyer vers Media3. Ainsi, le contrôleur d'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()de progresser lorsqu'il était connecté à unMediaSessionCompatancien. - Ajoutez
MediaLibrarySession.getSubscribedControllers(mediaId)pour plus de commodité. - Remplacez
MediaLibrarySession.Callback.onSubscribe()pour affirmer la disponibilité de l'ID parent auquel le contrôleur est abonné. Si l'opération réussit, l'abonnement est accepté etnotifyChildrenChanged()est appelé immédiatement pour informer le navigateur (#561). - Ajoutez un module de démonstration de session pour Automotive OS et activez 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. Android Auto étant le contrôleur client qui lit la session du framework, le boutonqueuede l'UI d'Android Auto n'est pas affiché (#339). - Utiliser
DataSourceBitmapLoaderpar défaut au lieu deSimpleBitmapLoader(#271, #327). - Ajoutez
MediaSession.Callback.onMediaButtonEvent(Intent)pour permettre aux applications de remplacer la gestion des événements des boutons multimédias par défaut.
- 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 à un utilisateur de connecter une sortie audio appropriée (par exemple, un casque Bluetooth). L'écouteur reprendra automatiquement la lecture si un appareil approprié est connecté dans un délai d'inactivité configurable (5 minutes par défaut).
- Ajoutez une implémentation
- Téléchargements :
- Déclarez le type de service de premier plan "synchronisation des données" pour
DownloadServiceafin d'assurer la compatibilité avec Android 14. Lors de l'utilisation de 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 "synchronisation des données" pour
- Extension HLS :
- Actualisez la playlist en direct HLS avec un intervalle calculé à partir de la dernière heure de début du chargement plutôt que de la dernière heure de fin du chargement (#663).
- Extension DASH :
- Autoriser plusieurs identifiants DASH identiques dans l'URL du modèle de segment.
- Ajout de la prise en charge expérimentale de l'analyse des sous-titres lors de l'extraction. Cette fonctionnalité permet de mieux fusionner les sous-titres qui se chevauchent, y compris de résoudre le 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 un
IndexOutOfBoundsExceptionlors du retour à TCP ou un blocage de la lecture dans certaines situations. - Vérifier 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).
- Utiliser la valeur du délai avant expiration de la réponse à la configuration RTSP dans l'intervalle de temps d'envoi des requêtes RTSP Options de maintien en vie (#662).
- Correction d'une condition de concurrence pouvant entraîner un
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.) :
- Publication du module de décodeur MIDI, qui permet la lecture de 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 bientôt obsolète. - Ajoutez
Decoder.setOutputStartTimeUsetSimpleDecoder.isAtLeastOutputStartTimeUspour permettre aux décodeurs de supprimer les exemples de décodage uniquement avant l'heure de début. Cette méthode doit être privilégiée par rapport àBuffer.isDecodeOnly, qui sera bientôt 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 entraîner une exception
ArithmeticExceptiondans le code Leanback (#617).
- Correction d'un bug où la désactivation d'une surface peut entraîner une exception
- Utilitaires de test :
- Rendez
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.
- Rendez
- Suppression des symboles obsolètes :
- Suppression de
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)etTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). UtilisezComposition.Builder.setHdrMode(int)et transmettezCompositionàTransformer.start(Composition, String)à la place. - Supprimez la méthode
DownloadNotificationHelper.buildProgressNotificationobsolète et utilisez une méthode non obsolète qui accepte un paramètrenotMetRequirementsà la place.
- 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 :
- Supprimez la dépendance
multidexajoutée par erreur de tous les modules (#499).
- Supprimez la dépendance
- ExoPlayer :
- Correction d'un problème dans
PlaybackStatsListeneroù desPlaybackStatssuperflus é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 des pages d'en-tête d'ID Ogg et d'en-tête de commentaire au flux de bits 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 du SPS.
- Texte :
- CEA-608 : modification de la logique de troncature des repères pour ne tenir compte que du texte visible. Auparavant, l'indentation 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 de cas où
MediaLibraryServiceLegacyStubenvoyait une erreur à unResultqui ne le prenait pas en charge, ce qui produisait unUnsupportedOperationException(#78). - Corrigez la façon dont
PlayerWrappercrée unVolumeProviderCompaten déterminantvolumeControlTypeà l'aide des anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUMEetCOMMAND_SET_DEVICE_VOLUME) et des 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 :
- Ajouter un motif de suppression pour un itinéraire audio non adapté et lire quand prêt modifier le motif de suppression pour une durée trop longue. (#15).
- Ajouter des commandes au lecteur :
COMMAND_GET_METADATACOMMAND_SET_PLAYLIST_METADATACOMMAND_SET_DEVICE_VOLUME_WITH_FLAGSCOMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
- Ajoutez des 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)
- Ajoutez
BuilderpourDeviceInfoet marquez le constructeur existant comme obsolète. - Ajoutez
DeviceInfo.routingControllerIdpour spécifier l'ID du contrôleur de routage pour les lectures à distance. - Ajoutez
Player.replaceMediaItem(s)comme raccourci pour ajouter et supprimer des éléments à la même position (#8046).
- ExoPlayer :
- Autoriser ExoPlayer à contrôler les méthodes de volume de l'appareil uniquement si l'utilisateur a explicitement activé cette option. 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
FilteringMediaSourcequi permet de filtrer les types de pistes disponibles à partir d'unMediaSource. - Ajout de la prise en charge de l'inclusion des données client Common Media (CMCD) dans les requêtes sortantes des formats de streaming adaptatif DASH, HLS et SmoothStreaming. Les champs suivants,
br,bl,cid,rtpetsid, ont été intégrés (#8699). Structure et méthodes d'API :- La journalisation CMCD est désactivée par défaut. Utilisez
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)pour l'activer. - Toutes les clés sont activées par défaut. Remplacez
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)pour filtrer les clés qui sont enregistré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
- Ajoutez 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. - Modifiez
SampleQueuepour stockersourceIden tant quelongplutôt 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 auxMediaPeriodconcernés. - Modifiez la signature de
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)en ajoutant un paramètre de timeline qui contient les périodes avec les UID utilisés comme clés dans la carte. Cela est nécessaire pour éviter les problèmes de concurrence 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 répartiteur. 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.
- Autoriser ExoPlayer à contrôler les méthodes de volume de l'appareil uniquement si l'utilisateur a explicitement activé cette option. 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 d'expiration du multiplexeur) si la fin du flux vidéo était signalée au moment où un frame 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 du B-frame 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. Lorsqu'il est activé,DefaultTrackSelectordéclenche une nouvelle sélection de piste lorsque les capacités du moteur de rendu ont changé.
- Ajout de
- Extracteurs :
- Audio :
- Correction d'un bug qui entraînait l'échec de certaines lectures lorsque le tunneling était activé et que les
AudioProcessorsétaient actifs, par exemple pour le découpage sans interruption (#10847). - Encapsulez les trames Opus dans des paquets Ogg lors des lectures directes (déchargement).
- Extrapoler la position actuelle pendant le sommeil 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 apportées aux 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 capacités. - Propagez les modifications des fonctionnalités audio via un nouvel événement
onAudioCapabilitiesChangeddans l'interfaceAudioSink.Listeneret une nouvelle interfaceRendererCapabilities.Listenerqui déclenche les événementsonRendererCapabilitiesChanged. - Ajout de
ChannelMixingAudioProcessorpour appliquer la mise à l'échelle/le mixage aux canaux audio. - Ajoutez la nouvelle valeur int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLEàDecoderDiscardReasonspour supprimer le décodeur audio lorsque le mode Bypass est possible après la modification 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 entraînait l'échec de certaines lectures lorsque le tunneling était activé et que les
- 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 ExoPlayer avecMediaCodecVideoRenderera une largeur et une hauteur de 0 lorsquePlayer.getCurrentTracksne prend pas en charge 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 uniquement 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 uniquement sur
- Muxer:
- Ajoutez une nouvelle bibliothèque de multiplexeurs qui peut être utilisée pour créer un fichier de conteneur MP4.
- Extension IMA :
- Activez les flux DASH multipériodes pour l'insertion dynamique d'annonces. Veuillez noter que l'implémentation actuelle ne permet pas encore de rechercher des contenus 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 du contenu calculée dans les timelines 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 les événements de bouton multimédia envoyés, par exemple, par un casque Bluetooth (#167). - Ajoutez l'implémentation par défaut à
MediaSession.Callback.onAddMediaItemspour permettre auxMediaItemsdemandés d'être transmis àPlayers'ils ontLocalConfiguration(par exemple, un URI) (#282). - Ajoutez les boutons de commande "seek to previous" (rechercher la position précédente) et "seek to next" (rechercher la position suivante) sur la vue de notification multimédia compacte par défaut pour Android 12 et les versions antérieures (#410).
- Ajoutez l'implémentation par défaut à
MediaSession.Callback.onAddMediaItemspour permettre auxMediaItemsdemandés d'être transmis àPlayers'ils ontLocalConfiguration(par exemple, un URI) (#282). - Ajoutez les boutons de commande "seek to previous" (rechercher la position précédente) et "seek to next" (rechercher la position suivante) sur la vue de notification multimédia compacte par défaut pour Android 12 et les versions antérieures (#410).
- Ajoutez la méthode d'assistance
- Interface utilisateur :
- Ajoutez les méthodes Util
shouldShowPlayButtonethandlePlayPauseButtonActionpour écrire des éléments d'UI personnalisés avec un bouton de lecture/pause.
- Ajoutez les méthodes Util
- 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 préparation d'une source multimédia Dash en direct multipériode produisait 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 que le thread de chargement attende l'initialisation deTimestampAdjuster. Si l'initialisation ne se termine pas avant le délai d'expiration, une erreurPlaybackExceptionest 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 si le schéma d'URI n'est pas sensible à la casse dans
DataSourceContractTest.
- Vérifiez si 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). - Supprimez deux constructeurs
SimpleCacheobsolètes et utilisez un constructeur non obsolète qui prend unDatabaseProviderà la place pour de meilleures performances. - Suppression du constructeur
DefaultBandwidthMeter. Utilisez plutôtDefaultBandwidthMeter.Builder. - Suppression des constructeurs
DefaultDrmSessionManager. Utilisez plutôtDefaultDrmSessionManager.Builder. - Supprimez deux constructeurs
HttpDataSource.InvalidResponseCodeExceptionobsolètes et utilisez un constructeur non obsolète qui accepte des champs supplémentaires(cause,responseBody) pour améliorer la journalisation des erreurs. - Supprimez
DownloadHelper.forProgressive,DownloadHelper.forHls,DownloadHelper.forDashetDownloadHelper.forSmoothStreaming, et utilisezDownloadHelper.forMediaItemà la place. - Supprimez le constructeur
DownloadServiceobsolète et utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètrechannelDescriptionResourceId. - Supprimez les constantes de chaîne obsolètes pour les ensembles de caractères (
ASCII_NAME,UTF8_NAME,ISO88591_NAME,UTF16_NAMEetUTF16LE_NAME). Utilisez plutôt les ensembles de caractères Kotlin du packagekotlin.text,java.nio.charset.StandardCharsetsoucom.google.common.base.Charsets. - Supprimez le constructeur
WorkManagerSchedulerobsolète et utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètreContextà la place. - Supprimez les méthodes obsolètes
createVideoSampleFormat,createAudioSampleFormat,createContainerFormatetcreateSampleFormat, qui étaient utilisées pour instancier la classeFormat. Utilisez plutôtFormat.Builderpour créer des instances deFormat. - Supprimez les méthodes obsolètes
copyWithMaxInputSize,copyWithSubsampleOffsetUs,copyWithLabel,copyWithManifestFormatInfo,copyWithGaplessInfo,copyWithFrameRate,copyWithDrmInitData,copyWithMetadata,copyWithBitrateetcopyWithVideoSize, et utilisez plutôtFormat.buildUpon()et les méthodes de définition. - Supprimez
ExoPlayer.retry(), qui est obsolète, et utilisezprepare()à la place. - Supprimez le constructeur
DefaultTrackSelectorobsolète sans argument et utilisez plutôtDefaultTrackSelector(Context). - Supprimez le constructeur
OfflineLicenseHelperobsolète et utilisezOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)à la place. - Supprimez le constructeur
DownloadManagerobsolète et utilisez plutôt celui qui accepte unExecutor. - Suppression des constructeurs
Cueobsolètes. Utilisez plutôtCue.Builder. - Supprimez le constructeur
OfflineLicenseHelperobsolète et utilisezOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)à la place. - 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
Player.Listener.onSeekProcessedetAnalyticsListener.onSeekProcessedobsolètes, et utilisezonPositionDiscontinuityavecDISCONTINUITY_REASON_SEEKà la place. - Supprimez
ExoPlayer.setHandleWakeLock(boolean)et utilisezsetWakeMode(int)à la place. - Supprimez
DefaultLoadControl.Builder.createDefaultLoadControl()obsolète et utilisezbuild()à la place. - Supprimez
MediaItem.PlaybackProperties, qui est obsolète, et 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 inclut les modifications suivantes depuis la version 1.0.1 :
- Bibliothèque principale :
- Ajoutez
Buffer.isLastSample()pour indiquer siBuffercontient l'indicateurC.BUFFER_FLAG_LAST_SAMPLE. - Correction d'un problème qui pouvait empêcher le dernier frame d'être rendu si le dernier échantillon avec des frames était retiré de la file d'attente sans lire l'échantillon de fin de flux. (#11079).
- Ajoutez
- Extracteurs :
- Correction de l'analyse des SPS H.265 dans les fichiers MPEG-TS en réutilisant la logique d'analyse déjà utilisée par les extracteurs RTSP et MP4 (#303).
- Texte :
- SSA : les fichiers UTF-16 sont acceptés s'ils commencent par un ordre d'octet (#319).
- Session :
- Correction d'un problème où
MediaControllerne met pas à jour ses commandes disponibles lorsqu'il est connecté à un ancienMediaSessionCompatqui met à jour ses actions. - Correction d'un bug qui empêchait
MediaLibraryServicede renvoyer la valeur "null" pour un appel de l'UI système àCallback.onGetLibraryRootavecparams.isRecent == truesur l'API 30 (#355). - Correction de la fuite de mémoire de
MediaSessionServiceouMediaLibraryService(#346). - Correction d'un bug où une mise à jour combinée de
Timelineet de position dans unMediaSessionpeut entraîner la génération d'unIllegalStateExceptionpar unMediaController.
- Correction d'un problème où
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 qui pouvait bloquer la lecture lorsque des flux d'échantillons vides étaient présents dans le contenu multimédia.
- Session :
- Correction d'un bug qui entraînait une exception dans
MediaControllerlorsque plusieurs éléments de file d'attente identiques étaient publiés par un ancienMediaSessionCompat(#290). - Ajout du transfert manquant de
MediaSession.broadcastCustomCommandà l'ancienneMediaControllerCompat.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 entraînait l'ignorance des instances
TrackSelectionOverrideenvoyées à partir d'unMediaControllersi elles référençaient un groupe avecFormat.metadata(#296). - Correction d'un problème où
Player.COMMAND_GET_CURRENT_MEDIA_ITEMdevait ê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 entraînaient 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 l'ait prévu (#314).
- Correction d'un bug qui entraînait une exception dans
- DASH :
- Correction de la gestion des timelines 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 :
- Rendez configurable la différence maximale entre les heures de début de deux segments à fusionner dans
SegmentDownloaderet les sous-classes (#248).
- Rendez configurable la différence maximale entre les heures 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 fait que les flux AVC à 60 fps sont marqués comme non compatibles (#10898).
- Correction des problèmes de performances de libération des frames lors de la lecture de contenus multimédias avec une fréquence d'images beaucoup plus élevée que la fréquence d'actualisation de l'écran.
- Mappez le format HEVC HDR10 sur
- Google Cast :
- Correction de l'erreur
STATE_IDLEtemporaire lors du passage d'un élément multimédia à un autre (#245).
- Correction de l'erreur
- RTSP :
- Capture de l'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/pause de la notification de se mettre à jour en fonction de l'état du lecteur (#192).
- Extension IMA :
- Correction d'un bug qui empêchait le démarrage des flux DAI sans aucune annonce, car le premier (et le seul dans le cas sans annonce) événement
LOADEDn'était pas reçu.
- Correction d'un bug qui empêchait le démarrage des flux DAI sans aucune annonce, car le premier (et le seul dans le cas sans annonce) é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 cesser de contribuer 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.