Media3

Prenez en charge des bibliothèques pour les cas d'utilisation de contenus multimédias.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
2 juillet 2025 1.7.1 - 1.8.0-beta01 1.8.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.6.1"

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

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

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

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

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

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

    // For 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.6.1"

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

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

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

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

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

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

    // For 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.8.0

Version 1.8.0-beta01

2 juillet 2025

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

  • Bibliothèque commune :
    • Ajout de la prise en charge du remplacement du lecteur dans ForwardingSimpleBasePlayer.
  • ExoPlayer :
    • Ajoutez la prise en charge de l'utilisation de l'ID de l'appareil virtuel à partir de Context transmis à ExoPlayer.Builder.
    • Activez la programmation dynamique par défaut en mode Scrubbing.
    • Évitez le rechargement inutile d'une source lorsque vous passez à la fin d'un élément.
    • Utilisez MediaCodec.BUFFER_FLAG_DECODE_ONLY par défaut en mode Scrubbing.
    • Génération d'une exception IllegalStateException lorsque PreloadMediaSource est lu par un ExoPlayer avec un thread de lecture différent du thread de préchargement (#2495).
    • Ajout de cloneAndMove à ShuffleMode avec une implémentation par défaut (#2226).
    • Modifiez le comportement par défaut de Renderer.getMinDurationToProgressUs pour renvoyer une valeur plus élevée si aucun appel à render n'est requis.
    • Correction d'un bug qui entraînait un retard de la dernière image lors de la recherche à la fin de la vidéo en mode pause. Pour le moment, la correction de bug ne prend effet que si ExoPlayer.Builder.experimentalSetDynamicSchedulingEnabled est activé.
  • Transformateur :
    • Ajout de CodecDbLite pour permettre des optimisations spécifiques au chipset des paramètres d'encodage vidéo.
    • Ajoutez l'option setEnableCodecDbLite à DefaultEncoderFactory pour activer l'optimisation des paramètres CodecDB Lite. Par défaut, ce signalement est défini sur "false".
  • Extracteurs :
    • Ajout de la prise en charge de la recherche dans les fichiers MP4 fragmentés avec plusieurs atomes sidx. Ce comportement peut être activé à l'aide de l'indicateur FLAG_MERGE_FRAGMENTED_SIDX sur FragmentedMp4Extractor (#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 WavExtractor pour utiliser les données SubFormat de l'extension d'en-tête pour le format audio lors de l'analyse d'un fichier de type WAVE_FORMAT_EXTENSIBLE.
    • MP4 : ajout de la prise en charge des boîtes ipcm et fpcm dé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 tkhd qui à la fois font pivoter et reflètent 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).
  • Audio :
    • Ajoutez la prise en charge de tous les formats d'échantillon PCM linéaire dans ChannelMappingAudioProcessor et TrimmingAudioProcessor.
    • Ajout de la prise en charge des silences dans CompositionPlayer.
    • Supprimez l'appel parasite à BaseAudioProcessor#flush() de BaseAudioProcessor#reset().
  • Vidéo :
    • 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).
  • Texte :
    • 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).
  • 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 API AutoCloseable basée sur les instances. Utilisez le nouveau Builder pour créer une instance pour un MediaItem, puis appelez retrieveTrackGroups(), retrieveTimeline() et retrieveDurationUs() pour obtenir des ListenableFuture pour les métadonnées. Les méthodes statiques précédentes sont désormais obsolètes (#2462).
  • Image :
    • Limitez les bitmaps décodés à la taille de l'écran dans BitmapFactoryImageDecoder pour éviter qu'une application plante avec Canvas: trying to draw too large bitmap. à partir de PlayerView lors 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ètre Context.
    • Alignez la taille de sortie bitmap maximale utilisée dans CompositionPlayer avec celle déjà utilisée dans Transformer (ce qui signifie que CompositionPlayer ne tient pas compte de la taille de l'écran lors du décodage des bitmaps, contrairement à ExoPlayer).
  • 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.
  • Session :
    • Correction d'un bug qui entraînait une IllegalStateException lors de l'appel de setSessionExtras depuis 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 PlaybackException personnalisé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 MediaController pouvait entraîner un IllegalArgumentException.
    • 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 lecteurs multimédias de la plate-forme, afin d'éviter les artefacts de position dans l'UI Android Auto (et d'autres lecteurs utilisant ces informations à partir de la session multimédia de la plate-forme) (#1758).
  • Extension Cronet :
    • Ajout de la gestion automatique des cookies (#5975).
  • Extension HLS :
    • 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).
  • Extension DASH :
    • Correction d'un bug qui pouvait générer une exception lorsque la durée d'une période DASH était raccourcie et que des échantillons au-delà de la nouvelle durée avaient déjà été lus par le pipeline de rendu (#2440).
    • Correction d'un bug qui empêchait le suivi de la redirection lors de l'utilisation de paramètres de requête CMCD (#2475).
  • Extension RTSP :
    • Correction de RtspClient pour utiliser l'URI de localisation tel qu'il est fourni lors du traitement d'une réponse HTTP 302 (#2398).
  • Extensions de décodeur (FFmpeg, VP9, AV1, etc.) :
    • Correction d'un bug où DefaultTrackSelector.setAllowInvalidateSelectionsOnRendererCapabilitiesChange n'a aucun effet pour les extensions de décodeur audio (#2258).
  • Extension Cast :
    • Ajout de la prise en charge de setVolume() et getVolume() (#2279).
    • Empêchez CastPlayer d'entrer dans STATE_BUFFERING lorsque la timeline est vide.
  • Utilitaires de test :
    • Ajoutez advance(player).untilPositionAtLeast et untilMediaItemIndex à TestPlayerRunHelper pour faire avancer le lecteur jusqu'à une position spécifiée. Dans la plupart des cas, ces méthodes sont plus fiables que les méthodes untilPosition et untilStartOfMediaItem existantes.
    • Déplacez FakeDownloader vers le module test-utils-robolectric pour le réutiliser dans d'autres tests.

Version 1.8.0-alpha01

19 mai 2025

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

  • ExoPlayer :
    • 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é avec setScrubbingModeParameters(..) sur ExoPlayer et ExoPlayer.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 de signaler les erreurs de préparation dans le contenu de AdsMediaSource (#2337).
    • Correction d'une fuite de mémoire dans MergingMediaSource, par exemple lors du téléchargement indépendant de sous-titres (#2338).
    • Autoriser CmcdConfiguration.Factory à renvoyer null pour 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 PreCacheHelper qui permet aux applications de précharger un seul élément multimédia avec une position de début et une durée spécifiées.
  • Transformateur :
    • Pour combler un silence initial (ajouté via addGap()) avec de l'audio silencieux, vous devez désormais définir explicitement experimentalSetForceAudioTrack(true) dans EditedMediaItemSequence.Builder. Si le trou se trouve au milieu de la séquence, ce signalement n'est pas nécessaire.
    • Déplacez l'interface Muxer de media3-transformer vers media3-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 VideoCompositorSettings personnalisé pour organiser les séquences dans une mise en page 2x2 ou PIP.
  • Extracteurs :
    • 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 :
    • Autoriser le mixage ascendant/descendant de puissance constante dans DefaultAudioMixer.
    • Rendre ChannelMappingAudioProcessor, TrimmingAudioProcessor et ToFloatPcmAudioProcessor publics (#2339).
    • Utilisez AudioTrack#getUnderrunCount() dans AudioTrackPositionTracker pour détecter les sous-flux dans DefaultAudioSink au 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 de l'audio et de la vidéo pendant les 10 premières secondes après la reprise de la lecture depuis une pause lorsqu'un appareil Bluetooth était connecté.
    • Correction d'un bug qui empêchait AnalyticsListener.onAudioPositionAdvancing de signaler l'heure à laquelle l'audio a commencé à avancer, mais signalait l'heure de la première mesure.
  • Vidéo :
    • Ajout de l'API expérimentale ExoPlayer pour inclure l'indicateur MediaCodec.BUFFER_FLAG_DECODE_ONLY lors de la mise en file d'attente des tampons d'entrée de 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 avec DefaultRenderersFactory.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 :
    • 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/SSA dans les fichiers Matroska. Auparavant, MatroskaExtractor n'était compatible qu'avec CodecId = 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é layer dans 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).
  • Effet :
    • Ajoutez Presentation.createForShortSide(int) qui crée un Presentation qui garantit que le côté le plus court correspond toujours à la valeur donnée, quelle que soit l'orientation de l'entrée.
  • Muxers :
    • L'API writeSampleData() utilise désormais la classe BufferInfo spécifique au multiplexeur au lieu de MediaCodec.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 empêchait 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 qui entraînait la production d'un NullPointerException lorsqu'une valeur nulle était transmise à getLibraryRoot d'un MediaBrowser connecté à un ancien MediaBrowserServiceCompat.
    • Correction d'un bug qui entraînait le plantage de l'ancienne application de session avec un ClassNotFoundException lors 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.uri avec le MediaMetadata des 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ôt MediaItem.RequestMetadata.mediaUri.
  • Interface utilisateur :
    • 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-compose pour SeekBackButtonState et SeekForwardButtonState.
    • 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 appel player.seekTo pour chaque mouvement, puis quitte le mode d'avance rapide lorsque le doigt est retiré de l'écran. Cette intégration peut être activée avec time_bar_scrubbing_enabled = true dans XML ou la méthode setTimeBarScrubbingEnabled(boolean) à partir de Java/Kotlin.
    • Faites en sorte que PlayerSurface accepte un argument Player pouvant être nul.
  • 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 DownloadHelper et demander un DownloadRequest à 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. Le DownloadRequest renvoyé contient la plage d'octets résolue, avec laquelle un ProgressiveDownloader peut être créé et télécharger le contenu correspondant.
    • Ajoutez DownloadHelper.Factory avec lequel les méthodes DownloadHelper.forMediaItem() statiques sont remplacées.
    • Ajoutez Factory pour les implémentations SegmentDownloader.
    • Ajout de la prise en charge du téléchargement partiel pour les flux adaptatifs. Les applications peuvent préparer un flux adaptatif avec DownloadHelper et demander un DownloadRequest à 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. Le DownloadRequest renvoyé contient la plage de temps résolue, avec laquelle un SegmentDownloader concret peut être créé et le contenu téléchargé en conséquence.
  • Extension HLS :
    • Prise en charge de X-ASSET-LIST et des diffusions en direct avec HlsInterstitialsAdsLoader.
  • Extension RTSP :
    • Ajout de la prise en charge de l'analyse pour les SessionDescriptions contenant des lignes avec des caractères d'espacement de fin (#2357).
  • Extension Cast :
    • Ajout de la prise en charge de getDeviceVolume(), setDeviceVolume(), getDeviceMuted() et setDeviceMuted() (#2089).
  • Utilitaires de test :
    • transformer.TestUtil.addAudioDecoders(String...), transformer.TestUtil.addAudioEncoders(String...) et transformer.TestUtil.addAudioEncoders(ShadowMediaCodec.CodecConfig, String...) supprimés. Utilisez plutôt ShadowMediaCodecConfig pour 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.
  • Suppression des symboles obsolètes :
    • Suppression du constructeur SegmentDownloader obsolète SegmentDownloader(MediaItem, Parser<M>, CacheDataSource.Factory, Executor) et des constructeurs correspondants dans ses sous-classes DashDownloader, HlsDownloader et SsDownloader.
    • Suppression des Player.hasNext() et Player.hasNextWindow() obsolètes. Utilisez plutôt Player.hasNextMediaItem().
    • Suppression de Player.next() obsolète. Utilisez plutôt Player.seekToNextMediaItem().
    • Suppression de Player.seekToPreviousWindow() obsolète. Utilisez Player.seekToPreviousMediaItem() à la place.
    • Suppression de Player.seekToNextWindow() obsolète. Utilisez Player.seekToNextMediaItem() à la place.
    • Suppression de BaseAudioProcessor, qui est obsolète, dans le module exoplayer. Utilisez BaseAudioProcessor sous le module common.
    • Suppression du constructeur MediaCodecVideoRenderer obsolète MediaCodecVideoRenderer(Context, MediaCodecAdapter.Factor, MediaCodecSelector, long, boolean, @Nullable Handler, @Nullable VideoRendererEventListener, int, float, @Nullable VideoSinkProvider).

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 un PlaybackParameters avec une nouvelle valeur pitch (#2257).
  • ExoPlayer :
    • Correction d'un problème qui entraînait l'échec de la transition de l'é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ù ProgressiveMediaPeriod génère une IllegalStateException lorsque PreloadMediaSource tente d'appeler son getBufferedDurationUs() avant qu'il ne soit préparé (#2315).
    • Correction de l'envoi de CmcdData dans 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 conteneur tkhd et l'expose en tant qu'entrée Mp4AlternateGroupData dans le Format.metadata de chaque piste (#2242).
  • 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 MediaSession de 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 un calendrier à 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_TIMELINE alors que COMMAND_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 MediaSessionService.setMediaNotificationProvider après d'autres interactions avec le service, comme setForegroundServiceTimeoutMs (#2305).
  • Interface utilisateur :
    • Activez PlayerSurface pour qu'il fonctionne avec ExoPlayer.setVideoEffects et CompositionPlayer.
    • Correction d'un bug qui empêchait de recomposer PlayerSurface avec un nouveau Player.
  • Extension HLS :
    • Correction d'un problème qui empêchait de définir la durée des blocs dans CmcdData pour les contenus multimédias HLS, ce qui entraînait un échec de l'assertion lors du traitement des segments multimédias chiffrés (#2312).
  • 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 AudioManagerCompat et AudioFocusRequestCompat pour remplacer les classes équivalentes dans androidx.media.
    • Mettez à niveau Kotlin de la version 1.9.20 vers la version 2.0.20 et utilisez le plug-in Gradle Compose Compiler. 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ôt Format.toBundle().
    • Correction d'un bug dans SimpleBasePlayer où la définition d'un nouveau currentMediaItemIndex dans State après setPlaylist avec null MediaMetadata ne réévalue pas les métadonnées (#1940).
    • Modifiez l'accès SimpleBasePlayer.State de protégé à public pour faciliter la gestion des mises à jour dans d'autres classes (#2128).
  • ExoPlayer :
    • Ajoutez MediaExtractorCompat, une nouvelle classe qui fournit des fonctionnalités équivalentes à la plate-forme MediaExtractor.
    • Ajout de la prise en charge expérimentale du préchauffage "ExoPlayer" pour la lecture à l'aide de MediaCodecVideoRenderer. Vous pouvez configurer DefaultRenderersFactory via experimentalSetEnableMediaCodecVideoRendererPrewarming pour fournir un MediaCodecVideoRenderer secondaire à ExoPlayer. Si cette option est activée, ExoPlayer pré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 bufferForPlaybackMs et bufferForPlaybackAfterRebufferMs dans DefaultLoadControl à 1 000 et 2 000 ms, respectivement.
    • Initialisez DeviceInfo et le volume de l'appareil de manière asynchrone (si activé à l'aide de setDeviceVolumeControlEnabled). Ces valeurs ne sont pas disponibles immédiatement après ExoPlayer.Builder.build(), et Player.Listener notifie les modifications via onDeviceInfoChanged et onDeviceVolumeChanged.
    • L'ID de session audio initiale n'est plus disponible immédiatement après la création du lecteur. Vous pouvez utiliser AnalyticsListener.onAudioSessionIdChanged pour é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éthode DefaultTrackSelector.selectVideoTrack().
    • Ajoutez le paramètre retryCount à MediaSourceEventListener.onLoadStarted et aux méthodes MediaSourceEventListener.EventDispatcher correspondantes.
    • 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.Listener vers un PreloadManagerListener de premier niveau.
    • RenderersFactory.createSecondaryRenderer peut ê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 CmcdData pour les requêtes de fichier manifeste dans les formats de streaming adaptatif DASH, HLS et SmoothStreaming (#1951).
    • Fournissez MediaCodecInfo du codec qui sera initialisé dans MediaCodecRenderer.onReadyToInitializeCodec (#1963).
    • Modifiez AdsMediaSource pour permettre à AdPlaybackStates de 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 du passage à un contenu multimédia après une annonce mid-roll.
    • Faites en sorte que DefaultRenderersFactory ajoute deux instances MetadataRenderer pour 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 segment doit être annulé lorsque la lecture est suspendue (#1785).
    • Ajout d'une option à ClippingMediaSource pour 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() sur true alors qu'il était passé à STATE_IDLE ou STATE_ENDED (#2133).
    • Ajout de lastRebufferRealtimeMs à LoadControl.Parameter (#2113).
  • 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.registerInputStream et VideoFrameProcessor.Listener.onInputStreamRegistered pour utiliser Format.
    • 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 avec Transformer.Builder.setUsePlatformDiagnostics(false).
    • Divisez InAppMuxer en InAppMp4Muxer et InAppFragmentedMp4Muxer. Vous utilisez InAppMp4Muxer pour produire un fichier MP4 non fragmenté, tandis que InAppFragmentedMp4Muxer sert à produire un fichier MP4 fragmenté.
    • Déplacez l'interface Muxer de media3-muxer vers media3-transformer.
    • Ajoutez MediaProjectionAssetLoader, qui fournit des contenus multimédias à partir d'un MediaProjection pour l'enregistrement d'écran, et ajoutez la prise en charge de l'enregistrement d'écran à l'application de démonstration Transformer.
    • Ajoutez #getInputFormat() à l'interface Codec.
    • Transférez la responsabilité de la libération de GlObjectsProvider à l'appelant dans DefaultVideoFrameProcessor et DefaultVideoCompositor lorsque 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 avec des longueurs exprimées en 1 ou 2 octets (au lieu de 4).
    • Correction de ArrayIndexOutOfBoundsException dans 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 onAudioPositionAdvancing pour qu'il soit appelé lorsque la lecture reprend (auparavant, il était appelé lorsque la lecture était mise en pause).
    • Ne contournez pas SonicAudioProcessor lorsque SpeedChangingAudioProcessor est 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 de DefaultAudioSink.
    • Corrigez MediaCodecAudioRenderer.getDurationToProgressUs() et DecoderAudioRenderer.getDurationToProgressUs() afin que les recherches réinitialisent correctement les durées fournies.
    • Définissez androidx.media3.common.audio.SonicAudioProcessor comme numéro définitif.
    • Ajout de la prise en charge du PCM flottant à ChannelMappingAudioProcessor et TrimmingAudioProcessor.
  • Vidéo :
    • Remplacez MediaCodecVideoRenderer.shouldUsePlaceholderSurface par "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 ExoPlayer expérimentale pour accélérer la recherche. Activez-le avec la nouvelle API DefaultRenderersFactory.experimentalSetParseAv1SampleDependencies.
    • Ajout de l'API expérimentale ExoPlayer pour supprimer les tampons d'entrée du décodeur MediaCodecVideoRenderer tardifs dont il n'a pas besoin. Activez-le avec DefaultRenderersFactory.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 éventuels frames en attente (#1973).
    • Excluez les appareils Xiaomi et OPPO du mode Surface détachée pour éviter le scintillement de l'écran (#2059).
  • 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:origin et tts:extent à l'aide de style (#2953).
    • Limitez les codes temporels WebVTT et SubRip à exactement trois décimales. Auparavant, nous analysions de manière incorrecte 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 IllegalStateException lorsqu'un fichier SSA contient un cue de 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 configuration lors de la lecture de contenu ClearKey sur les appareils équipés d'une API < 27 (#1732).
  • Effet :
    • La fonctionnalité de OverlaySettings a été déplacée vers StaticOverlaySettings. OverlaySettings peut être sous-classé pour autoriser les paramètres de superposition dynamique.
  • Muxers :
    • MuxerException a été déplacé hors de l'interface Muxer pour éviter un nom complet très long.
    • Remplacement du nom de la méthode setSampleCopyEnabled() par setSampleCopyingEnabled() dans Mp4Muxer.Builder et FragmentedMp4Muxer.Builder.
    • Mp4Muxer.addTrack() et FragmentedMp4Muxer.addTrack() renvoient désormais un ID de piste int au lieu d'un TrackToken.
    • Mp4Muxer et FragmentedMp4Muxer n'implémentent plus l'interface Muxer.
    • Désactivation par défaut du traitement par lot et de la copie des exemples Mp4Muxer.
    • Correction d'un bug dans FragmentedMp4Muxer qui 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 avant stopSelf(). Lorsque vous remplacez onTaskRemoved, utilisez plutôt MediaSessionService.pauseAllPlayersAndStopSelf().
    • Maintenez la notification visible lorsque la lecture passe à l'état d'erreur ou d'arrêt. La notification n'est supprimée que si la playlist est effacée ou si le lecteur est libéré.
    • Amélioration de la gestion des actions ACTION_PLAY et ACTION_PAUSE de MediaSession sur 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 Context en 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 Player sur un MediaController connecté à 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).
  • Interface utilisateur :
    • Ajoutez des détenteurs d'état et des composables au module media3-ui-compose pour PlayerSurface, PresentationState, PlayPauseButtonState, NextButtonState, PreviousButtonState, RepeatButtonState, ShuffleButtonState et PlaybackSpeedState.
  • Téléchargements :
    • Correction d'un bug dans CacheWriter qui laisse les sources de données ouvertes et les zones de cache verrouillées si la source de données génère un Exception autre que IOException (#9760).
  • 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 au AdPlaybackState transmis au AdsMediaSource. Cette première version n'est compatible qu'avec les flux VOD HLS comportant des attributs X-ASSET-URI.
    • Ajout de HlsInterstitialsAdsLoader.AdsMediaSourceFactory. Les applications peuvent l'utiliser pour créer des instances AdsMediaSource qui utilisent un HlsInterstitialsAdsLoader de manière pratique et sécurisée.
    • Analyse la balise SUPPLEMENTAL-CODECS de 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).
  • Extension DASH :
    • Ajout de la prise en charge du format AC-4 de 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:supplementalCodecs du fichier manifeste DASH pour détecter les formats Dolby Vision (#1785).
    • Amélioration de la gestion des transitions de période dans les diffusions en direct où la période contient des échantillons multimédias au-delà de la durée de période déclarée (#1698).
    • Correction 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 :
    • Intégrez des instances AudioSink et AudioRendererEventListener personnalisées dans MidiRenderer.
  • Extension Cast :
    • Mettez à jour la dépendance play-services-cast-framework vers la version 21.5.0 pour corriger un plantage FLAG_MUTABLE dans 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).
  • Application de démonstration :
    • Étendez demo-compose avec des boutons supplémentaires et améliorez l'intégration de PlayerSurface avec la prise en charge de la mise à l'échelle et de l'obturateur.
  • Suppression des symboles obsolètes :
    • Suppression de la méthode AudioMixer.create() obsolète. Utilisez DefaultAudioMixer.Factory().create() à la place.
    • Suppression des méthodes Transformer.Builder obsolètes suivantes :
      • setTransformationRequest(), utilisez plutôt setAudioMimeType(), setVideoMimeType() et setHdrMode().
      • setAudioProcessors(), définissez le processeur audio dans un EditedMediaItem.Builder.setEffects() et transmettez-le à Transformer.start() à la place.
      • setVideoEffects(), définissez l'effet vidéo dans un EditedMediaItem.Builder.setEffects() et transmettez-le à Transformer.start() à la place.
      • setRemoveAudio(), utilisez EditedMediaItem.Builder.setRemoveAudio() pour supprimer l'audio de EditedMediaItem transmis à Transformer.start() à la place.
      • setRemoveVideo(), utilisez EditedMediaItem.Builder.setRemoveVideo() pour supprimer la vidéo de EditedMediaItem transmise à Transformer.start().
      • setFlattenForSlowMotion(), utilisez EditedMediaItem.Builder.setFlattenForSlowMotion() pour aplatir le EditedMediaItem transmis à Transformer.start().
      • setListener(), utilisez plutôt addListener(), removeListener() ou removeAllListeners().
    • Suppression des méthodes Transformer.Listener obsolètes suivantes :
      • onTransformationCompleted(MediaItem), utilisez plutôt onCompleted(Composition, ExportResult).
      • onTransformationCompleted(MediaItem, TransformationResult), utilisez plutôt onCompleted(Composition, ExportResult).
      • onTransformationError(MediaItem, Exception), utilisez plutôt onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationException), utilisez plutôt onError(Composition, ExportResult, ExportException).
      • onTransformationError(MediaItem, TransformationResult, TransformationException), utilisez plutôt onError(Composition, ExportResult, ExportException).
      • onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest), utilisez plutôt onFallbackApplied(Composition, TransformationRequest, TransformationRequest).
    • Supprimez la classe TransformationResult obsolète. Utilisez plutôt ExportResult.
    • Supprimez la classe TransformationException obsolète. Utilisez plutôt ExportException.
    • Suppression de Transformer.PROGRESS_STATE_NO_TRANSFORMATION obsolète. Utilisez Transformer.PROGRESS_STATE_NOT_STARTED à la place.
    • Suppression de Transformer.setListener() obsolète. Utilisez plutôt Transformer.addListener(), Transformer.removeListener() ou Transformer.removeAllListeners().
    • Suppression de Transformer.startTransformation() obsolète. Utilisez Transformer.start(MediaItem, String) à la place.
    • Suppression de SingleFrameGlShaderProgram obsolète. Utilisez BaseGlShaderProgram à la place.
    • Suppression de Transformer.flattenForSlowMotion. Utilisez EditedMediaItem.flattenForSlowMotion à la place.
    • Suppression de ExoPlayer.VideoComponent, ExoPlayer.AudioComponent, ExoPlayer.TextComponent et ExoPlayer.DeviceComponent.
    • Suppression de androidx.media3.exoplayer.audio.SonicAudioProcessor.
    • Suppression des méthodes DownloadHelper obsolètes suivantes :
      • Constructeur DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilities[]), utilisez plutôt DownloadHelper(MediaItem, @Nullable MediaSource, TrackSelectionParameters, RendererCapabilitiesList).
      • getRendererCapabilities(RenderersFactory), une fonctionnalité équivalente peut être obtenue en créant un DefaultRendererCapabilitiesList avec un RenderersFactory et en appelant DefaultRendererCapabilitiesList.getRendererCapabilities().
    • Suppression de la méthode PlayerNotificationManager.setMediaSessionToken(MediaSessionCompat). Utilisez PlayerNotificationManager.setMediaSessionToken(MediaSession.Token) et transmettez-le dans (MediaSession.Token) compatToken.getToken() à la place.

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 : ne pas arrêter la lecture prématurément lorsque la table des matières d'un frame VBRI ne couvre pas toutes les données MP3 d'un fichier (#1904).
  • Vidéo :
    • Restauration de l'utilisation des valeurs de proportions de pixels MediaCodecAdapter fournies lors du traitement de onOutputFormatChanged (#1371).
  • Texte :
    • Correction d'un bug dans ReplacingCuesResolver.discardCuesBeforeTimeUs où le repère actif à timeUs (démarré avant, mais pas encore terminé) était supprimé à tort (#1939).
  • Métadonnées :
    • Extraction du numéro de disque/de piste et du genre des commentaires Vorbis dans MediaMetadata (#1958).

Version 1.5.0

27 novembre 2024

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

  • Bibliothèque commune :
    • Ajout de ForwardingSimpleBasePlayer qui permet de transférer vers un autre lecteur avec de petits ajustements tout en assurant une cohérence totale et la gestion des écouteurs (#1183).
    • Remplacez SimpleBasePlayer.State.playlist par la méthode getPlaylist().
    • Ajoutez un remplacement pour SimpleBasePlayer.State.Builder.setPlaylist() afin de spécifier directement un Timeline et les Tracks et Metadata actuels 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-ktx qui fournit des fonctionnalités spécifiques à Kotlin basées sur la bibliothèque Common.
    • Ajoutez la fonction d'extension de suspension Player.listen pour lancer une coroutine afin d'écouter Player.Events dans la bibliothèque media3-common-ktx.
    • Supprimez les annotations @DoNotInline des classes internes manuellement mises en forme 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 comme ceux-ci pour éviter les échecs d'exécution (la mise hors ligne manuelle n'est donc plus nécessaire). Tous les utilisateurs Gradle de la bibliothèque doivent déjà utiliser une version du plug-in Android Gradle qui utilise une version de R8 qui le fait, en raison de compileSdk = 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.
  • 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, utilisez MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart().
    • Ajoutez PreloadMediaSource.PreloadControl.onPreloadError pour permettre aux implémentations PreloadMediaSource.PreloadControl d'effectuer des actions en cas d'erreur.
    • Ajoutez BasePreloadManager.Listener pour 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 mise au point 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.CryptoException est parfois signalé comme une "erreur d'exécution inattendue" lorsque MediaCodec est utilisé en mode asynchrone (comportement par défaut sur l'API 31 et versions ultérieures).
    • Transmettez bufferedDurationUs au lieu de bufferedPositionUs avec PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). De plus, DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS est remplacé par DefaultPreloadManager.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 ForwardingRenderer qui 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, DefaultLoadControl limite 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émentant LoadControl.shouldContinuePreloading() en conséquence (comme lors du remplacement de cette méthode dans DefaultLoadControl). L'implémentation par défaut de LoadControl désactive le préchargement si une application utilise une implémentation personnalisée de LoadControl.
    • Ajoutez la méthode MediaSourceEventListener.EventDispatcher.dispatchEvent() pour permettre l'appel d'événements d'écouteurs de sous-classe (1736).
    • Ajoutez DefaultPreloadManager.Builder qui crée les instances DefaultPreloadManager et ExoPlayer avec des configurations partagées de manière cohérente.
    • Supprimez le paramètre Renderer[] de LoadControl.onTracksSelected(), car l'implémentation DefaultLoadControl peut récupérer les types de flux à partir de ExoTrackSelection[].
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) obsolète et méthode marquée comme finale pour empêcher les remplacements. Utilisez plutôt le nouveau DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).
    • Signalez les événements MediaSourceEventListener provenant de sources secondaires dans MergingMediaSource. 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 avec MediaItem.LocalConfiguration.subtitleConfigurations), qui peuvent apparaître comme des événements de chargement en double émis par AnalyticsListener.
    • 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 (pendant le 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).
    • 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 à SntpClient pour 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 un Surface.
    • ImageAssetLoader signale une entrée non acceptée via AssetLoader.onError au lieu de générer une IllegalStateException.
    • Rendez obligatoire la définition de la durée de l'image à l'aide de MediaItem.Builder.setImageDurationMs pour l'exportation d'images.
    • Ajout de la prise en charge de l'exportation pour les silences dans les séquences d'EditedMediaItems audio.
  • 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 Mp4Extractor et FragmentedMp4Extractor à 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 exemples de préroll pour les positions de début de contenu multimédia non keyframe 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 mdhd dans Mp4Extractor et FragmentedMp4Extractor (#1531).
    • Correction de la mise à l'échelle incorrecte de media_time dans les listes de modifications MP4. Alors que segment_duration était déjà correctement mis à l'échelle à l'aide de l'échelle temporelle du film, media_time est 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 endIndices pour les fichiers MP4 avec liste de montage (#1797).
    • Correction de l'analyse de la durée du contenu multimédia dans la boîte mdhd des fichiers MP4 pour gérer les valeurs -1 (#1819).
    • Ajout de la prise en charge de l'identification de la boîte h263 dans 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).
  • DataSource :
    • Mise à jour de HttpEngineDataSource pour permettre l'utilisation à partir de l'extension S7 au lieu du niveau d'API 34 (#1262).
    • DataSourceContractTest : affirmer que DataSource.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éthode DataSourceContractTest.TestResource.Builder.setResolvedUri().
    • DataSourceContractTest : affirmez que DataSource.getUri() et getResponseHeaders() renvoient leur valeur "open" après un appel open() ayant échoué (en raison d'une ressource introuvable) et avant un appel close() ultérieur.
      • Le remplacement de DataSourceContractTest.getNotFoundResources() permet aux sous-classes de test de fournir plusieurs ressources "introuvables" et de fournir également les en-têtes attendus. Cela permet de faire la distinction entre une erreur HTTP 404 (avec des en-têtes) et un message "Serveur introuvable" (sans en-têtes).
  • Audio :
    • Configure 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 SpeedChangingAudioProcessor qui entraînait la perte de 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 les versions ultérieures, MediaCodecAdapter peut désormais recevoir un null Surface dans configure et des appels à une nouvelle méthode detachOutputSurface pour supprimer un Surface précédemment défini si le codec le permet (MediaCodecInfo.detachedSurfaceSupported).
    • Utilisez les valeurs de proportions de pixels MediaCodecAdapter fournies, le cas échéant, lors du traitement de onOutputFormatChanged (#1371).
    • Ajout d'une solution de contournement pour un problème d'appareil sur la Galaxy Tab S7 FE qui fait que les flux H264 sécurisés à 60 fps sont marqués 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 :
    • Ajout d'un VoiceSpan personnalisé et remplissage 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 long 64 bits lorsqu'ils sont représentés en microsecondes et multipliés par la base temporelle MPEG 90,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).
  • Métadonnées :
    • Attribuez le type C.TRACK_TYPE_METADATA aux pistes contenant du contenu icy ou vnd.dvb.ait.
  • Image :
    • Ajoutez ExternallyLoadedImageDecoder pour une intégration simplifiée avec des bibliothèques de chargement d'images externes telles que Glide ou Coil.
  • DataSource :
    • Ajout de FileDescriptorDataSource, un nouveau DataSource qui peut être utilisé pour lire à partir d'un FileDescriptor (#3757).
  • Effet :
    • Ajout d'une solution de contournement DefaultVideoFrameProcessor pour la mise à l'échelle mineure SurfaceTexture. SurfaceTexture peut 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 celui attendu.
    • Accélérer DefaultVideoFrameProcessor.queueInputBitmap() Par conséquent, l'exportation d'images vers des vidéos avec Transformer est plus rapide.
  • Extension IMA :
    • Correction d'un bug qui pouvait entraîner un ArrayIndexOutOfBoundsException dans ImaServerSideAdInsertionMediaSource lors 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 ArrayIndexOutOfBoundsException lors de la lecture après le dernier mid-roll (#1741).
  • 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 un ForegroundServiceDidNotStartInTimeException (#1528).
    • Correction d'un bug qui entraînait l'envoi de commandes personnalisées depuis un MediaBrowser vers MediaSessionCompat.Callback au lieu de la variante MediaBrowserServiceCompat de la méthode lorsqu'il était connecté à un ancien service. Cela empêchait MediaBrowser de recevoir la valeur de retour réelle renvoyée par l'ancien service (#1474).
    • Gérez IllegalArgumentException généré par les appareils de certains fabricants lors de la configuration du broadcast receiver pour les intents des boutons multimédias (#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 actions avec l'ancienne bibliothèque avec MediaBrowserCompat. Notez qu'avec Media3, les boutons de commande pour les éléments multimédias sont disponibles pour MediaBrowser et MediaController. Consultez Actions de navigation personnalisées d'AAOS.
    • 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.setIconUri pour n'accepter que les URI de contenu.
    • Transmettez les hints de connexion d'un navigateur Media3 à l'MediaBrowserCompat initial lors de la connexion à un MediaBrowserCompat hé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 MediaBrowser connecté à un ancien service de navigateur de recevoir une erreur envoyée par le service après que le navigateur s'est abonné à un parentid.
    • Améliorer le comportement d'interopérabilité afin qu'un navigateur Media3 connecté à un MediaBrowserService hérité ne demande pas deux fois les enfants d'un parentId lors de l'abonnement à un parent.
  • Interface utilisateur :
    • Activez la solution de contournement pour la vidéo étirée/recadrée dans PlayerView-in-Compose-AndroidView en raison de problèmes liés aux transitions partagées basées sur XML. Les applications utilisant PlayerView dans AndroidView doivent appeler PlayerView.setEnableComposeSurfaceSyncWorkaround pour activer l'option (#1237, #1594).
    • Ajout de setFullscreenButtonState à PlayerView pour 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 de sélectionner "Aucun" dans la sélection de texte si des préférences de sélection de pistes de texte étaient définies par l'application.
  • 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 Bundle lors de la lecture de flux SmoothStreaming avec des pistes de texte (#1779).
  • Extension RTSP :
    • Correction de la suppression des informations utilisateur pour les URL contenant des caractères @ encodés (#1138).
    • Correction du plantage lors de l'analyse des paquets RTP avec extensions d'en-tête (#1225).
  • 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, mais la lecture binaurale n'est actuellement pas disponible.
    • Ajout de la prise en charge des pages de 16 Ko pour les extensions de décodeur sur Android 15 (#1685).
  • 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 DeviceInfo de CastPlayer lorsqu'un Context est fourni. Cela permet d'associer le MediaSession à un RoutingSession, ce qui est nécessaire pour intégrer le sélecteur de sortie (#1056).
  • Utilitaires de test :
    • DataSourceContractTest inclut désormais des tests pour vérifier les éléments suivants :
      • Le flux d'entrée read position a été mis à jour.
      • Le tampon de sortie offset est appliqué correctement.
  • Application de démonstration
    • Résolution des fuites de mémoire dans l'application de démonstration de contenu court (#1839).
  • Suppression des symboles obsolètes :
    • Suppression des Player.hasPrevious et Player.hasPreviousWindow() obsolètes. Utilisez Player.hasPreviousMediaItem() à la place.
    • Suppression de la méthode Player.previous() obsolète. Utilisez Player.seekToPreviousMediaItem() à la place.
    • Suppression de la méthode DrmSessionEventListener.onDrmSessionAcquired obsolète.
    • Suppression des constructeurs DefaultEncoderFactory obsolètes. Utilisez DefaultEncoderFactory.Builder à la place.

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 :
    • Gérer les rappels de préchargement de manière asynchrone dans PreloadMediaSource (#1568).
    • Autoriser la lecture quelle que soit la durée mise en mémoire tampon en cas d'échec du chargement (#1571).
  • Extracteurs :
    • MP3 : correction de l'erreur Searched too many bytes en ignorant correctement les données non MP3 de fin en fonction du champ de longueur dans un frame Info (#1480).
  • Texte :
    • TTML : correction de la gestion des valeurs tts:fontSize en pourcentage pour s'assurer qu'elles sont correctement héritées des nœuds parents avec des valeurs tts:fontSize en pourcentage.
    • Correction de IndexOutOfBoundsException dans LegacySubtitleUtil en 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 l'événement final dans Subtitle (#1516).
  • DRM :
    • Correction de l'erreur android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE sur 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éthode MediaDrm.requiresSecureDecoder du framework (#1603).
  • Effet :
    • Ajoutez une méthode release() à GlObjectsProvider.
  • Session :
    • Transformez un double appui sur KEYCODE_HEADSETHOOK en action "Passer à la piste suivante", comme indiqué dans la documentation (#1493).
    • Gérez KEYCODE_HEADSETHOOK comme une commande "play" dans MediaButtonReceiver lorsque vous décidez de l'ignorer pour éviter un ForegroundServiceDidNotStartInTimeException (#1581).
  • 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() et SimpleBasePlayer.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 avec mediaItemIndex == 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 un MediaItem non image (comme indiqué dans la documentation).
    • Ajoutez Format.customData pour stocker les informations personnalisées fournies par l'application sur les instances Format.
  • ExoPlayer :
    • Ajoutez BasePreloadManager, qui coordonne le préchargement de plusieurs sources en fonction des priorités définies par leur rankingData. Vous pouvez personnaliser cette classe en l'étendant. Ajoutez DefaultPreloadManager qui utilise PreloadMediaSource pour précharger des exemples de contenus multimédias des sources en mémoire et utilise un entier rankingData qui indique l'index d'un élément dans l'UI.
    • Ajoutez PlayerId à la plupart des méthodes de LoadControl pour permettre aux implémentations de LoadControl de prendre en charge plusieurs joueurs.
    • Suppression de Buffer.isDecodeOnly() et C.BUFFER_FLAG_DECODE_ONLY. Il n'est pas nécessaire de définir cet indicateur, car les moteurs de rendu et les décodeurs décideront d'ignorer les tampons en fonction du code temporel. Les implémentations Renderer personnalisées doivent vérifier si le temps tampon est d'au moins BaseRenderer.getLastResetPositionUs() pour décider si un échantillon doit être affiché. Les implémentations SimpleDecoder personnalisées peuvent vérifier isAtLeastOutputStartTimeUs() si nécessaire ou marquer d'autres tampons avec DecoderOutputBuffer.shouldBeSkipped pour les ignorer.
    • Autoriser une valeur nulle à être renvoyée par TargetPreloadStatusControl.getTargetPreloadStatus(T) pour indiquer de ne pas précharger un MediaSource avec le rankingData donné.
    • Ajout de remove(MediaSource) à BasePreloadManager.
    • Ajoutez reset() à BasePreloadManager pour libérer toutes les sources de détention tout en conservant l'instance du gestionnaire de préchargement.
    • Ajout de ExoPlayer.setPriority() (et Builder.setPriority()) pour définir la valeur de priorité utilisée dans PriorityTaskManager et 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émentations DefaultPreloadManager et PreloadMediaSource.PreloadControl personnalisé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 à PreloadMediaSource pour ignorer la période de préchargement.
    • Ajoutez le nouveau code d'erreur PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED qui est utilisé lorsque les ressources de codec sont récupérées pour des tâches de priorité plus élevée.
    • Permet à AdsMediaSource de 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_ENDED lors 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() en onSourcePrepared() et de onPrepared() en onTracksSelected() dans PreloadMediaSource.PreloadControl. Renommez également les IntDefs dans DefaultPreloadManager.Stage en 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 renderers puissent progresser. Vous pouvez l'activer à l'aide de experimentalSetDynamicSchedulingEnabled() lors de la configuration de votre instance ExoPlayer.
    • Ajout de Renderer.getDurationToProgressUs(). Un Renderer peut implémenter cette méthode pour renvoyer à ExoPlayer la durée pendant laquelle la lecture doit avancer pour que le rendu progresse. Si ExoPlayer est défini sur experimentalSetDynamicSchedulingEnabled(), ExoPlayer appellera cette méthode lors du calcul du temps nécessaire pour planifier sa tâche de travail.
    • Ajoutez MediaCodecAdapter#OnBufferAvailableListener pour envoyer une alerte lorsque les tampons d'entrée et de sortie sont disponibles pour être utilisés par MediaCodecRenderer. MediaCodecRenderer signalera ExoPlayer lors de la réception de ces rappels et, si ExoPlayer est défini avec experimentalSetDynamicSchedulingEnabled(), ExoPlayer planifiera sa boucle de travail à mesure que les renderers progresseront.
    • Utilisez la classe de données pour les méthodes LoadControl au lieu de paramètres individuels.
    • Ajoutez ExoPlayer.isReleased() pour vérifier si Exoplayer.release() a été appelé.
    • Ajoutez ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() pour configurer la position maximale pour laquelle seekToPrevious() 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 IndexOutOfBoundsException causé par des extracteurs signalant des pistes supplémentaires après l'étape de préparation initiale (#1476).
    • Effects dans ExoPlayer.setVideoEffect() recevra les codes temporels avec le décalage du moteur de rendu supprimé (#1098).
    • Correction d'une potentielle IllegalArgumentException lors de la gestion d'une erreur du lecteur survenue lors de la lecture anticipée d'un autre élément de playlist (#1483).
  • Transformateur :
    • Ajoutez audioConversionProcess et videoConversionProcess à ExportResult pour 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 basculer entre les supports d'entrée SDR et HDR dans une séquence.
    • Ajout de la prise en charge des effets audio au niveau de la composition.
    • Ajout de la prise en charge du transcodage des images Ultra HDR en vidéos HDR.
    • Correction d'un problème qui empêchait DefaultAudioMixer d'afficher la quantité d'octets correcte après avoir été réinitialisé et réutilisé.
    • Contournement d'un bug du décodeur qui limitait le nombre de canaux audio à la stéréo lors du traitement de l'entrée PCM.
    • Lorsque vous sélectionnez des pistes dans ExoPlayerAssetLoader, ignorez les contraintes liées au nombre de canaux audio, car elles ne s'appliquent qu'à la lecture.
    • Remplacez l'interface androidx.media3.transformer.Muxer par androidx.media3.muxer.Muxer et supprimez androidx.media3.transformer.Muxer.
    • Corrige le chargement des images HEIC à partir des schémas d'URI de contenu. (#1373).
    • Ajustez la durée de la piste audio dans AudioGraphInput pour 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ôt DefaultDecoderFactory.listener. En cas d'exception de codec, les détails du codec seront disponibles dans ExportException.codecInfo.
  • 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 HTTP Content-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 d'images et d'autres données dans une image 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 de l'image après l'image Info, qui peut être artificiellement petit, par exemple l'image PCUT (#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 DefaultAudioSink avant d'appeler AudioTrack.stop() afin que AudioTrack.StreamEventCallback#onPresentationEnded identifie correctement le moment où toutes les données en attente ont été lues.
    • Correction d'un bug dans SilenceSkippingAudioProcessor où 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.
  • 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) et TextRenderer.experimentalSetLegacyDecodingEnabled(true). Consultez la documentation sur la personnalisation pour savoir comment intégrer ces composants dans une instance ExoPlayer. 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 SubtitleDecoder personnalisées doivent les mettre à jour pour implémenter SubtitleParser à la place (et SubtitleParser.Factory à la place de SubtitleDecoderFactory).
    • PGS : correction du décodage de longueur d'exécution pour résoudre 0 en 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 que rowLock et columnLock doivent être considérés comme étant définis sur "true", quelles que soient les valeurs présentes dans le flux (la prise en charge de columnLock n'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 version 1.3.0-rc01. Ce problème est maintenant résolu. La modification est donc de nouveau visible.
    • CEA-708 : évitez l'ajout de nouvelles lignes en double par la gestion naïve de la commande "set pen location" (définir l'emplacement du stylo) par ExoPlayer (#1315�).
    • Correction d'un IllegalArgumentException à partir de LegacySubtitleUtil lorsqu'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 ID3 TSO2, TSOA et TSOP (#1302).
    • Correction de la lecture des tags numériques gnre (genre) et tmpo (tempo) MP4 (/iTunes) lorsque la valeur comporte plus d'un octet.
    • Propager le frame ID3 TCON à MediaMetadata.genre (#1305).
  • 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 null comme paramètre pour ExoPlayer.setImageOutput() afin d'effacer un ImageOutput précédemment défini.
  • DataSource :
    • Implémentez la compatibilité avec les URI de ressources brutes android.resource://package/idpackage est 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 url n'est pas nul dans les constructeurs DataSpec. Ce paramètre a déjà été annoté comme non nul.
    • Autorisez ByteArrayDataSource à résoudre un URI en tableau d'octets pendant open(), au lieu d'être codé en dur lors de la construction (#1405).
  • DRM :
    • Autorisation de définir un LoadErrorHandlingPolicy sur DefaultDrmSessionManagerProvider (#1271).
  • Effet :
    • Prise en charge de plusieurs changements de vitesse dans le même EditedMediaItem ou Composition dans SpeedChangeEffect.
    • Prise en charge de la sortie HLG et PQ à partir d'une entrée bitmap Ultra HDR.
    • Ajout de la prise en charge de EGL_GL_COLORSPACE_BT2020_HLG_EXT, 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 utilisez OverlaySettings.Builder.setOverlayFrameAnchor(), inversez les valeurs x et y en les multipliant par -1.
    • Correction d'un bug qui provoquait le plantage de TimestampWrapper lorsqu'il était utilisé avec ExoPlayer#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.
    • Autorisation de définir l'ordre Z indéterminé des 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 SeparableConvolution avant l'API 26.
    • Supprimez les OverlaySettings.useHdr inutilisé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 avec OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • 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 NullPointerException lors de l'utilisation d'URI de tags d'emplacement publicitaire data:// (#700).
  • Session :
    • Définissez la valeur par défaut de CommandButton.enabled sur true et 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 CommandButton qui 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é dans onTaskRemoved() (#1219).
    • Ajoutez MediaSessionService.pauseAllPlayersAndStopSelf() qui permet de mettre en pause la lecture de toutes les sessions et d'appeler stopSelf() pour mettre fin au cycle de vie de MediaSessionService.
    • 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 sur MediaDescriptionCompat pour 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.
    • Ajoutez MediaSession.sendError() qui permet d'envoyer des erreurs non fatales au contrôleur Media3. Lorsque vous utilisez le contrôleur de notification (voir MediaSession.getMediaNotificationControllerInfo()), l'erreur personnalisée est utilisée pour mettre à jour le PlaybackState de la session de plate-forme vers un état d'erreur avec les informations d'erreur fournies (#543).
    • Ajoutez MediaSession.Callback.onPlayerInteractionFinished() pour informer les sessions lorsqu'une série d'interactions du joueur à partir d'un contrôleur spécifique est terminée.
    • Ajoutez SessionError et utilisez-le dans SessionResult et LibraryResult au 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 PlaybackException est mappé à un état d'erreur fatale du PlaybackStateCompat. Un SessionError envoyé au contrôleur de notification multimédia avec MediaSession.sendError(ControllerInfo, SessionError) est mappé sur une erreur non fatale dans PlaybackStateCompat, 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 de STATE_ERROR.
    • Autorisez la définition de l'activité de session par contrôleur pour remplacer l'activité de session globale. L'activité de session peut être définie pour un contrôleur au moment de la connexion en créant un ConnectionResult avec AcceptedResultBuilder.setSessionActivivty(PendingIntent). Une fois la connexion établie, l'activité de la session peut être mise à jour avec MediaSession.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 de MediaLibrarySession.Builder.setLibraryErrorReplicationMode() pour choisir le type d'erreur ou désactiver la réplication des erreurs, qui est activée par défaut.
  • Interface utilisateur :
    • Ajout de la prise en charge de l'affichage d'images à PlayerView lorsqu'il est connecté à un ExoPlayer (#1144).
    • Ajout de la personnalisation de diverses icônes dans PlayerControlView via des attributs XML pour autoriser différents drawables par instance PlayerView, 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 SurfaceView dans un AndroidView Compose sur l'API 34 (#1237).
  • Téléchargements :
    • S'assurer que DownloadHelper ne divulgue pas d'instances Renderer non publiées, ce qui peut entraîner le plantage d'une application avec IllegalStateException: Too many receivers, total of 1000, registered for pid (#1224).
  • Extension Cronet :
    • Correction de SocketTimeoutException dans CronetDataSource. 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).
  • Extension HLS :
    • Correction d'un bug qui entraînait la délégation d'exemples EMSG en attente d'une discontinuité dans HlsSampleStreamWrapper avec un décalage incorrect, ce qui provoquait une erreur IndexOutOfBoundsException ou IllegalArgumentException (#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 Error et IllegalArgumentException lorsque 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 ArrayIndexOutOfBoundsException lors de l'activation de CMCD pour les diffusions en direct HLS (#1395).
  • Extension DASH :
    • Correction d'un bug où la préparation d'un flux en direct multipériode peut générer une IndexOutOfBoundsException (#1329).
    • Ajout de la prise en charge des URL de licence dashif:Laurl (#1345).
  • Extension Cast :
    • Correction d'un bug qui convertissait le titre de l'album du MediaQueueItem en artiste dans l'élément multimédia Media3 (#1255).
  • Utilitaires de test :
    • Implémentez onInit() et onRelease() dans FakeRenderer.
    • Modifiez les méthodes TestPlayerRunHelper.runUntil()/playUntil() pour qu'elles échouent en cas d'erreurs non fatales (par exemple, celles signalées à AnalyticsListener.onVideoCodecError()). Utilisez la nouvelle chaîne de méthode TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() pour désactiver ce comportement.
  • Application de démonstration :
    • Utilisez DefaultPreloadManager dans 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 HttpEngineDataSource comme HttpDataSource lorsque l'appareil le prend en charge.
  • Suppression des symboles obsolètes :
    • Suppression de CronetDataSourceFactory. Utilisez plutôt CronetDataSource.Factory.
    • Suppression de certains constructeurs DataSpec. Utilisez DataSpec.Builder à la place.
    • Suppression de la méthode setContentTypePredicate(Predicate) de DefaultHttpDataSource, OkHttpDataSource et CronetDataSource. Utilisez plutôt la méthode équivalente sur chaque XXXDataSource.Factory.
    • Suppression des constructeurs OkHttpDataSource et OkHttpDataSourceFactory. Utilisez OkHttpDataSource.Factory à la place.
    • Supprimez PlayerMessage.setHandler(Handler). Utilisez plutôt setLooper(Looper).
    • Supprimez le champ Timeline.Window.isLive. Utilisez plutôt la méthode isLive().
    • Suppression des constructeurs DefaultHttpDataSource. Utilisez DefaultHttpDataSource.Factory à la place.
    • Suppression de DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Utilisez DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS à la place.
    • Supprimez MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Utilisez MediaCodecInfo.canReuseCodec(Format, Format) à la place.
    • Suppression des méthodes DrmSessionManager.DUMMY et getDummyDrmSessionManager(). Utilisez DrmSessionManager.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 un DecoderReuseEvaluation.
    • Suppression d'IntDef RendererSupport.FormatSupport et des constantes FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE et FORMAT_UNSUPPORTED_TYPE. Utilisez plutôt l'IntDef et les constantes équivalents dans androidx.media3.common.C (par exemple, C.FORMAT_HANDLED).
    • Supprimez l'interface Bundleable. Cela inclut la suppression de tous les champs constants Bundleable.Creator<Foo> CREATOR. Les appelants doivent plutôt utiliser les méthodes Bundle toBundle() et static Foo fromBundle(Bundle) sur chaque type.

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.labels pour autoriser les libellés localisés ou alternatifs.
  • ExoPlayer :
    • Correction d'un problème qui empêchait PreloadMediaPeriod de conserver les flux lorsqu'il était préchargé à nouveau.
    • Appliquez le TrackSelectionResult correspondant à 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 -keepclasseswithmembers pour DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformateur :
    • Ajout d'une solution de contournement pour l'exception générée, car MediaMuxer ne prend pas en charge les codes temporels de présentation négatifs avant l'API 30.
  • 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 frames de métadonnées tels que XING et VBRI.
    • 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'attente 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 CuesWithTiming supplémentaires factices à partir de WebvttParser.parse (#1177).
  • DRM :
    • Solution de contournement pour un NoSuchMethodError qui peut être généré par le framework MediaDrm au lieu de ResourceBusyException ou NotProvisionedException sur certains appareils Android 14 (#1145).
  • Effet :
    • Amélioration du mappage de tonalités 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 MediaMetadata avec uniquement extras non nul entre les contrôleurs et les sessions multimédias (#1176).
  • Interface utilisateur :
    • Inclut le nom de la langue de la piste audio si Locale ne peut pas identifier de nom à afficher (#988).
  • Extension DASH :
    • Remplissez tous les éléments Label du fichier manifeste dans Format.labels (#1054).
  • 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/]namepackage est 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 média pour qu'ils soient entièrement en minuscules.
    • Définissez les annonces avec un MediaItem complet au lieu d'un seul Uri dans AdPlaybackState.
    • Augmentez minSdk à 19 (Android KitKat). 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 artworkUri et artworkData dans MediaMetadata.Builder.populate(MediaMetadata) lorsqu'au moins l'un d'eux n'est pas nul (#964).
  • ExoPlayer :
    • Ajout de PreloadMediaSource et PreloadMediaPeriod qui permettent aux applications de précharger une source multimédia de contenu à une position de départ spécifique avant la lecture. PreloadMediaSource se charge de préparer la source de contenu multimédia pour recevoir le Timeline, 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émentant PreloadMediaSource.PreloadControl et définissent la source préchargée sur le lecteur pour la lecture.
    • Ajout de ExoPlayer.setImageOutput pour permettre aux applications de définir ImageRenderer.ImageOutput.
    • DefaultRenderersFactory fournit désormais un ImageRenderer au lecteur par défaut avec ImageOutput et ImageDecoder.Factory.DEFAULT définis sur null.
    • Émission de l'événement Player.Listener.onPositionDiscontinuity lorsque 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().
    • Prend en charge les sources multimédias adaptatives avec PreloadMediaSource.
    • Implémentez HttpEngineDataSource, un HttpDataSource à l'aide de l'API HttpEngine.
    • Empêchez la création de sous-classes CompositeSequenceableLoader. Ce composant a été précédemment 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écorateur et en implémentant un CompositeSequenceableLoaderFactory personnalisé.
    • 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 experimentalSetSubtitleParserFactory sur BundledChunkExtractor.Factory et DefaultHlsExtractorFactory en setSubtitleParserFactory et interdisez la transmission de null. Utilisez les nouvelles méthodes experimentalParseSubtitlesDuringExtraction(boolean) pour contrôler le comportement d'analyse.
    • Ajout de la prise en charge de la personnalisation de la SubtitleParser.Factory utilisée lors de l'extraction. Pour ce faire, utilisez MediaSource.Factory.setSubtitleParserFactory().
    • Ajoutez un préfixe de source à tous les champs Format.id générés à partir de MergingMediaSource. Cela permet d'identifier la source qui a produit un Format (#883).
    • Correction de l'expression régulière utilisée pour valider les noms de clés CMCD (Common Media Client Data) personnalisés en la modifiant pour qu'elle ne recherche que les tirets (#1028).
    • Arrêt du double encodage des paramètres de requête CMCD (#1075).
  • 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 suppression 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 (#829) n'est pas disponible.
    • Ajout de la prise en charge de l'optimisation des opérations de découpage MP4 pour 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 un écran noir sur les lecteurs basés sur iOS (#829).
  • Sélection de la piste :
    • Ajoutez DefaultTrackSelector.selectImageTrack pour activer la sélection de pistes d'images.
    • Ajoutez TrackSelectionParameters.isPrioritizeImageOverVideoEnabled pour déterminer s'il faut sélectionner une piste d'image si une piste d'image et une piste vidéo sont disponibles. La valeur par défaut est false, ce qui signifie que la sélection d'une piste vidéo est prioritaire.
  • Extracteurs :
    • Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs ColorInfo.colorSpace, ColorInfo.colorTransfer et ColorInfo.colorRange (#692).
    • MP3 : utilisez la recherche à débit constant (CBR) pour les fichiers avec un en-tête Info (l'équivalent CBR de l'en-tête Xing). Auparavant, nous utilisions la table de recherche de l'en-tête Info, 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).
  • Audio :
    • Amélioration de l'algorithme de suppression du silence avec une augmentation progressive du volume ; conservation du silence minimal et des durées de silence plus naturelles (#7423).
    • Signaler le silence ignoré de manière plus déterministe (#1035).
  • Vidéo :
    • Modifiez le constructeur MediaCodecVideoRenderer qui accepte un argument VideoFrameProcessor.Factory et remplacez-le par un constructeur qui accepte un argument VideoSinkProvider. Les applications qui souhaitent injecter un VideoFrameProcessor.Factory personnalisé peuvent instancier un CompositingVideoSinkProvider qui utilise le VideoFrameProcessor.Factory personnalisé et transmettre le fournisseur de récepteur vidéo à MediaCodecVideoRenderer.
  • Texte :
    • Correction de la sérialisation des repères bitmap pour résoudre l'erreur Tried to marshall a Parcel that contained Binder objects lors de l'utilisation de DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708 : ignorer la valeur rowLock. La spécification CEA-708-E S-2023 indique que rowLock et columnLock doivent être considérés comme étant définis sur "true", quelles que soient les valeurs présentes dans le flux (la prise en charge de columnLock n'est pas implémentée, donc elle est effectivement considérée comme étant toujours définie sur "false").
  • Image :
    • Ajout de la prise en charge des miniatures DASH. Les images de la grille sont recadrées et des miniatures individuelles sont fournies à ImageOutput près de leurs heures de présentation.
  • DRM :
  • 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.RequestMetadata avec des extras non nuls entre les contrôleurs et les sessions multimédias.
    • Ajoutez un constructeur à MediaLibrarySession.Builder qui ne prend qu'un Context au lieu d'un MediaLibraryService.
  • 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).
  • 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.
  • Application de démonstration :
    • Ajoutez un module de démonstration de format court pour illustrer l'utilisation de PreloadMediaSource avec le cas d'utilisation de contenu de format court.

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/maxOffset continuaient d'ajuster le décalage sur min/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.Factory recevaient des valeurs négatives pour bufferedDurationUs à partir de sources de blocs, ce qui entraînait une erreur IllegalArgumentException (#888).
  • 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_ALTERNATE pour é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).
  • Audio :
    • Correction de la gestion de la fin du flux pour SilenceSkippingAudioProcessor lorsqu'il est appelé plusieurs fois (#712).
  • 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ù MediaMetadata n'était renseigné qu'à partir des commentaires Vorbis avec des clés en majuscules (#876).
    • OutOfMemoryError est 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.
  • DRM :
    • Étendez la solution de contournement pour l'URL de licence https://default.url ClearKey erronée à l'API 33 et versions ultérieures (auparavant, la solution de contournement ne s'appliquait qu'à l'API 33) (#837).
    • Correction de ERROR_DRM_SESSION_NOT_OPENED lors 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é.
  • Session :
    • Placez les clés et valeurs personnalisées dans MediaMetadataCompat à MediaMetadata.extras et MediaMetadata.extras à MediaMetadataCompat (#756, #802).
    • Correction de la diffusion notifyChildrenChanged pour 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 setWhen désactivé de la notification (#903).
    • Correction de IllegalStateException lorsque 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).
  • Interface utilisateur :
    • Correction d'un problème qui empêchait l'affichage des boutons d'avance et de retour rapides lorsqu'ils étaient utilisés avec Material Design dans un BottomSheetDialogFragment (#511).
    • Correction d'un problème d'alignement des chiffres dans le bouton d'avance rapide de PlayerControlView (#547).
  • 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.) :
    • MIDI : correction du problème où la recherche avant ignorait les événements de changement de programme (#704).
    • Migre vers FFmpeg 6.0 et mets à jour le NDK compatible vers r26b (#707, #867).
  • Extension Cast :
    • Assainissement de la création d'un Timeline pour éviter le plantage de l'application en cas d'échec du chargement du contenu multimédia sur l'appareil Cast (#708).

Version 1.2.0

15 novembre 2023

  • Bibliothèque commune :
    • Ajoutez un paramètre @Nullable Throwable aux méthodes de l'interface Log.Logger. Le paramètre message de ces méthodes ne contient plus d'informations sur le Throwable transmis aux méthodes Log.{d,i,w,e}(). Les implémentations devront donc ajouter manuellement ces informations si elles le souhaitent (éventuellement à l'aide de Logger.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 TrackSelectorResult et SimpleDecoder (#6792).
    • Modifiez le comportement par défaut de l'UI et des notifications dans Util.shouldShowPlayButton pour 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 utilisant PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) ou MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Mettez à niveau androidx.annotation:annotation-experimental vers 1.3.1 pour corriger https://issuetracker.google.com/251172715.
    • Déplacez ExoPlayer.setAudioAttributes vers l'interface Player.
  • ExoPlayer :
    • Correction des problèmes de recherche dans les flux AC4 causés par 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 sur Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT si 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 disparaîtra lorsqu'une sortie appropriée sera connectée.
    • Ajoutez MediaSource.canUpdateMediaItem et MediaSource.updateMediaItem pour accepter les mises à jour MediaItem après la création via Player.replaceMediaItem(s).
    • Autoriser les mises à jour MediaItem pour toutes les classes MediaSource fournies par la bibliothèque via Player.replaceMediaItem(s) (#33, #9978).
    • MimeTypes.TEXT_EXOPLAYER_CUES a été renommé MimeTypes.APPLICATION_MEDIA3_CUES.
    • Ajoutez PngExtractor qui envoie et lit un fichier PNG entier dans TrackOutput en tant qu'échantillon.
    • Améliorez la méthode SequenceableLoader.continueLoading(long) dans l'interface SequenceableLoader pour SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contient des paramètres supplémentaires, y compris playbackSpeed et lastRebufferRealtimeMs en plus de playbackPositionUs existant.
    • Améliorez la méthode ChunkSource.getNextChunk(long, long, List, ChunkHolder) dans l'interface ChunkSource pour ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Ajout de champs supplémentaires à la journalisation des données CMCD (Common Media Client Data) : bs (manque de mémoire tampon), dl (délai), pr (vitesse de lecture) et su (démarrage) (#8699).
    • Ajout de la profondeur de bits de luma et de chroma à ColorInfo (#491).
    • Ajout de champs supplémentaires à la journalisation des données CMCD (Common Media Client Data) : requête d'objet suivant (nor) et requête de plage suivante (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 ConcurrentModificationException dans ExperimentalBandwidthMeter (#612).
    • Ajout du paramètre MediaPeriodId à CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Prise en charge de ClippingMediaSource (et d'autres sources avec des décalages de période/de fenêtre temporelle) dans ConcatenatingMediaSource2 (#11226).
    • Modifiez BaseRenderer.onStreamChanged() pour qu'il reçoive également un argument MediaPeriodId.
  • Transformateur :
    • Analyser les données de rotation EXIF pour les entrées d'image.
    • Suppression du type d'annotation TransformationRequest.HdrMode et de ses constantes associées. Utilisez plutôt Composition.HdrMode et ses constantes associées.
    • Simplifiez le OverlaySettings pour résoudre les problèmes de rotation.
    • Les paramètres frameRate et durationUs de SampleConsumer.queueInputBitmap ont été remplacés par TimestampIterator.
  • Sélection de la piste :
    • Ajoutez DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness pour autoriser ou interdire explicitement l'adaptation non fluide. La valeur par défaut reste à son comportement actuel de true.
  • Extracteurs :
    • MPEG-TS : assurez-vous que la dernière image est rendue 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 de projectionPosePitch par projectionPoseRoll (#461).
    • Supprimez l'hypothèse selon laquelle les instances Extractor peuvent être inspectées directement avec instanceof. Si vous souhaitez accéder à l'exécution des détails d'implémentation d'un Extractor, vous devez d'abord appeler Extractor.getUnderlyingInstance.
    • Ajout de BmpExtractor.
    • Ajout de WebpExtractor.
    • Ajout de HeifExtractor.
    • Ajout de la 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 lpcm dans MP4.
    • Ajout de la prise en charge de l'extraction audio Vorbis au format MP4.
    • Ajout de 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 un DefaultAudioOffloadSupportProvider. Il renvoie le nouveau AudioOffloadSupport contenant isFormatSupported, isGaplessSupported et isSpeedChangeSupported.
    • Ajoutez AudioSink.setOffloadMode() pour configurer la configuration de déchargement sur le récepteur audio. La valeur par défaut est AudioSink.OFFLOAD_MODE_DISABLED.
    • Le déchargement peut être activé via setAudioOffloadPreference dans TrackSelectionParameters. Si la préférence définie 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 audioOffloadModePreference est défini sur AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector ne 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 enableOffload de la signature de la méthode DefaultRenderersFactory.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 interruption 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 en mode audio uniquement.
    • Supprimez ExoPlayer.experimentalSetOffloadSchedulingEnabled et AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • Remplacement du nom de onExperimentalSleepingForOffloadChanged par onSleepingForOffloadChanged et de onExperimentalOffloadedPlayback par onOffloadedPlayback.
    • Déplacez les interfaces et définitions TrackSelectionParameters liées au mode de déchargement audio vers une classe AudioOffloadPreferences interne.
    • Ajoutez des rappels onAudioTrackInitialized et onAudioTrackReleased à AnalyticsListener, AudioRendererEventListener et AudioSink.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).
  • Vidéo :
    • Autoriser MediaCodecVideoRenderer à utiliser un VideoFrameProcessor.Factory personnalisé.
    • 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).
  • Texte :
    • Supprimez ExoplayerCuesDecoder. Les pistes de texte avec sampleMimeType = application/x-media3-cues sont désormais gérées directement par TextRenderer sans nécessiter d'instance SubtitleDecoder.
  • Métadonnées :
    • MetadataDecoder.decode ne 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émenter VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Les paramètres frameRate et durationUs de VideoFrameProcessor.queueInputBitmap ont été remplacés par TimestampIterator.
  • 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_IMMEDIATE dans DefaultMediaNotificationProvider (#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é à un MediaSessionCompat ancien.
    • 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é et notifyChildrenChanged() 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_TIMELINE n'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 bouton queue de l'UI d'Android Auto n'est pas affiché (#339).
    • Utiliser DataSourceBitmapLoader par défaut au lieu de SimpleBitmapLoader (#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.
  • Interface utilisateur :
    • Ajoutez une implémentation Player.Listener pour les appareils Wear OS qui gère la suppression de la lecture en raison de Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT en lançant une boîte de dialogue système pour permettre à un utilisateur de connecter une sortie audio appropriée (par exemple, un casque Bluetooth). L'écouteur reprendra automatiquement la lecture si un appareil approprié est connecté dans un délai d'inactivité configurable (5 minutes par défaut).
  • Téléchargements :
    • Déclarez le type de service de premier plan "synchronisation des données" pour DownloadService afin d'assurer la compatibilité avec Android 14. Lors de l'utilisation de ce service, l'application doit également ajouter dataSync en tant que foregroundServiceType dans le fichier manifeste et ajouter l'autorisation FOREGROUND_SERVICE_DATA_SYNC (#11239).
  • Extension HLS :
    • 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 une IndexOutOfBoundsException lors 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 de la connexion (#662).
  • 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.shouldBeSkipped pour marquer directement les tampons de sortie qui n'ont pas besoin d'être présentés. Cette méthode est préférable à C.BUFFER_FLAG_DECODE_ONLY, qui sera bientôt obsolète.
    • Ajoutez Decoder.setOutputStartTimeUs et SimpleDecoder.isAtLeastOutputStartTimeUs pour 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 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 ArithmeticException dans le code Leanback (#617).
  • Utilitaires de test :
    • Rendez TestExoPlayerBuilder et FakeClock compatibles 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 d'interactions avec des vues Espresso ou Compose.
  • Suppression des symboles obsolètes :
    • Suppression de TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) et TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Utilisez Composition.Builder.setHdrMode(int) et transmettez Composition à Transformer.start(Composition, String) à la place.
    • Supprimez la méthode DownloadNotificationHelper.buildProgressNotification obsolète et utilisez une méthode non obsolète qui accepte un paramètre notMetRequirements à la place.

Version 1.2.0-rc01

1er novembre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-beta01

19 octobre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-alpha02

29 septembre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-alpha01

17 août 2023

Utilisez la version stable 1.2.0.

Version 1.1.0

Version 1.1.1

16 août 2023

  • Bibliothèque commune :
    • Supprimez la dépendance multidex ajoutée par erreur de tous les modules (#499).
  • ExoPlayer :
    • Correction d'un problème dans PlaybackStatsListener où des PlaybackStats superflus é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).
  • Audio :
    • Correction d'un bug qui empêchait Player.getState() de passer à STATE_ENDED lors de la lecture de fichiers très courts (#538).
  • Déchargement audio :
    • Ajoutez des pages d'en-tête d'ID Ogg et d'en-tête de commentaire au flux binaire pour la lecture Opus déchargée, conformément à la RFC 7845.
  • Vidéo :
    • H.265/HEVC : correction de l'analyse des informations sur les images de référence à court et long terme 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.onCustomLayoutChanged est appelé. Les applications qui souhaitent envoyer différentes mises en page personnalisées à différents contrôleurs Media3 peuvent le faire dans MediaSession.Callback.onConnect en utilisant un AcceptedResultBuilder pour s'assurer que la mise en page personnalisée est disponible pour le contrôleur une fois la connexion établie.
    • Correction de cas où MediaLibraryServiceLegacyStub envoyait une erreur à un Result qui ne le prenait pas en charge, ce qui produisait un UnsupportedOperationException (#78).
    • Corrigez la façon dont PlayerWrapper crée un VolumeProviderCompat en déterminant volumeControlType à l'aide des anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUME et COMMAND_SET_DEVICE_VOLUME) et des nouvelles commandes (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS et COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (#554).

Version 1.1.0

5 juillet 2023

  • Bibliothèque commune :
    • Ajouter un motif de suppression pour un itinéraire audio non adapté et lire quand prêt modifier le motif de suppression pour "trop long". (#15).
    • Ajouter des commandes au lecteur :
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_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 Builder pour DeviceInfo et marquez le constructeur existant comme obsolète.
    • Ajoutez DeviceInfo.routingControllerId pour 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 :
    • Autorisez ExoPlayer à contrôler les méthodes de volume de l'appareil uniquement si l'utilisateur a explicitement activé cette option. Utilisez ExoPlayer.Builder.setDeviceVolumeControlEnabled pour accéder aux éléments suivants :
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) et setDeviceVolume(int, int)
      • increaseDeviceVolume(int) et increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) et decreaseDeviceVolume(int, int)
    • Ajout de FilteringMediaSource qui permet de filtrer les types de pistes disponibles à partir d'un MediaSource.
    • 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, rtp et sid, ont été intégrés (#8699). Structure et méthodes d'API :
      • La journalisation CMCD est désactivée par défaut. Utilisez MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) pour l'activer.
      • Toutes les clés sont activées par défaut. Remplacez CmcdConfiguration.RequestConfig.isKeyAllowed(String key) pour filtrer les clés qui sont enregistrées.
      • Remplacez CmcdConfiguration.RequestConfig.getCustomData() pour activer la journalisation des clés personnalisées.
    • 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.json personnalisé (#439).
    • Ajoutez ExoPlayer.setVideoEffects() pour utiliser Effect pendant la lecture de la vidéo.
    • Modifiez SampleQueue pour stocker sourceId en tant que long plutôt qu'en tant que int. Cela modifie les signatures des méthodes publiques SampleQueue.sourceId et SampleQueue.peekSourceId.
    • Ajoutez des paramètres aux méthodes LoadControl shouldStartPlayback et onTracksSelected qui permettent d'associer ces méthodes aux MediaPeriod concerné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) et BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). La variante des méthodes sans mediaTimeOffsetUs peut être appelée à la place. Notez que, même pour les variantes obsolètes, le décalage n'est plus ajouté à startTimeUs et endTimeUs des objets MediaLoadData distribués par le répartiteur.
    • ExoTrackSelection.blacklist a été renommé excludeTrack et isBlacklisted a été renommé isTrackExcluded.
    • Correction du comportement incohérent entre ExoPlayer.setMediaItem(s) et addMediaItem(s) lorsqu'ils sont appelés sur une playlist vide.
  • Transformateur :
    • Supprimez Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilisez ExoPlayerAssetLoader.Factory(MediaSource.Factory) et Transformer.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 MediaCodecList au lieu d'utiliser les utilitaires findDecoder/EncoderForFormat pour étendre la compatibilité.
    • Supprimez la configuration du B-frame dans DefaultEncoderFactory, car elle ne fonctionne pas sur certains appareils.
  • Sélection de la piste :
    • Ajout de DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, qui est désactivé par défaut. Lorsqu'il est activé, DefaultTrackSelector déclenche une nouvelle sélection de piste lorsque les capacités du moteur de rendu ont changé.
  • Extracteurs :
    • Ogg : correction d'un bug lors de la recherche dans des fichiers de longue durée (#391).
    • FMP4 : correction d'un problème où TimestampAdjuster initialise un décalage d'horodatage incorrect avec l'heure de l'exemple de métadonnées de l'atome emsg (#356).
  • 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() et AudioSink.release() pour libérer les ressources à la fin du cycle de vie du lecteur.
    • Écoutez les changements de fonctionnalités audio dans DefaultAudioSink. Ajoutez un paramètre obligatoire context dans le constructeur de DefaultAudioSink, avec lequel DefaultAudioSink s'enregistrera en tant qu'écouteur de AudioCapabilitiesReceiver et mettra à jour sa propriété audioCapabilities lorsqu'il sera informé d'un changement de capacités.
    • Propagez les modifications des fonctionnalités audio via un nouvel événement onAudioCapabilitiesChanged dans l'interface AudioSink.Listener et une nouvelle interface RendererCapabilities.Listener qui déclenche les événements onRendererCapabilitiesChanged.
    • Ajout de ChannelMixingAudioProcessor pour appliquer la mise à l'échelle/le mixage aux canaux audio.
    • Ajoutez la nouvelle valeur int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE à DecoderDiscardReasons pour supprimer le décodeur audio lorsque le mode Bypass est possible après la modification des capacités audio.
    • Ajout de la prise en charge de la lecture directe pour DTS Express et DTS:X (#335).
  • Vidéo :
    • Faites en sorte que MediaCodecVideoRenderer signale un VideoSize avec une largeur et une hauteur de 0 lorsque le moteur de rendu est désactivé. Player.Listener.onVideoSizeChanged est appelé en conséquence lorsque Player.getVideoSize() change. Avec ce changement, la taille de la vidéo ExoPlayer avec MediaCodecVideoRenderer a une largeur et une hauteur de 0 lorsque Player.getCurrentTracks ne prend pas en charge la vidéo ou que la taille de la piste vidéo compatible n'est pas encore déterminée.
  • DRM :
    • Réduction de la visibilité de plusieurs méthodes internes uniquement sur DefaultDrmSession qui 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)
  • Muxer:
    • Ajout d'une nouvelle bibliothèque de multiplexeurs pouvant ê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.getControllerForCurrentRequest pour obtenir des informations sur le contrôleur qui appelle actuellement une méthode Player.
    • Ajout de androidx.media3.session.MediaButtonReceiver pour permettre aux applications d'implémenter la reprise de la lecture avec 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.onAddMediaItems pour permettre aux MediaItems demandés d'être transmis à Player s'ils ont LocalConfiguration (par exemple, un URI) (#282).
    • Ajoutez les boutons de commande "seek to previous" (rechercher le précédent) et "seek to next" (rechercher le suivant) 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.onAddMediaItems pour permettre aux MediaItems demandés d'être transmis à Player s'ils ont LocalConfiguration (par exemple, un URI) (#282).
    • Ajoutez les boutons de commande "seek to previous" (rechercher le précédent) et "seek to next" (rechercher le suivant) sur la vue de notification multimédia compacte par défaut pour Android 12 et les versions antérieures (#410).
  • Interface utilisateur :
    • Ajoutez les méthodes Util shouldShowPlayButton et handlePlayPauseButtonAction pour écrire des éléments d'UI personnalisés avec un bouton de lecture/pause.
  • Extension RTSP :
    • Pour MPEG4-LATM, utilisez la valeur par défaut de profile-level-id si elle est absente du message SDP de la réponse Describe (#302).
    • Utilisez l'URI de base pour la résolution du chemin relatif à partir de la session RTSP s'il est présent dans l'en-tête de réponse DESCRIBE (#11160).
  • Extension DASH :
    • Supprimez le décalage temporel du contenu multimédia de MediaLoadData.startTimeMs et MediaLoadData.endTimeMs pour 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).
  • Extension HLS :
    • Ajoutez HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) pour définir un délai avant expiration pour que le thread de chargement attende l'initialisation de TimestampAdjuster. Si l'initialisation ne se termine pas avant le délai d'expiration, une erreur PlaybackException est 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).
  • Utilitaires de test :
    • Vérifiez si le schéma d'URI n'est pas sensible à la casse dans DataSourceContractTest.
  • Suppression des symboles obsolètes :
    • Suppression des constructeurs DefaultAudioSink. Utilisez plutôt DefaultAudioSink.Builder.
    • Supprimez HlsMasterPlaylist et utilisez HlsMultivariantPlaylist à la place.
    • Supprimez Player.stop(boolean). Utilisez plutôt Player.stop() et Player.clearMediaItems() (si reset est true).
    • Supprimez deux constructeurs SimpleCache obsolètes et utilisez un constructeur non obsolète qui prend un DatabaseProvider à la place pour de meilleures performances.
    • Suppression du constructeur DefaultBandwidthMeter. Utilisez plutôt DefaultBandwidthMeter.Builder.
    • Suppression des constructeurs DefaultDrmSessionManager. Utilisez plutôt DefaultDrmSessionManager.Builder.
    • Supprimez deux constructeurs HttpDataSource.InvalidResponseCodeException obsolètes et utilisez un constructeur non obsolète qui accepte des champs supplémentaires(cause, responseBody) pour améliorer la journalisation des erreurs.
    • Supprimez DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash et DownloadHelper.forSmoothStreaming, et utilisez DownloadHelper.forMediaItem à la place.
    • Supprimez le constructeur DownloadService obsolète et utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètre channelDescriptionResourceId.
    • Supprimez les constantes de chaîne obsolètes pour les ensembles de caractères (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME et UTF16LE_NAME). Utilisez plutôt les ensembles de caractères Kotlin du package kotlin.text, java.nio.charset.StandardCharsets ou com.google.common.base.Charsets.
    • Supprimez le constructeur WorkManagerScheduler obsolète et utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètre Context à la place.
    • Supprimez les méthodes obsolètes createVideoSampleFormat, createAudioSampleFormat, createContainerFormat et createSampleFormat, qui étaient utilisées pour instancier la classe Format. Utilisez plutôt Format.Builder pour créer des instances de Format.
    • Supprimez les méthodes obsolètes copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate et copyWithVideoSize, et utilisez plutôt Format.buildUpon() et les méthodes de définition.
    • Supprimez ExoPlayer.retry(), qui est obsolète, et utilisez prepare() à la place.
    • Supprimez le constructeur DefaultTrackSelector obsolète sans argument et utilisez plutôt DefaultTrackSelector(Context).
    • Supprimez le constructeur OfflineLicenseHelper obsolète et utilisez OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) à la place.
    • Supprimez le constructeur DownloadManager obsolète et utilisez plutôt celui qui accepte un Executor.
    • Suppression des constructeurs Cue obsolètes. Utilisez plutôt Cue.Builder.
    • Supprimez le constructeur OfflineLicenseHelper obsolète et utilisez OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher) à la place.
    • Suppression de quatre méthodes AnalyticsListener obsolètes :
      • onDecoderEnabled, utilisez plutôt onAudioEnabled et/ou onVideoEnabled.
      • onDecoderInitialized, utilisez plutôt onAudioDecoderInitialized et/ou onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, utilisez plutôt onAudioInputFormatChanged et/ou onVideoInputFormatChanged.
      • onDecoderDisabled, utilisez plutôt onAudioDisabled et/ou onVideoDisabled.
    • Supprimez les Player.Listener.onSeekProcessed et AnalyticsListener.onSeekProcessed obsolètes, et utilisez onPositionDiscontinuity avec DISCONTINUITY_REASON_SEEK à la place.
    • Supprimez ExoPlayer.setHandleWakeLock(boolean) et utilisez setWakeMode(int) à la place.
    • Supprimez DefaultLoadControl.Builder.createDefaultLoadControl() obsolète et utilisez build() à la place.
    • Supprimez MediaItem.PlaybackProperties, qui est obsolète, et utilisez MediaItem.LocalConfiguration à la place. Le champ obsolète MediaItem.playbackProperties est désormais de type MediaItem.LocalConfiguration.

Version 1.1.0-rc01

21 juin 2023

Utilisez la version stable 1.1.0.

Version 1.1.0-beta01

7 juin 2023

Utilisez la version stable 1.1.0.

Version 1.1.0-alpha01

10 mai 2023

Utilisez la version stable 1.1.0.

Version 1.0.0

Version 1.0.2

18 mai 2023

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

Cette version correspond à la version 2.18.7 d'ExoPlayer.

Cette version inclut les modifications suivantes depuis la version 1.0.1 :

  • Bibliothèque principale :
    • Ajoutez Buffer.isLastSample() pour indiquer si Buffer contient l'indicateur C.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).
  • 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ù MediaController ne met pas à jour ses commandes disponibles lorsqu'il est connecté à un ancien MediaSessionCompat qui met à jour ses actions.
    • Correction d'un bug qui empêchait MediaLibraryService de renvoyer la valeur "null" pour un appel de l'UI système à Callback.onGetLibraryRoot avec params.isRecent == true sur l'API 30 (#355).
    • Correction de la fuite de mémoire de MediaSessionService ou MediaLibraryService (#346).
    • Correction d'un bug où une mise à jour combinée de Timeline et de position dans un MediaSession peut entraîner la génération d'un IllegalStateException par un MediaController.

Version 1.0.1

18 avril 2023

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

Cette version correspond à la version 2.18.6 d'ExoPlayer.

  • Bibliothèque principale :
    • Réinitialisation du 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 MediaController lorsque plusieurs éléments de file d'attente identiques étaient publiés par un ancien MediaSessionCompat (#290).
    • Ajout du transfert manquant de MediaSession.broadcastCustomCommand à l'ancienne MediaControllerCompat.Callback.onSessionEvent (#293).
    • Correction d'un bug qui empêchait l'appel de MediaSession.setPlayer de mettre à jour les commandes disponibles.
    • Correction d'un problème qui entraînait l'ignorance des instances TrackSelectionOverride envoyées à partir d'un MediaController si elles référençaient un groupe avec Format.metadata (#296).
    • Correction d'un problème où Player.COMMAND_GET_CURRENT_MEDIA_ITEM devait être disponible pour accéder aux métadonnées via l'ancien MediaSessionCompat.
    • Correction d'un problème où les instances MediaSession sur un thread en arrière-plan entraînaient des plantages lorsqu'elles étaient utilisées dans MediaSessionService (#318).
    • Correction d'un problème qui entraînait la déclaration d'un récepteur de bouton multimédia par la bibliothèque sans que l'application l'ait prévu (#314).
  • 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 :
    • Correction de la détection du type de réseau sur l'API 33 (#10970).
    • Correction de NullPointerException lors de l'appel de ExoPlayer.isTunnelingEnabled (#10977).
  • Téléchargements :
    • Rendez configurable la différence maximale entre les heures de début de deux segments à fusionner dans SegmentDownloader et les sous-classes (#248).
  • Audio :
    • Correction de la lecture MP3 sans pause sur les appareils Samsung (#8594).
    • Correction d'un bug où les vitesses de lecture définies immédiatement après la désactivation de l'audio peuvent être remplacées par un changement de vitesse précédent (#10882).
  • Vidéo :
    • Mappez le format HEVC HDR10 sur HEVCProfileMain10HDR10 au lieu de HEVCProfileMain10.
    • 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 bien supérieure à la fréquence d'actualisation de l'écran.
  • Google Cast :
    • Correction de l'erreur STATE_IDLE temporaire lors du passage d'un élément multimédia à un autre (#245).
  • RTSP :
    • Capture de l'IllegalArgumentException générée lors de l'analyse des messages de réponse RTSP Describe 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 dans le cas sans annonce, le seul) événement LOADED n'était pas reçu.

Version 1.0.0-rc01

16 février 2023

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

Cette version correspond à la version 2.18.3 d'ExoPlayer.

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

Version 1.0.0-beta03

22 novembre 2022

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

Cette version correspond à la version 2.18.2 d'ExoPlayer.

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

Version 1.0.0-beta02

21 juillet 2022

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

Cette version correspond à la version 2.18.1 d'ExoPlayer.

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

Version 1.0.0-beta01

16 juin 2022

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

Cela correspond à la version 2.18.0 d'ExoPlayer.

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

Version 1.0.0-alpha03

14 mars 2022

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

Cela correspond à la version 2.17.1 d'ExoPlayer.

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

Version 1.0.0-alpha02

2 mars 2022

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

Cela correspond à la version 2.17.0 d'ExoPlayer.

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

Version 1.0.0-alpha01

27 octobre 2021

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

Nouvelles fonctionnalités

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

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

Pour en savoir plus, consultez le projet GitHub Media3.

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