Media3
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
20 décembre 2024 | 1.5.1 | - | - | 1.6.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.4.1" // For media playback using ExoPlayer implementation "androidx.media3:media3-exoplayer:$media3_version" // For DASH playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-dash:$media3_version" // For HLS playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-hls:$media3_version" // For SmoothStreaming playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" // For RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$media3_version" // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation "androidx.media3:media3-exoplayer-midi:$media3_version" // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation "androidx.media3:media3-exoplayer-ima:$media3_version" // For loading data using the Cronet network stack implementation "androidx.media3:media3-datasource-cronet:$media3_version" // For loading data using the OkHttp network stack implementation "androidx.media3:media3-datasource-okhttp:$media3_version" // For loading data using librtmp implementation "androidx.media3:media3-datasource-rtmp:$media3_version" // For building media playback UIs implementation "androidx.media3:media3-ui:$media3_version" // For building media playback UIs for Android TV using the Jetpack Leanback library implementation "androidx.media3:media3-ui-leanback:$media3_version" // For exposing and controlling media sessions implementation "androidx.media3:media3-session:$media3_version" // For extracting data from media containers implementation "androidx.media3:media3-extractor:$media3_version" // For integrating with Cast implementation "androidx.media3:media3-cast:$media3_version" // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation "androidx.media3:media3-exoplayer-workmanager:$media3_version" // For transforming media files implementation "androidx.media3:media3-transformer:$media3_version" // For applying effects on video frames implementation "androidx.media3:media3-effect:$media3_version" // For muxing media files implementation "androidx.media3:media3-muxer:$media3_version" // Utilities for testing media components (including ExoPlayer components) implementation "androidx.media3:media3-test-utils:$media3_version" // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation "androidx.media3:media3-test-utils-robolectric:$media3_version" // Common functionality for reading and writing media containers implementation "androidx.media3:media3-container:$media3_version" // Common functionality for media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" // Common Kotlin-specific functionality implementation "androidx.media3:media3-common-ktx:$media3_version" }
Kotlin
dependencies { val media3_version = "1.4.1" // For media playback using ExoPlayer implementation("androidx.media3:media3-exoplayer:$media3_version") // For DASH playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-dash:$media3_version") // For HLS playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-hls:$media3_version") // For SmoothStreaming playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-smoothstreaming:$media3_version") // For RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$media3_version") // For MIDI playback support with ExoPlayer (see additional dependency requirements in // https://github.com/androidx/media/blob/release/libraries/decoder_midi/README.md) implementation("androidx.media3:media3-exoplayer-midi:$media3_version") // For ad insertion using the Interactive Media Ads SDK with ExoPlayer implementation("androidx.media3:media3-exoplayer-ima:$media3_version") // For loading data using the Cronet network stack implementation("androidx.media3:media3-datasource-cronet:$media3_version") // For loading data using the OkHttp network stack implementation("androidx.media3:media3-datasource-okhttp:$media3_version") // For loading data using librtmp implementation("androidx.media3:media3-datasource-rtmp:$media3_version") // For building media playback UIs implementation("androidx.media3:media3-ui:$media3_version") // For building media playback UIs for Android TV using the Jetpack Leanback library implementation("androidx.media3:media3-ui-leanback:$media3_version") // For exposing and controlling media sessions implementation("androidx.media3:media3-session:$media3_version") // For extracting data from media containers implementation("androidx.media3:media3-extractor:$media3_version") // For integrating with Cast implementation("androidx.media3:media3-cast:$media3_version") // For scheduling background operations using Jetpack Work's WorkManager with ExoPlayer implementation("androidx.media3:media3-exoplayer-workmanager:$media3_version") // For transforming media files implementation("androidx.media3:media3-transformer:$media3_version") // For applying effects on video frames implementation("androidx.media3:media3-effect:$media3_version") // For muxing media files implementation("androidx.media3:media3-muxer:$media3_version") // Utilities for testing media components (including ExoPlayer components) implementation("androidx.media3:media3-test-utils:$media3_version") // Utilities for testing media components (including ExoPlayer components) via Robolectric implementation("androidx.media3:media3-test-utils-robolectric:$media3_version") // Common functionality for reading and writing media containers implementation("androidx.media3:media3-container:$media3_version") // Common functionality for media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") // 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.6.0
Version 1.6.0-alpha01
20 décembre 2024
Publication d'androidx.media3:media3-*:1.6.0-alpha01
.
La version 1.6.0-alpha01 contient ces commits.
- Bibliothèque commune :
- Suppression de la méthode
Format.toBundle(boolean excludeMetadata)
, utilisez plutôtFormat.toBundle()
. - Ajoutez
AudioManagerCompat
etAudioFocusRequestCompat
pour remplacer les classes équivalentes dansandroidx.media
.
- Suppression de la méthode
- ExoPlayer :
- Tenez compte de la langue lorsque vous sélectionnez une piste vidéo. Par défaut, sélectionnez une piste vidéo "principale" correspondant à la langue de la piste audio sélectionnée, le cas échéant. Les préférences de langue vidéo explicites peuvent être exprimées avec
TrackSelectionParameters.Builder.setPreferredVideoLanguage(s)
. - Ajout du paramètre
selectedAudioLanguage
à la méthodeDefaultTrackSelector.selectVideoTrack()
. - Ajoutez le paramètre
retryCount
àMediaSourceEventListener.onLoadStarted
et aux méthodesMediaSourceEventListener.EventDispatcher
correspondantes. - Correction d'un bug qui pouvait entraîner le blocage des images à la fin de l'élément lorsque les durées des éléments ou des périodes de la playlist dans les flux DASH multipériodes ne correspondaient pas au contenu réel (numéro 1698).
- Réduction des valeurs par défaut de
bufferForPlaybackMs
etbufferForPlaybackAfterRebufferMs
dansDefaultLoadControl
à 1 000 et 2 000 ms, respectivement. - Ajoutez
MediaExtractorCompat
, une nouvelle classe qui fournit des fonctionnalités équivalentes à la plate-formeMediaExtractor
. - Déplacez
BasePreloadManager.Listener
vers unPreloadManagerListener
de niveau supérieur. RenderersFactory.createSecondaryRenderer
peut être implémenté pour fournir des moteurs de rendu secondaires pour le préchauffage. Le préchauffage permet de passer plus rapidement d'un élément multimédia à un autre pendant la lecture.- Activation de l'envoi de
CmcdData
pour les requêtes de fichier manifeste dans les formats de streaming adaptatif DASH, HLS et SmoothStreaming (numéro 1951). - Fournissez le
MediaCodecInfo
du codec qui sera initialisé dansMediaCodecRenderer.onReadyToInitializeCodec
(#1963). - Modifiez
AdsMediaSource
pour permettre àAdPlaybackStates
de croître en ajoutant des groupes d'annonces. Les modifications non valides sont détectées et génèrent une exception.
- Tenez compte de la langue lorsque vous sélectionnez une piste vidéo. Par défaut, sélectionnez une piste vidéo "principale" correspondant à la langue de la piste audio sélectionnée, le cas échéant. Les préférences de langue vidéo explicites peuvent être exprimées avec
- Transformateur :
- Mettez à jour les paramètres de
VideoFrameProcessor.registerInputStream
etVideoFrameProcessor.Listener.onInputStreamRegistered
pour utiliserFormat
. - Ajout de la prise en charge du transmuxage dans d'autres formats rétrocompatibles.
- Générez des métadonnées statiques HDR lorsque vous utilisez
DefaultEncoderFactory
.
- Mettez à jour les paramètres de
- Extracteurs :
- AVI: correction de la gestion des fichiers avec audio compressé à débit constant, où l'en-tête de flux stocke le nombre d'octets au lieu du nombre de segments.
- Audio :
- Correction de l'appel de
onAudioPositionAdvancing
lorsque la lecture reprend (auparavant, il était appelé lorsque la lecture était mise en pause).
- Correction de l'appel de
- Vidéo :
- Correction de
MediaCodecVideoRenderer
de sorte que, en l'absence deSurface
, le moteur de rendu ne saute les images juste avant que siVideoFrameReleaseControl.getFrameReleaseAction
n'est pasFRAME_RELEASE_TRY_AGAIN_LATER
.
- Correction de
- Texte :
- Arrêtez de charger de manière anticipée tous les fichiers de sous-titres configurés avec
MediaItem.Builder.setSubtitleConfigurations
et ne chargez qu'un seul fichier s'il est sélectionné par sélection de piste (#1721).
- Arrêtez de charger de manière anticipée tous les fichiers de sous-titres configurés avec
- Effet :
- Déplacement de la fonctionnalité de
OverlaySettings
dansStaticOverlaySettings
.OverlaySettings
peut être sous-classé pour permettre des paramètres de superposition dynamiques.
- Déplacement de la fonctionnalité de
- Muxeurs :
- Suppression de
MuxerException
de l'interfaceMuxer
pour éviter un nom complet très long.
- Suppression de
- Session :
- Ajout de "Context" en tant que paramètre à "MediaButtonReceiver.shouldStartForegroundService" (1887)
- Interface utilisateur :
- Ajoutez le composable
PlayerSurface
au modulemedia3-ui-compose
. - Ajoutez les classes
PlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
etShuffleButtonState
, ainsi que les composablesrememberPlayPauseButtonState
,rememberNextButtonState
,rememberPreviousButtonState
,rememberRepeatButtonState
etrememberShuffleButtonState
correspondants au modulemedia3-ui-compose
.
- Ajoutez le composable
- 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 met en correspondance avec l'AdPlaybackState
transmise àAdsMediaSource
. Cette version initiale n'est compatible qu'avec les flux VOD HLS avec des attributsX-ASSET-URI
. - Ajout de
HlsInterstitialsAdsLoader.AdsMediaSourceFactory
. Les applications peuvent l'utiliser pour créer des instancesAdsMediaSource
qui utilisent unHlsInterstitialsAdsLoader
de manière pratique et sécurisée.
- Ajoutez une première version de
- Extension DASH :
- Ajout de la prise en charge du format AC-4 de niveau 4 pour DASH (#1898).
- Extensions du décodeur (FFmpeg, VP9, AV1, etc.):
- Ajout du module de décodeur MPEG-H qui utilise le module de décodeur MPEG-H natif pour décoder l'audio MPEG-H (numéro 1826).
- Application de démonstration :
- Ajoutez des éléments d'interface utilisateur composables
MinimalControls
(PlayPauseButton
,NextButton
,PreviousButton
) etExtraControls
(RepeatButton
,ShuffleButton
) àdemo-compose
à l'aide dePlayPauseButtonState
,NextButtonState
,PreviousButtonState
,RepeatButtonState
etShuffleButtonState
.
- Ajoutez des éléments d'interface utilisateur composables
- Suppression des symboles obsolètes :
- Suppression de la méthode
AudioMixer.create()
obsolète. UtilisezDefaultAudioMixer.Factory().create()
à la place. - Suppression des méthodes
Transformer.Builder
obsolètes suivantes :setTransformationRequest()
, utilisez plutôtsetAudioMimeType()
,setVideoMimeType()
etsetHdrMode()
.setAudioProcessors()
, définissez le processeur audio dans unEditedMediaItem.Builder.setEffects()
et transmettez-le àTransformer.start()
à la place.setVideoEffects()
, définissez l'effet vidéo dans unEditedMediaItem.Builder.setEffects()
et transmettez-le àTransformer.start()
à la place.setRemoveAudio()
, utilisezEditedMediaItem.Builder.setRemoveAudio()
pour supprimer l'audio deEditedMediaItem
transmis àTransformer.start()
.setRemoveVideo()
, utilisezEditedMediaItem.Builder.setRemoveVideo()
pour supprimer la vidéo de l'EditedMediaItem
transmise àTransformer.start()
.setFlattenForSlowMotion()
, utilisez plutôtEditedMediaItem.Builder.setFlattenForSlowMotion()
pour aplatir leEditedMediaItem
transmis àTransformer.start()
.setListener()
, utilisez plutôtaddListener()
,removeListener()
ouremoveAllListeners()
.
- Suppression des méthodes
Transformer.Listener
obsolètes suivantes :onTransformationCompleted(MediaItem)
. Utilisez plutôtonCompleted(Composition, ExportResult)
.onTransformationCompleted(MediaItem, TransformationResult)
. Utilisez plutôtonCompleted(Composition, ExportResult)
.onTransformationError(MediaItem, Exception)
. Utilisez plutôtonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationException)
, utilisez plutôtonError(Composition, ExportResult, ExportException)
.onTransformationError(MediaItem, TransformationResult, TransformationException)
, utilisez plutôtonError(Composition, ExportResult, ExportException)
.onFallbackApplied(MediaItem, TransformationRequest, TransformationRequest)
, utilisez plutôtonFallbackApplied(Composition, TransformationRequest, TransformationRequest)
.
- Suppression de la classe
TransformationResult
obsolète. Utilisez plutôtExportResult
. - Suppression de la classe
TransformationException
obsolète. Utilisez plutôtExportException
. - Suppression de
Transformer.PROGRESS_STATE_NO_TRANSFORMATION
obsolète. UtilisezTransformer.PROGRESS_STATE_NOT_STARTED
à la place. - Suppression de
Transformer.setListener()
obsolète. Utilisez plutôtTransformer.addListener()
,Transformer.removeListener()
ouTransformer.removeAllListeners()
. - Suppression de
Transformer.startTransformation()
obsolète. UtilisezTransformer.start(MediaItem, String)
à la place. - Suppression de
SingleFrameGlShaderProgram
obsolète. UtilisezBaseGlShaderProgram
à la place. - Suppression de
Transformer.flattenForSlowMotion
. UtilisezEditedMediaItem.flattenForSlowMotion
à la place.
- Suppression de la méthode
Version 1.5
Version 1.5.1
19 décembre 2024
Publication d'androidx.media3:media3-*:1.5.1
.
La version 1.5.1 contient ces commits.
- ExoPlayer :
- Désactivation de l'utilisation du déchiffrement asynchrone dans MediaCodec pour éviter les problèmes de délai avant expiration du codec signalés avec cette API de plate-forme (#1641).
- Extracteurs :
- MP3: n'arrêtez pas 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 (numéro 1904).
- MP3: n'arrêtez pas la lecture prématurément lorsque la table des matières d'un frame
- Vidéo :
- Rollback de l'utilisation des valeurs de format de pixel fournies par
MediaCodecAdapter
lorsqu'elles sont fournies lors du traitement deonOutputFormatChanged
(numéro 1371).
- Rollback de l'utilisation des valeurs de format de pixel fournies par
- Texte :
- Correction d'un bug dans
ReplacingCuesResolver.discardCuesBeforeTimeUs
où le repère actif àtimeUs
(commencé avant, mais pas encore terminé) était incorrectement supprimé (#1939).
- Correction d'un bug dans
- Métadonnées :
- Extraction du numéro de disque/de piste et du genre des commentaires Vorbis dans
MediaMetadata
(numéro 1958).
- Extraction du numéro de disque/de piste et du genre des commentaires Vorbis dans
Version 1.5.0
27 novembre 2024
Publication d'androidx.media3:media3-*:1.5.0
.
La version 1.5.0 contient ces commits.
- Bibliothèque commune :
- Ajout de
ForwardingSimpleBasePlayer
qui permet de transférer vers un autre lecteur avec de petits ajustements, tout en assurant une cohérence et une gestion des écouteurs complètes (#1183). - Remplacez
SimpleBasePlayer.State.playlist
par la méthodegetPlaylist()
. - Ajout d'un forçage pour
SimpleBasePlayer.State.Builder.setPlaylist()
afin de spécifier directement unTimeline
et desTracks
etMetadata
actuels au lieu de créer une structure de playlist. - Augmentez
minSdk
à 21 (Android Lollipop). Cela est conforme à toutes les autres bibliothèques AndroidX. - Ajouter un 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 faire tourner une coroutine afin d'écouterPlayer.Events
dans la bibliothèquemedia3-common-ktx
. - Suppression des annotations
@DoNotInline
des classes internes hors ligne manuellement conçues pour éviter les échecs de validation des classes d'exécution. Les versions récentes de R8 génèrent désormais automatiquement des appels hors ligne de ce type pour éviter les échecs d'exécution (la mise hors ligne manuelle n'est donc plus nécessaire). Tous les utilisateurs Gradle de la bibliothèque doivent déjà utiliser une version du plug-in Android Gradle qui utilise une version de R8 qui le fait, en raison decompileSdk = 35
. Les utilisateurs de la bibliothèque avec des systèmes de compilation autres que Gradle devront s'assurer que leur étape de réduction/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é effectuée dans d'autres bibliothèques AndroidX.
- Ajout de
- ExoPlayer :
MediaCodecRenderer.onProcessedStreamChange()
peut désormais être appelé pour chaque élément multimédia. Auparavant, il n'était pas appelé pour le premier. Pour l'activer, utilisezMediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart()
.- Ajout de
PreloadMediaSource.PreloadControl.onPreloadError
pour permettre aux implémentationsPreloadMediaSource.PreloadControl
d'effectuer des actions en cas d'erreur. - Ajoutez
BasePreloadManager.Listener
pour propager les événements de précharge aux applications. - Autorisez la modification du délai avant expiration du client SNTP et réessayez les adresses alternatives en cas d'expiration (numéro 1540).
- Supprimez
MediaCodecAdapter.Configuration.flags
, car le champ était toujours nul. - Autorisez l'utilisateur à sélectionner le haut-parleur intégré pour la lecture sur l'API Wear OS 35 ou version ultérieure (lorsque l'appareil annonce la prise en charge de cette fonctionnalité).
- Différez l'appel de blocage vers
Context.getSystemService(Context.AUDIO_SERVICE)
jusqu'à ce que la gestion de la sélection audio soit activée. Cela garantit que l'appel bloquant n'est pas effectué si la gestion de la sélection audio n'est pas activée (numéro 1616). - Autorisation de 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 moteurs de rendu individuels permettent la lecture. - Correction du problème qui faisait que
MediaCodec.CryptoException
était parfois signalé comme une "erreur d'exécution inattendue" lorsqueMediaCodec
était exécuté en mode asynchrone (comportement par défaut sur l'API 31 et versions ultérieures). - Transmettez
bufferedDurationUs
au lieu debufferedPositionUs
avecPreloadMediaSource.PreloadControl.onContinueLoadingRequested()
.DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS
est également remplacé parDefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS
. Les applications doivent alors transmettre une valeur représentant une durée spécifique à partir de la position de début par défaut pour laquelle la source multimédia correspondante doit être préchargée avec cette IntDef, au lieu d'une position. - Ajout d'une implémentation
ForwardingRenderer
qui transfère tous les appels de méthode à un autre moteur de rendu (1703). - Ajoutez le préchargement de la playlist pour l'élément suivant. 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'option est activée et pour ne pas interférer avec la lecture,DefaultLoadControl
limite le préchargement au démarrage et à la poursuite uniquement lorsque le lecteur ne charge pas la lecture. Les applications peuvent modifier ce comportement en implémentantLoadControl.shouldContinuePreloading()
en conséquence (par exemple, en remplaçant cette méthode dansDefaultLoadControl
). L'implémentation par défaut deLoadControl
désactive le préchargement si une application utilise une implémentation personnalisée deLoadControl
. - Ajout de la méthode
MediaSourceEventListener.EventDispatcher.dispatchEvent()
pour permettre l'appel d'événements des écouteurs de sous-classes (1736). - Ajoutez
DefaultPreloadManager.Builder
qui crée les instancesDefaultPreloadManager
etExoPlayer
avec des configurations partagées de manière cohérente. - Suppression du paramètre
Renderer[]
deLoadControl.onTracksSelected()
, car l'implémentation deDefaultLoadControl
peut récupérer les types de flux à partir deExoTrackSelection[]
. DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[])
obsolète et méthode marquée comme définitive pour éviter les forçages. Utilisez plutôt le nouveauDefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[])
.- Enregistrez les événements
MediaSourceEventListener
à partir de sources secondaires dansMergingMediaSource
. Des événements de début/d'erreur/d'annulation/d'achèvement du chargement seront alors signalés pour les sous-titres téléchargés côté client (ceux ajoutés avecMediaItem.LocalConfiguration.subtitleConfigurations
), qui peuvent apparaître comme des événements de chargement en double émis à partir deAnalyticsListener
. - Empêcher les erreurs de sous-titres et de métadonnées d'arrêter complètement la lecture
Au lieu de cela, la piste problématique est désactivée et la lecture des autres pistes se poursuit (#1722).
- Dans la nouvelle gestion des sous-titres (lors de l'extraction), l'analyse associée (par exemple, les données de sous-titres non valides) et les erreurs de chargement (par exemple, HTTP 404) sont émises via des rappels
onLoadError
. - Dans l'ancienne gestion des sous-titres (lors du rendu), seules les erreurs de chargement associées sont émises via des rappels
onLoadError
, tandis que les erreurs d'analyse sont ignorées en mode silencieux (il s'agit d'un comportement préexistant).
- Dans la nouvelle gestion des sous-titres (lors de l'extraction), l'analyse associée (par exemple, les données de sous-titres non valides) et les erreurs de chargement (par exemple, HTTP 404) sont émises via des rappels
- Correction d'un bug qui pouvait entraîner le blocage des images à la fin de l'élément lorsque les éléments de la playlist ou les périodes des flux DASH multipériodes avaient des durées qui ne correspondaient pas au contenu réel (numéro 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 des données vidéo dans Transformer via unSurface
. ImageAssetLoader
signale une entrée non prise en charge viaAssetLoader.onError
au lieu de générer uneIllegalStateException
.- Rendre le paramétrage de la durée de l'image à l'aide de
MediaItem.Builder.setImageDurationMs
obligatoire pour l'exportation d'images. - Ajout de la prise en charge de l'exportation des espaces dans les séquences d'éléments audio EditedMediaItems.
- Ajoutez
- Sélection de la piste :
DefaultTrackSelector
: privilégiez l'audio basée sur les objets à l'audio basée sur les canaux lorsque les autres facteurs sont égaux.
- Extracteurs :
- Autorisez
Mp4Extractor
etFragmentedMp4Extractor
à identifier les échantillons H264 qui ne sont pas utilisés comme référence par les échantillons suivants. - Ajout d'une option permettant d'activer la recherche basée sur l'index dans
AmrExtractor
. - Traitement des fichiers MP3 dont la taille est supérieure à 128 Ko entre les trames valides comme tronqués (au lieu d'être considérés comme non valides). Cela signifie que les fichiers contenant des données autres que MP3 à la fin, sans autre métadonnées pour indiquer 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}
(numéro 1563). - Correction de la gestion des échantillons de pré-roll pour les positions de début des médias autres que les images clés lors du traitement des listes de montage dans les fichiers MP4 (#1659).
- Amélioration du calcul de la fréquence d'images à l'aide de la durée du contenu multimédia dans le champ
mdhd
dansMp4Extractor
etFragmentedMp4Extractor
(numéro 1531). - Correction de la mise à l'échelle incorrecte de
media_time
dans les listes de montage MP4. Bien quesegment_duration
ait déjà été correctement mis à l'échelle à l'aide de la é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 de format MP4 (#1792). - Gérer les images hors séquence dans le calcul
endIndices
pour MP4 avec la liste de montage (#1797). - Correction de l'analyse de la durée des médias dans le champ
mdhd
des fichiers MP4 pour gérer les valeurs-1
(#1819). - Ajout de la prise en charge de l'identification de la zone
h263
dans les fichiers MP4 pour les vidéos H.263 (1821). - Prise en charge du format de fichier multimédia de base ISO AC-4 de niveau 4 (numéro 1265).
- Autorisez
- DataSource :
- Mise à jour de
HttpEngineDataSource
pour permettre l'utilisation à partir de la version S, extension 7 au lieu du niveau d'API 34 (numéro 1262). DataSourceContractTest
: affirmez queDataSource.getUri()
renvoie l'URI résolu (comme indiqué dans la documentation). Si ce n'est pas le cas de l'URI demandé, les tests peuvent l'indiquer à l'aide de la nouvelle méthodeDataSourceContractTest.TestResource.Builder.setResolvedUri()
.DataSourceContractTest
: affirme queDataSource.getUri()
etgetResponseHeaders()
renvoient leur valeur "open" après un appel àopen()
ayant échoué (en raison d'une ressource introuvable) et avant un appelclose()
ultérieur.- Le forçage de
DataSourceContractTest.getNotFoundResources()
permet aux sous-classes de test de fournir plusieurs ressources "introuvables", ainsi que les en-têtes attendus. Cela permet de faire la distinction entre le code HTTP 404 (avec en-têtes) et "serveur introuvable" (sans en-têtes).
- Le forçage de
- Mise à jour de
- Audio :
- Configurez automatiquement les métadonnées de niveau sonore CTA-2075 sur le codec si elles sont présentes dans le contenu multimédia.
- Assurez-vous que le volume diminue de manière fluide lors de la recherche.
- Correction des bruits de claquement pouvant se produire lors des recherches.
- Correction de l'accumulation d'erreurs de troncation pour l'algorithme de changement de hauteur/de temps de Sonic.
- Correction d'un bug dans
SpeedChangingAudioProcessor
qui entraînait la suppression des frames de sortie.
- Vidéo :
MediaCodecVideoRenderer
évite de décoder des échantillons qui ne sont ni affichés ni utilisés comme référence par d'autres échantillons.- À partir de l'API 35,
MediaCodecAdapter
peut désormais recevoir unSurface
null
dansconfigure
et appeler une nouvelle méthodedetachOutputSurface
pour supprimer unSurface
précédemment défini si le codec le prend en charge (MediaCodecInfo.detachedSurfaceSupported
). - Utilisez les valeurs de format de pixel fournies par
MediaCodecAdapter
, le cas échéant, lors du traitement deonOutputFormatChanged
(numéro 1371). - Ajout d'un correctif pour un problème d'appareil sur la Galaxy Tab S7 FE qui entraîne la mise en surbrillance des flux H264 sécurisés à 60 FPS comme non compatibles (#1619).
- Ajout d'un correctif 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 de son remplissage pour les intervalles vocaux WebVTT (#1632). - Assurez-vous que les sous-titres WebVTT au format HLS avec des codes temporels de sous-titres très longs (qui débordent une
long
64 bits lorsqu'ils sont représentés en microsecondes et multipliés par la base de temps MPEG90,000
) s'affichent (#1763). - Prise en charge des sous-titres CEA-608 dans les contenus Dolby Vision (#1820).
- Correction du blocage de la lecture sur les flux multipériodes DASH lorsque les sous-titres CEA-608 sont activés (#1863).
- Ajout d'un
- Métadonnées :
- Attribuez le type
C.TRACK_TYPE_METADATA
aux pistes contenant du contenu icy ou vnd.dvb.ait.
- Attribuez le type
- Image :
- Ajoutez
ExternallyLoadedImageDecoder
pour une intégration simplifiée avec des bibliothèques de chargement d'images externes telles que Glide ou Coil.
- Ajoutez
- DataSource :
- Ajout de
FileDescriptorDataSource
, un nouveauDataSource
qui peut être utilisé pour lire à partir d'unFileDescriptor
(#3757).
- Ajout de
- Effet :
- Ajout d'une solution de contournement
DefaultVideoFrameProcessor
pour l'ajustement mineur deSurfaceTexture
.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 géré de sorte que la sortie soit plus proche de ce qui est attendu. - Accélérez
DefaultVideoFrameProcessor.queueInputBitmap()
. Par conséquent, l'exportation d'images vers des vidéos avecTransformer
est plus rapide.
- Ajout d'une solution de contournement
- Extension IMA :
- Correction d'un bug qui pouvait entraîner une
ArrayIndexOutOfBoundsException
dansImaServerSideAdInsertionMediaSource
lors de la suppression de la playlist. - Correction d'un bug qui pouvait entraîner une erreur
ArrayIndexOutOfBoundsException
lors de la lecture au-delà de la dernière annonce mid-roll lorsque des flux DAI insérés côté serveur étaient utilisés sans pré-annonce (numéro 1741).
- Correction d'un bug qui pouvait entraîner une
- Session :
- Ajoutez
MediaButtonReceiver.shouldStartForegroundService(Intent)
pour permettre aux applications de supprimer une commande de lecture entrante pour la reprise de la lecture en ignorant cette méthode. Par défaut, le service est toujours démarré et la lecture ne peut pas être supprimée sans que le système ne plante le service avec unForegroundServiceDidNotStartInTimeException
(#1528). - Correction d'un bug qui entraînait l'envoi des commandes personnalisées envoyées à partir d'un
MediaBrowser
àMediaSessionCompat.Callback
au lieu de la varianteMediaBrowserServiceCompat
de la méthode lorsqu'elle était connectée à un ancien service. Cela empêchaitMediaBrowser
de recevoir la valeur de retour réelle renvoyée par l'ancien service (numéro 1474). - Gérer les
IllegalArgumentException
générés par les appareils de certains fabricants lors de la configuration du broadcast receiver pour les intents de bouton multimédia (numéro 1730). - Ajoutez des boutons de commande pour les éléments multimédias. Cela ajoute l'API Media3 pour ce qui était appelé
Custom browse actions
avec l'ancienne bibliothèque avecMediaBrowserCompat
. Notez qu'avec Media3, les boutons de commande pour les éléments multimédias sont disponibles pourMediaBrowser
etMediaController
. Consultez la section Actions de navigation personnalisées d'AAOS. - Correction d'un bug qui empêchait parfois un contrôleur Media3 de laisser une application de session démarrer un service de premier plan après avoir demandé
play()
. - Limitez
CommandButton.Builder.setIconUri
à n'accepter que des URI de contenu. - Transmettez les indices de connexion d'un navigateur Media3 à l'
MediaBrowserCompat
initiale lors de la connexion à une ancienneMediaBrowserCompat
. Le service peut recevoir les indices de connexion transmis en tant qu'indices racine avec le 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é à unparentid
. - Amélioration du comportement d'interopérabilité afin qu'un navigateur Media3 connecté à une ancienne
MediaBrowserService
ne demande pas deux fois les enfants d'unparentId
lors de l'abonnement à un parent.
- Ajoutez
- Interface utilisateur :
- Rendre la vidéo étirée/recadrée dans la solution de contournement
PlayerView
-in-Compose-AndroidView
facultative, en raison de problèmes liés aux transitions partagées basées sur XML. Les applications qui utilisentPlayerView
dansAndroidView
doivent appelerPlayerView.setEnableComposeSurfaceSyncWorkaround
pour activer cette fonctionnalité (#1237, #1594). - Ajout de
setFullscreenButtonState
àPlayerView
pour permettre la mise à jour de l'icône du bouton plein écran à la demande, c'est-à-dire en dehors de la bande et non de manière réactive à une interaction de clic (#1590, #184). - Correction d'un bug qui empêchait l'option "Aucune" de la sélection de texte de fonctionner si des préférences de sélection de piste de texte définies par l'application étaient définies.
- Rendre la vidéo étirée/recadrée dans la solution de contournement
- Extension DASH :
- 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).
- Correction d'une erreur
- Extension RTSP :
- Extensions du décodeur (FFmpeg, VP9, AV1, etc.):
- Ajoutez le module de décodeur IAMF, qui prend en charge la lecture de 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 mise en page stéréo et 5.1 avec spatialisation, ainsi qu'avec le suivi de la tête activé en option, mais la compatibilité avec la lecture binaurale n'est pas disponible pour le moment.
- Ajout de la prise en charge des pages de 16 ko pour les extensions de décodeur sur Android 15 (#1685).
- Ajoutez le module de décodeur IAMF, qui prend en charge la lecture de fichiers MP4 contenant des pistes IAMF à l'aide de la bibliothèque native libiamf pour synthétiser l'audio.
- Extension Cast :
- Arrêtez de nettoyer la chronologie après la déconnexion de CastSession, ce qui permet à l'application d'envoi de reprendre la lecture en local après une déconnexion.
- Renseignez le
DeviceInfo
de CastPlayer lorsqu'unContext
est fourni. Cela permet d'associerMediaSession
àRoutingSession
, ce qui est nécessaire pour intégrer le commutateur 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
est mis à jour. - La mémoire tampon de sortie
offset
est appliquée correctement.
- Le flux d'entrée
- Application de démonstration
- Résolution des fuites de mémoire dans l'application de démonstration de format court (#1839).
- Suppression des symboles obsolètes :
- Suppression des
Player.hasPrevious
etPlayer.hasPreviousWindow()
obsolètes. UtilisezPlayer.hasPreviousMediaItem()
à la place. - Suppression de la méthode
Player.previous()
obsolète. UtilisezPlayer.seekToPreviousMediaItem()
à la place. - Suppression de la méthode
DrmSessionEventListener.onDrmSessionAcquired
obsolète. - Suppression des constructeurs
DefaultEncoderFactory
obsolètes. UtilisezDefaultEncoderFactory.Builder
à la place.
- Suppression des
Version 1.5.0-rc02
19 novembre 2024
Utilisez la version stable 1.5.0.
Version 1.5.0-rc01
13 novembre 2024
Utilisez la version stable 1.5.0.
Version 1.5.0-beta01
30 octobre 2024
Utilisez la version stable 1.5.0.
Version 1.5.0-alpha01
10 septembre 2024
Utilisez la version stable 1.5.0.
Version 1.4.0
Version 1.4.1
27 août 2024
Publication d'androidx.media3:media3-*:1.4.1
.
La version 1.4.1 contient ces commits.
- ExoPlayer :
- Extracteurs :
- MP3: correction de l'erreur
Searched too many bytes
en ignorant correctement les données non MP3 en fin de fichier en fonction du champ de longueur dans un frameInfo
(#1480).
- MP3: correction de l'erreur
- 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 valeurstts:fontSize
en pourcentage. - Correction de
IndexOutOfBoundsException
dansLegacySubtitleUtil
, car la gestion 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 dansSubtitle
était incorrecte (#1516).
- TTML: correction de la gestion des valeurs
- DRM :
- Correction de l'erreur
android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE
sur les appareils équipés de l'API 31 ou version ultérieure qui diffusent du contenu Widevine L1. Cette erreur est due à une implémentation incomplète de la méthodeMediaDrm.requiresSecureDecoder
du framework (numéro 1603).
- Correction de l'erreur
- Effet :
- Ajoutez une méthode
release()
àGlObjectsProvider
.
- Ajoutez une méthode
- Session :
- Transformation d'un double appui sur
KEYCODE_HEADSETHOOK
en action de "rechercher la suivante", comme documenté (#1493). - Gérer
KEYCODE_HEADSETHOOK
en tant que commande "play" dansMediaButtonReceiver
pour décider de l'ignorer afin d'éviter unForegroundServiceDidNotStartInTimeException
(numéro 1581).
- Transformation d'un double appui sur
- Extension RTSP :
- Ignorer les descriptions multimédias 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 :
- Transmettez les appels de recherche présumés sans opération aux méthodes
BasePlayer.seekTo()
etSimpleBasePlayer.handleSeek()
protégées au lieu de les ignorer. Si vous implémentez ces méthodes dans un lecteur personnalisé, vous devrez peut-être gérer ces appels supplémentaires avecmediaItemIndex == C.INDEX_UNSET
. - Suppression de la dépendance de compilation sur le désucrage amélioré de Java 8 (#1312).
- Assurez-vous que la durée transmise à
MediaItem.Builder.setImageDurationMs()
est ignorée pour unMediaItem
autre qu'une image (comme indiqué dans la documentation). - Ajoutez
Format.customData
pour stocker des informations personnalisées fournies par l'application sur les instancesFormat
.
- Transmettez les appels de recherche présumés sans opération aux méthodes
- ExoPlayer :
- Ajoutez
BasePreloadManager
, qui coordonne le préchargement de plusieurs sources en fonction des priorités définies par leurrankingData
. Vous pouvez personnaliser cette classe. AjoutezDefaultPreloadManager
, qui utilisePreloadMediaSource
pour précharger des échantillons multimédias des sources dans la mémoire et utilise un entierrankingData
qui indique l'index d'un élément dans l'UI. - Ajoutez
PlayerId
à la plupart des méthodes deLoadControl
pour permettre aux implémentations deLoadControl
de prendre en charge plusieurs joueurs. - Suppression de
Buffer.isDecodeOnly()
etC.BUFFER_FLAG_DECODE_ONLY
. Il n'est pas nécessaire de définir cet indicateur, car les moteurs de rendu et les décodeurs décident de sauter les tampons en fonction du code temporel. Les implémentations personnalisées deRenderer
doivent vérifier si la durée de la mémoire tampon est d'au moinsBaseRenderer.getLastResetPositionUs()
pour décider si un échantillon doit être affiché. Les implémentationsSimpleDecoder
personnalisées peuvent vérifierisAtLeastOutputStartTimeUs()
si nécessaire ou marquer d'autres tampons avecDecoderOutputBuffer.shouldBeSkipped
pour les ignorer. - Autorisez une valeur nulle à être renvoyée par
TargetPreloadStatusControl.getTargetPreloadStatus(T)
pour indiquer de ne pas précharger unMediaSource
avec lerankingData
donné. - Ajout de
remove(MediaSource)
àBasePreloadManager
. - Ajoutez
reset()
àBasePreloadManager
pour libérer toutes les sources de conservation tout en conservant l'instance du gestionnaire de préchargement. - Ajout de
ExoPlayer.setPriority()
(et deBuilder.setPriority()
) pour définir la valeur de priorité utilisée dansPriorityTaskManager
et pour l'importance de MediaCodec à partir de l'API 35. - Correction d'un problème de mise à jour de la dernière heure de mise en 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émentationsDefaultPreloadManager
etPreloadMediaSource.PreloadControl
personnalisées de précharger la source suivante ou d'effectuer d'autres actions. - Correction d'un bug qui pouvait entraîner une exception de lecture lorsque le saut de silence à la fin des éléments.
- Ajoutez
clear
àPreloadMediaSource
pour supprimer la période de préchargement. - Ajout d'un nouveau code d'erreur
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
utilisé lorsque les ressources de codec sont récupérées pour des tâches de priorité plus élevée. - Laissez
AdsMediaSource
charger les annonces pré-roll avant la fin de la préparation initiale du contenu multimédia (#1358). - Correction d'un bug qui entraînait le transfert de la lecture vers
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. - Renommez
onTimelineRefreshed()
enonSourcePrepared()
etonPrepared()
enonTracksSelected()
dansPreloadMediaSource.PreloadControl
. Renommez également les IntDefs dansDefaultPreloadManager.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'au moment où les moteurs de rendu peuvent progresser.
Vous pouvez l'activer à l'aide de
experimentalSetDynamicSchedulingEnabled()
lorsque vous configurez votre instance ExoPlayer. - Ajout de
Renderer.getDurationToProgressUs()
. UnRenderer
peut implémenter cette méthode pour renvoyer à ExoPlayer la durée de la lecture qui doit avancer pour que le moteur de rendu progresse. SiExoPlayer
est défini avecexperimentalSetDynamicSchedulingEnabled()
,ExoPlayer
appellera cette méthode lors du calcul du moment où planifier sa tâche de travail. - Ajoutez
MediaCodecAdapter#OnBufferAvailableListener
pour envoyer une alerte lorsque les tampons d'entrée et de sortie sont disponibles pourMediaCodecRenderer
.MediaCodecRenderer
signaleraExoPlayer
lors de la réception de ces rappels. SiExoPlayer
est défini avecexperimentalSetDynamicSchedulingEnabled()
,ExoPlayer
planifiera sa boucle de travail, car les moteurs de rendu peuvent progresser. - Utilisez la classe de données pour les méthodes
LoadControl
au lieu de paramètres individuels. - Ajoutez
ExoPlayer.isReleased()
pour vérifier siExoplayer.release()
a été appelé. - Ajout de
ExoPlayer.Builder.setMaxSeekToPreviousPositionMs()
pour configurer la position maximale pour laquelleseekToPrevious()
recherche l'élément précédent (#1425). - Correction de certaines incohérences liées à la priorité audio, par exemple, pas de signalement de perte de priorité complète ou temporaire lorsque le lecteur est mis en pause (numéro 1436).
- Correction d'un éventuel
IndexOutOfBoundsException
causé par les extracteurs qui signalent des pistes supplémentaires après l'étape de préparation initiale (#1476). Effects
dansExoPlayer.setVideoEffect()
recevra les codes temporels avec le décalage du moteur de rendu supprimé (#1098).- Correction d'une éventuelle exception
IllegalArgumentException
lors du traitement d'une erreur du lecteur qui s'est produite lors de la lecture d'un autre élément de playlist (#1483).
- Ajoutez
- Transformateur :
- Ajoutez
audioConversionProcess
etvideoConversionProcess
àExportResult
pour indiquer comment le canal correspondant du fichier de sortie a été créé. - Assouplissement des vérifications au niveau H.264 pour l'optimisation du recadrage.
- Possibilité de passer d'un contenu multimédia SDR à un contenu multimédia HDR dans une séquence.
- Ajout de la prise en charge des effets audio au niveau de la composition.
- Prise en charge du transcodage d'images Ultra HDR en vidéos HDR.
- Correction d'un problème où
DefaultAudioMixer
n'affiche pas la quantité correcte d'octets après avoir été réinitialisé et réutilisé. - Correction d'un bug de décodeur qui limitait le nombre de canaux audio à la stéréo lors de la gestion de l'entrée PCM.
- Lorsque vous sélectionnez des pistes dans
ExoPlayerAssetLoader
, ignorez les contraintes de nombre de canaux audio, car elles ne s'appliquent qu'à la lecture. - Remplacez l'interface
androidx.media3.transformer.Muxer
parandroidx.media3.muxer.Muxer
et supprimezandroidx.media3.transformer.Muxer
. - Correction du chargement d'images HEIC à partir de 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ôtDefaultDecoderFactory.listener
. En cas d'exception de codec, les détails du codec seront disponibles dansExportException.codecInfo
.
- Ajoutez
- Extracteurs :
- MPEG-TS: faites avancer la modification en vous assurant que le dernier frame est affiché 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 apparus dans les flux HLS I-frame uniquement(#1150) et les flux HLS H.262 (#1126).
- MP3: privilégiez la taille des données d'un frame
Info
à la taille indiquée par le flux sous-jacent (par exemple, la taille du fichier ou l'en-tête HTTPContent-Length
). Cela permet d'exclure les données de bande-annonce non lisibles (par exemple, l'illustration de l'album) des calculs de recherche de débit constant, ce qui rend les recherches plus précises (numéro 1376). - MP3: utilisez le nombre de trames et d'autres données dans une trame
Info
(le cas échéant) pour calculer un débit moyen pour la recherche de débit constant, plutôt que d'extrapoler à partir du débit de la trame après la trameInfo
, qui peut être artificiellement faible, par exemple la tramePCUT
(numéro 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 hors charge, réinitialisez le champ de suivi de la finalisation du flux dans
DefaultAudioSink
avant d'appelerAudioTrack.stop()
afin queAudioTrack.StreamEventCallback#onPresentationEnded
identifie correctement quand 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, stéréo vers mono) peuvent entraîner l'émission d'une exception par le processeur (#1352). - Implémentez
MediaCodecAudioRenderer.getDurationToProgressUs()
afin qu'ExoPlayer planifie dynamiquement sa boucle de travail principale au moment où le MediaCodecAudioRenderer peut progresser.
- Vidéo :
- Correction d'un problème qui entraînait l'arrivée de
Listener.onRenderedFirstFrame()
trop tôt 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 de l'exception de codec pouvant être causée par l'activation d'un moteur de rendu vidéo pendant la lecture.
- Correction d'un problème qui entraînait l'arrivée de
- Texte :
- Correction d'un problème qui entraînait le saut 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 pour qu'il se produise lors de l'extraction plutôt que lors du rendu (voir 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 à la fois
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
etTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Consultez la documentation sur la personnalisation pour savoir comment connecter ces composants à une instanceExoPlayer
. Ces méthodes (et toute 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émenterSubtitleParser
à la place (etSubtitleParser.Factory
au lieu deSubtitleDecoderFactory
).
- Cette modification peut être remplacée en appelant à la fois
- 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: ignorez la valeur
rowLock
. La spécification CEA-708-E S-2023 indique querowLock
etcolumnLock
doivent être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la prise en charge decolumnLock
n'est pas implémentée, il est donc supposé qu'elle est toujours fausse).- Cette modification était initialement incluse dans les notes de version
1.3.0-alpha01
, mais elle a été accidentellement annulée avant la version1.3.0-rc01
. Ce problème est maintenant résolu.
- Cette modification était initialement incluse dans les notes de version
- CEA-708: Éviter l'ajout de lignes vides en double par la gestion naïve de la commande "set pen location" par ExoPlayer (#1315).
- Correction d'un
IllegalArgumentException
à partir deLegacySubtitleUtil
lorsqu'un extrait de sous-titres WebVTT ne contient aucun signal, par exemple dans le cadre d'un flux DASH (#1516).
- Métadonnées :
- Correction du mappage des tags de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (
soal
), "artist sort" (soar
) et "album artist sort" (soaa
) étaient mal mappés sur les tags ID3TSO2
,TSOA
etTSOP
(numéro 1302). - Correction de la lecture des balises numériques MP4 (/iTunes)
gnre
(genre) ettmpo
(tempo) lorsque la valeur est supérieure à un octet. - Propagation du frame
TCON
ID3 versMediaMetadata.genre
(#1305).
- Correction du mappage des tags de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (
- Image :
- Prise en charge des grilles de vignettes DASH non carrées (numéro 1300).
- Ajout de la prise en charge d'AVIF pour les API 34 et versions ultérieures.
- Autorisez
null
en tant que paramètre pourExoPlayer.setImageOutput()
afin de supprimer unImageOutput
précédemment défini.
- DataSource :
- Implémentation de la prise en charge des URI de ressources brutes
android.resource://package/id
, oùpackage
est différent du package de l'application actuelle. Cette méthode ne fonctionnait pas auparavant, mais elle est plus efficace pour accéder aux ressources d'un autre package que par nom. - Vérifiez systématiquement que
url
n'est pas nul dans les constructeursDataSpec
. Ce paramètre a déjà été annoté comme non nul. - Autorisez
ByteArrayDataSource
à résoudre un URI en tableau d'octets lors deopen()
, au lieu d'être encodé en dur lors de la création (#1405).
- Implémentation de la prise en charge des URI de ressources brutes
- DRM :
- Autorisez le paramétrage d'un
LoadErrorHandlingPolicy
surDefaultDrmSessionManagerProvider
(#1271).
- Autorisez le paramétrage d'un
- Effet :
- Prise en charge de plusieurs changements de vitesse dans le même
EditedMediaItem
ouComposition
dansSpeedChangeEffect
. - Prise en charge de la sortie HLG et PQ à partir d'une entrée bitmap ultra HDR.
- Ajout de la prise en charge d'EGL_GL_COLORSPACE_BT2020_HLG_EXT, qui améliore la sortie de surface HLG dans ExoPlayer.setVideoEffect et la SurfaceView de débogage de Transformer.
- Mettez à jour l'implémentation de la matrice de superposition pour la rendre cohérente avec la documentation en inversant les valeurs x et y appliquées dans
setOverlayFrameAnchor()
. Si vous utilisezOverlaySettings.Builder.setOverlayFrameAnchor()
, inversez leurs valeurs x et y en les multipliant par-1
. - Correction d'un bug qui provoquait le plantage de
TimestampWrapper
lorsqu'il était utilisé avecExoPlayer#setVideoEffects
(#821). - Modification de l'espace de travail de couleur SDR par défaut des couleurs linéaires en vidéo SDR électrique BT 709. Fournissez également une troisième option pour conserver l'espace colorimétrique d'origine.
- Autorisez la définition d'une ordre z indéterminé pour les EditedMediaItemSequences (#1055).
- Maintenez une plage de luminance cohérente entre les différents éléments de contenu HDR (utilise la plage HLG).
- Ajout de la compatibilité avec les superpositions Ultra HDR (bitmap) sur les contenus HDR.
- Autorisez les effets
SeparableConvolution
à être utilisés 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 compatibilité HDR pour
TextOverlay
. La luminosité de la superposition de texte peut être ajustée avecOverlaySettings.Builder.setHdrLuminanceMultiplier()
.
- Prise en charge de plusieurs changements de vitesse dans le même
- Extension IMA :
- Promotion de l'API requise pour que les applications diffusent des flux publicitaires d'insertion dynamique d'annonces en version stable.
- Ajout de
replaceAdTagParameters(Map <String, String>)
àImaServerSideAdInsertionMediaSource.AdLoader
, ce qui permet de remplacer les paramètres de la balise publicitaire au moment de l'exécution. - Correction d'un bug où
VideoAdPlayer.VideoAdPlayerCallback.onError()
n'était pas appelé 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'annoncesdata://
(numéro 700).
- Session :
- Remplacez la valeur par défaut
CommandButton.enabled
partrue
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 demander si le service doit être arrêté dansonTaskRemoved()
(#1219). - Ajoutez
MediaSessionService.pauseAllPlayersAndStopSelf()
, qui permet de mettre en pause la lecture de toutes les sessions et d'appelerstopSelf()
pour mettre fin au cycle de vie deMediaSessionService
. - Remplacez
MediaSessionService.onTaskRemoved(Intent)
pour fournir une implémentation par défaut sécurisée qui maintient le service en cours d'exécution au premier plan si la lecture est en cours ou arrête le service dans le cas contraire. - Masquage de la barre de défilement 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 la plate-forme (1256).
- Alignez la conversion de
MediaMetadata
surMediaDescriptionCompat
pour utiliser la même logique et le même ordre de préférence lors de la sélection des propriétés de métadonnées que dans media1. - Ajout de
MediaSession.sendError()
qui permet d'envoyer des erreurs non fatales au contrôleur Media3. Lorsque vous utilisez le contrôleur de notifications (voirMediaSession.getMediaNotificationControllerInfo()
), l'erreur personnalisée permet de mettre à jour l'PlaybackState
de la session de la plate-forme en état d'erreur avec les informations d'erreur données (numéro 543). - Ajoutez
MediaSession.Callback.onPlayerInteractionFinished()
pour informer les sessions lorsqu'une série d'interactions de joueur à partir d'un contrôleur spécifique est terminée. - Ajoutez
SessionError
et utilisez-le dansSessionResult
etLibraryResult
au lieu du code d'erreur pour fournir plus d'informations sur l'erreur et sur la façon de la résoudre, le cas échéant. - Publiez le code de l'application de test du contrôleur media3 qui peut être utilisé pour tester les interactions avec les applications qui publient une session multimédia.
- Propagez les éléments supplémentaires transmis à
MediaSession[Builder].setSessionExtras()
de media3 versPlaybackStateCompat.getExtras()
d'un contrôleur media1. - Mappez les erreurs fatales et non fatales vers et depuis la session de la plate-forme. Un
PlaybackException
est mappé sur un état d'erreur fatale de l'PlaybackStateCompat
. UnSessionError
envoyé au contrôleur de notification multimédia avecMediaSession.sendError(ControllerInfo, SessionError)
est mappé sur une erreur non fatale dansPlaybackStateCompat
, ce qui signifie que le code et le message d'erreur sont définis, mais que l'état de la session de la plate-forme reste différent deSTATE_ERROR
. - Autorisez l'activité de la session à être définie 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
avecAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Une fois connecté, l'activité de la session peut être mise à jour avecMediaSession.setSessionActivity(ControllerInfo, PendingIntent)
. - Amélioration de la réplication des erreurs des appels à
MediaLibrarySession.Callback
. La réplication des erreurs peut désormais être configurée à l'aide deMediaLibrarySession.Builder.setLibraryErrorReplicationMode()
pour choisir le type d'erreur ou désactiver la réplication des erreurs, qui est activée par défaut.
- Remplacez la valeur par défaut
- Interface utilisateur :
- Ajout de la prise en charge de l'affichage d'images dans
PlayerView
lorsqu'il est connecté à unExoPlayer
(#1144). - Ajout de la personnalisation de diverses icônes dans
PlayerControlView
via des attributs XML pour autoriser différents drawables par instancePlayerView
, plutôt que des forçages globaux (#1200). - Contournement d'un bug de plate-forme qui entraînait une vidéo étirée/recadrée lors de l'utilisation de
SurfaceView
dans unAndroidView
Compose avec l'API 34 (#1237).
- Ajout de la prise en charge de l'affichage d'images dans
- Téléchargements :
- Assurez-vous que
DownloadHelper
ne fuit pas d'instancesRenderer
non publiées, ce qui peut entraîner le plantage d'une application avecIllegalStateException: Too many receivers, total of 1000, registered for pid
(n° 1224).
- Assurez-vous que
- Extension Cronet :
- Correction de
SocketTimeoutException
dansCronetDataSource
. Dans certaines versions de Chromet, la requête fournie par le rappel n'est pas toujours la même. Le rappel ne se termine pas et la requête expire (https://issuetracker.google.com/328442628).
- Correction de
- Extension HLS :
- Correction d'un bug qui entraînait la délégation d'échantillons EMSG en attente d'une discontinuité dans
HlsSampleStreamWrapper
avec un décalage incorrect, ce qui provoquait unIndexOutOfBoundsException
ou unIllegalArgumentException
(#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
etIllegalArgumentException
lorsque l'activation de CMCD pour HLS avec des segments d'initialisation était effectuée. - Correction d'un bug qui empêchait la mise à jour des playlists en cours de lecture autres que la principale lors de la lecture en direct (#1240).
- Correction d'un bug qui entraînait l'
ArrayIndexOutOfBoundsException
lorsque l'activation de CMCD pour les diffusions en direct HLS (n° 1395).
- Correction d'un bug qui entraînait la délégation d'échantillons EMSG en attente d'une discontinuité dans
- Extension DASH :
- Extension Cast :
- Correction d'un bug qui convertissait le titre de l'album de l'
MediaQueueItem
en artiste dans l'élément multimédia Media3 (#1255).
- Correction d'un bug qui convertissait le titre de l'album de l'
- Utilitaires de test :
- Implémentez
onInit()
etonRelease()
dansFakeRenderer
. - Modifiez les méthodes
TestPlayerRunHelper.runUntil()/playUntil()
pour qu'elles échouent en cas d'erreurs non fatales (par exemple, celles signalées àAnalyticsListener.onVideoCodecError()
). Utilisez la nouvelle chaîne de méthodesTestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX()
pour désactiver ce comportement.
- Implémentez
- Application de démonstration :
- Utilisez
DefaultPreloadManager
dans l'application de démonstration de messages courts. - Permet de définir le mode de répétition avec des arguments
Intent
à partir de la ligne de commande (numéro 1266). - Utilisez
HttpEngineDataSource
commeHttpDataSource
lorsque l'appareil est compatible.
- Utilisez
- Suppression des symboles obsolètes :
- Suppression de
CronetDataSourceFactory
. Utilisez plutôtCronetDataSource.Factory
. - Suppression de certains constructeurs
DataSpec
. UtilisezDataSpec.Builder
à la place. - Suppression de la méthode
setContentTypePredicate(Predicate)
deDefaultHttpDataSource
,OkHttpDataSource
etCronetDataSource
. Utilisez plutôt la méthode équivalente sur chaqueXXXDataSource.Factory
. - Suppression des constructeurs
OkHttpDataSource
etOkHttpDataSourceFactory
. UtilisezOkHttpDataSource.Factory
à la place. - Supprimez
PlayerMessage.setHandler(Handler)
. Utilisez plutôtsetLooper(Looper)
. - Supprimez le champ
Timeline.Window.isLive
. Utilisez plutôt la méthodeisLive()
. - Suppression des constructeurs
DefaultHttpDataSource
. UtilisezDefaultHttpDataSource.Factory
à la place. - Suppression de
DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS
. UtilisezDashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS
à la place. - Supprimez
MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean)
. UtilisezMediaCodecInfo.canReuseCodec(Format, Format)
à la place. - Suppression des méthodes
DrmSessionManager.DUMMY
etgetDummyDrmSessionManager()
. UtilisezDrmSessionManager.DRM_UNSUPPORTED
à la place. - Supprimez
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
etVideoRendererEventListener.onVideoInputFormatChanged(Format)
. Utilisez plutôt les surcharges qui acceptent unDecoderReuseEvaluation
. - Suppression de l'IntDef
RendererSupport.FormatSupport
et des constantesFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
etFORMAT_UNSUPPORTED_TYPE
. Utilisez plutôt l'équivalent IntDef et les constantes dansandroidx.media3.common.C
(par exemple,C.FORMAT_HANDLED
). - Supprimez l'interface
Bundleable
. Cela inclut la suppression de tous les champs de constanteBundleable.Creator<Foo> CREATOR
. Les appelants doivent plutôt utiliser les méthodesBundle toBundle()
etstatic Foo fromBundle(Bundle)
sur chaque type.
- Suppression de
Version 1.4.0-rc01
10 juillet 2024
Utilisez la version stable 1.4.0.
Version 1.4.0-beta01
26 juin 2024
Utilisez la version stable 1.4.0.
Version 1.4.0-alpha02
7 juin 2024
Utilisez la version stable 1.4.0.
Version 1.4.0-alpha01
17 avril 2024
Utilisez la version stable 1.4.0.
Version 1.3.0
Version 1.3.1
11 avril 2024
Publication d'androidx.media3:media3-*:1.3.1
.
La version 1.3.1 contient ces commits.
- Bibliothèque commune :
- Ajoutez
Format.labels
pour autoriser des libellés localisés ou d'autres libellés alternatifs.
- Ajoutez
- ExoPlayer :
- Correction d'un problème qui empêchait
PreloadMediaPeriod
de conserver les flux lorsqu'il était préchargé à nouveau. - Appliquez le
TrackSelectionResult
correspondant approprié à la période de lecture lors de la sélection de la piste. - Démarrez les moteurs de rendu activés en amont uniquement 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
-keepclasseswithmembers
de ProGuard pourDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Correction d'un problème qui empêchait
- Transformateur :
- Ajout d'une solution de contournement pour l'exception générée en raison du fait que
MediaMuxer
n'est pas compatible avec les codes temporels de présentation négatifs avant l'API 30.
- Ajout d'une solution de contournement pour l'exception générée en raison du fait que
- Sélection de la piste :
DefaultTrackSelector
: privilégiez les pistes vidéo avec un débit d'images "raisonnable" (>=10 images/s) à celles dont le débit d'images est inférieur ou non défini. Cela garantit que le lecteur sélectionne la piste vidéo "réelle" dans les fichiers MP4 extraits de photos animées pouvant contenir deux pistes HEVC, l'une ayant une résolution plus élevée, mais un nombre très faible de frames (#1051).
- Extracteurs :
- Correction d'un problème qui empêchait le remplissage de sauter lors de la lecture de blocs de taille impaire à partir de fichiers WAV (#1117).
- MP3: renseignez
Format.averageBitrate
à partir de cadres de métadonnées tels queXING
etVBRI
. - MPEG-TS: annulez une modification visant à s'assurer que le dernier frame est affiché en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (7909). En effet, ce changement entraîne de nouveaux problèmes avec les flux HLS I-frame uniquement (#1150) et les flux HLS H.262 (#1126).
- Audio :
- Autorisez la récupération du moteur de rendu en désactivant le transfert si l'initialisation de la piste audio échoue en mode transfert.
- Vidéo :
- Ajout d'une solution de contournement pour un problème d'appareil sur la Galaxy Tab S7 FE, Chromecast avec Google TV et le Lenovo M10 FHD Plus, qui entraîne la mise en surbrillance des flux H265 à 60 fps comme non compatibles
- Ajout d'une solution de contournement qui garantit que le premier frame est toujours affiché lors du tunnelage, même si l'appareil ne le fait pas automatiquement, comme l'exige l'API (1169). (#966)
- Correction d'un problème où la gestion des informations de couleur HDR provoque un dysfonctionnement du codec et empêche les changements de format adaptatifs pour les pistes vidéo SDR (#1158).
- Texte :
- WebVTT: empêche les repères directement consécutifs de créer des instances
CuesWithTiming
supplémentaires factices à partir deWebvttParser.parse
(#1177).
- WebVTT: empêche les repères directement consécutifs de créer des instances
- DRM :
- Contournement d'une
NoSuchMethodError
pouvant être générée par le frameworkMediaDrm
au lieu deResourceBusyException
ouNotProvisionedException
sur certains appareils Android 14 (#1145).
- Contournement d'une
- Effet :
- Amélioration de la mappage des tons PQ vers SDR en convertissant les espaces colorimétriques.
- Session :
- Interface utilisateur :
- Inclure le nom de la langue de la piste audio en cas de non-identification d'un nom à afficher par
Locale
(#988).
- Inclure le nom de la langue de la piste audio en cas de non-identification d'un nom à afficher par
- Extension DASH :
- Remplissage de tous les éléments
Label
du fichier manifeste dansFormat.labels
(#1054).
- Remplissage de tous les éléments
- Extension RTSP :
- Ignorance des valeurs d'informations de session vides (i-tags) lors de l'analyse SDP (#1087).
- Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Désactivez l'extension MIDI en tant que dépendance locale par défaut, car elle nécessite la configuration d'un dépôt Maven supplémentaire. Les utilisateurs qui ont besoin de ce module à partir d'une dépendance locale peuvent le réactiver.
Version 1.3.0
6 mars 2024
Publication d'androidx.media3:media3-*:1.3.0
.
La version 1.3.0 contient ces commits.
- Bibliothèque commune :
- Implémentation de la prise en charge des URI de ressources brutes
android.resource://package/[type/]name
oùpackage
est différent du package de l'application actuelle. Cette fonctionnalité a toujours été documentée comme fonctionnelle, mais elle n'a pas été implémentée correctement jusqu'à présent. - Normalisez les types MIME définis par le code de l'application ou lus à partir de supports multimédias pour qu'ils soient entièrement en minuscules.
- Définissez des annonces avec un
MediaItem
complet au lieu d'un seulUri
dansAdPlaybackState
. - Augmentez
minSdk
à 19 (Android KitKat). Cette approche est alignée sur toutes les autres bibliothèques AndroidX et est nécessaire pour passer aux dernières versions de nos dépendances AndroidX. - Renseignez à la fois
artworkUri
etartworkData
dansMediaMetadata.Builder.populate(MediaMetadata)
lorsqu'au moins l'un d'eux n'est pas nul (#964).
- Implémentation de la prise en charge des URI de ressources brutes
- ExoPlayer :
- Ajout de
PreloadMediaSource
etPreloadMediaPeriod
, qui permettent aux applications de précharger une source multimédia de contenu à une position de début spécifique avant la lecture.PreloadMediaSource
se charge de préparer la source multimédia de contenu pour recevoirTimeline
, de préparer et de mettre en cache la période à la position de début donnée, de sélectionner les pistes et de charger les données multimédias pour la période. Les applications contrôlent la progression du préchargement en implémentantPreloadMediaSource.PreloadControl
et en définissant la source préchargée sur le lecteur pour la lecture. - Ajout de
ExoPlayer.setImageOutput
qui permet aux applications de définirImageRenderer.ImageOutput
. DefaultRenderersFactory
fournit désormais unImageRenderer
au lecteur par défaut avecImageOutput
etImageDecoder.Factory.DEFAULT
nuls.- Émission d'un é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 activer cette fonctionnalité à l'aide de
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Prise en charge des sources multimédias adaptatives avec
PreloadMediaSource
. - Implémentez
HttpEngineDataSource
, unHttpDataSource
à l'aide de l'API HttpEngine. - Empêchez la sous-classification de
CompositeSequenceableLoader
. Ce composant a été rendu extensible, mais n'a jamais été sous-classé dans la bibliothèque. Les personnalisations peuvent être effectuées en encapsulant une instance à l'aide du modèle de décorateur et en implémentant unCompositeSequenceableLoaderFactory
personnalisé. - Correction d'un problème qui entraînait l'effacement des métadonnées de cet élément lorsque la même heure était répétée (n° 1007).
- Renommez les méthodes
experimentalSetSubtitleParserFactory
surBundledChunkExtractor.Factory
etDefaultHlsExtractorFactory
ensetSubtitleParserFactory
et n'autorisez pas la transmission denull
. Utilisez les nouvelles méthodesexperimentalParseSubtitlesDuringExtraction(boolean)
pour contrôler le comportement d'analyse. - Ajout de la prise en charge de la personnalisation de la
SubtitleParser.Factory
utilisée lors de l'extraction. Vous pouvez le faire avecMediaSource.Factory.setSubtitleParserFactory()
. - Ajoute un préfixe de source à tous les champs
Format.id
générés à partir deMergingMediaSource
. Cela permet d'identifier la source qui a généré unFormat
(numéro 883). - Correction de l'expression régulière utilisée pour valider les noms de clés CMCD (Common Media Client Data) personnalisés en la modifiant pour qu'elle ne vérifie que les traits d'union (#1028).
- Arrêtez le double codage des paramètres de requête CMCD (#1075).
- Ajout de
- Transformateur :
- Ajout de la possibilité d'aplatir les vidéos au ralenti H.265/HEVC SEF.
- Amélioration de la vitesse de transcodage, en particulier pour les modifications de type "Supprimer la vidéo".
- Ajout d'une API pour s'assurer que le fichier de sortie commence sur un frame vidéo. Cela peut rendre la sortie des opérations de recadrage plus compatible avec les implémentations de lecteurs qui n'affichent pas le premier frame vidéo avant son code temporel de présentation (#829).
- Ajout de la prise en charge de l'optimisation des opérations de recadrage MP4 d'un seul composant.
- Ajout de la prise en charge pour vous assurer qu'un frame vidéo contient le premier code temporel dans le fichier de sortie. Correction des fichiers de sortie commençant par un cadre noir sur les lecteurs basés sur iOS (829).
- Sélection de la piste :
- Ajoutez
DefaultTrackSelector.selectImageTrack
pour activer la sélection de la piste d'image. - Ajoutez
TrackSelectionParameters.isPrioritizeImageOverVideoEnabled
pour déterminer si une piste d'image doit être sélectionnée si une piste d'image et une piste vidéo sont disponibles. La valeur par défaut estfalse
, ce qui signifie que la sélection d'une piste vidéo est prioritaire.
- Ajoutez
- Extracteurs :
- Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs
ColorInfo.colorSpace
,ColorInfo.colorTransfer
etColorInfo.colorRange
(#692). - MP3: recherchez des fichiers avec un en-tête
Info
(l'équivalent CBR de l'en-têteXing
) à l'aide du débit binaire constant (CBR). Auparavant, nous utilisions la table de recherche de l'en-têteInfo
, mais cela entraîne une recherche moins précise que si nous l'ignorons et supposons que le fichier est CBR. - MPEG2-TS: ajout de la prise en charge de DTS, DTS-LBR et DTS:X Profile2 (#275).
- Extraction des types audio à partir des descripteurs TS et mappage sur des indicateurs de rôle, ce qui permet aux utilisateurs de faire des sélections de pistes audio plus éclairées (#973).
- Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs
- Audio :
- Amélioration de l'algorithme de saut de silence avec une montée en puissance du volume fluide. Maintien d'un silence minimal et de durées de silence plus naturelles (numéro 7423).
- Enregistrement plus déterministe du silence ignoré (#1035).
- Vidéo :
- Modifiez le constructeur
MediaCodecVideoRenderer
qui utilise un argumentVideoFrameProcessor.Factory
et remplacez-le par un constructeur qui utilise un argumentVideoSinkProvider
. Les applications qui souhaitent injecter unVideoFrameProcessor.Factory
personnalisé peuvent instancier unCompositingVideoSinkProvider
qui utilise leVideoFrameProcessor.Factory
personnalisé et transmettre le fournisseur de sink vidéo àMediaCodecVideoRenderer
.
- Modifiez le constructeur
- Texte :
- Correction de la sérialisation des repères bitmap pour résoudre l'erreur
Tried to marshall a Parcel that contained Binder objects
lors de l'utilisation deDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignorez la valeur
rowLock
. La spécification CEA-708-E S-2023 indique querowLock
etcolumnLock
doivent être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la prise en charge decolumnLock
n'est pas implémentée, il est donc supposé qu'elle est toujours fausse).
- Correction de la sérialisation des repères bitmap pour résoudre l'erreur
- Image :
- Ajout de la prise en charge des miniatures DASH. Les images de la grille sont recadrées et des miniatures individuelles sont fournies pour
ImageOutput
à proximité de leurs heures de présentation.
- Ajout de la prise en charge des miniatures DASH. Les images de la grille sont recadrées et des miniatures individuelles sont fournies pour
- DRM :
- Par défaut, lisez immédiatement les échantillons non chiffrés de "lead clair" dans le contenu DRM, même si les clés des échantillons chiffrés ultérieurs ne sont pas encore prêtes. Cela peut entraîner des blocages en cours de lecture si les clés ne sont toujours pas prêtes lorsque la position de lecture atteint les échantillons chiffrés (mais auparavant, la lecture n'aurait pas commencé du tout à ce stade). Ce comportement peut être désactivé avec
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
ouDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Par défaut, lisez immédiatement les échantillons non chiffrés de "lead clair" dans le contenu DRM, même si les clés des échantillons chiffrés ultérieurs ne sont pas encore prêtes. Cela peut entraîner des blocages en cours de lecture si les clés ne sont toujours pas prêtes lorsque la position de lecture atteint les échantillons chiffrés (mais auparavant, la lecture n'aurait pas commencé du tout à ce stade). Ce comportement peut être désactivé avec
- Extension IMA :
- Correction du problème empêchant la lecture des annonces DASH et HLS sans l'extension de fichier appropriée.
- Session :
- Désactivation de la détection du double-clic 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 multimédias et les sessions. - Ajout d'un constructeur à
MediaLibrarySession.Builder
qui n'accepte qu'unContext
au lieu d'unMediaLibraryService
.
- Extension HLS :
- Réduction de la visibilité de
HlsMediaPeriod
à "privée pour le paquet". Ce type ne doit pas dépendre directement de l'extérieur du package HLS. - Résolution plus efficace des recherches au début d'un segment (#1031).
- Réduction de la visibilité de
- Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Décodeur MIDI: ignore 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 qu'il puisse ajouter des assertions et d'autres actions.
- Ne mettez pas la lecture en pause dans
- Application de démonstration :
- Ajoutez un module de démonstration de format court pour présenter l'utilisation de
PreloadMediaSource
avec le cas d'utilisation des contenus courts.
- Ajoutez un module de démonstration de format court pour présenter l'utilisation de
Version 1.3.0-rc01
22 février 2024
Utilisez la version stable 1.3.0.
Version 1.3.0-beta01
7 février 2024
Utilisez la version stable 1.3.0.
Version 1.3.0-alpha01
15 janvier 2024
Utilisez la version stable 1.3.0.
Version 1.2.0
Version 1.2.1
9 janvier 2024
- ExoPlayer :
- Correction du problème lors duquel les recherches manuelles en dehors de la plage
LiveConfiguration.min/maxOffset
continuaient d'ajuster le décalage surmin/maxOffset
. - Correction du problème de mise en page des canaux OPUS et VORBIS incorrecte pour les canaux 3, 5, 6, 7 et 8 (8396).
- Correction d'un problème qui empêchait la diffusion en direct de démarrer à sa position par défaut après une recherche de zéro (#9347).
- Correction du problème où de nouvelles instances de
CmcdData.Factory
recevaient des valeurs négatives pourbufferedDurationUs
à partir de sources de blocs, ce qui entraînait uneIllegalArgumentException
(#888).
- Correction du problème lors duquel les recherches manuelles en dehors de la plage
- Transformateur :
- Correction d'un problème qui entraînait l'émission d'une exception de l'encodeur au moment de la configuration en raison de la définition d'un taux de fonctionnement élevé.
- Extracteurs :
- Marquez les pistes HEVC secondaires (non lisibles) dans les photos animées JPEG comme
ROLE_FLAG_ALTERNATE
pour éviter qu'elles ne soient automatiquement sélectionnées pour la lecture en raison de leur résolution plus élevée. - Correction de la détection incorrecte des images clés pour les flux TS H264 (#864).
- Correction de l'estimation de la durée des flux TS de plus de 47 721 secondes (#855).
- Marquez les pistes HEVC secondaires (non lisibles) dans les photos animées JPEG comme
- Audio :
- Correction de la gestion de l'EOS pour
SilenceSkippingAudioProcessor
lorsqu'il est appelé plusieurs fois (#712).
- Correction de la gestion de l'EOS pour
- Vidéo :
- Ajout d'un correctif pour un problème d'appareil sur la Galaxy Tab S7 FE, le Chromecast avec Google TV et le Lenovo M10 FHD Plus, qui entraîne la mise en surbrillance des flux AVC 60 FPS comme non compatibles (#693).
- Métadonnées :
- Correction d'un bug où
MediaMetadata
n'était renseigné que depuis des commentaires Vorbis avec des touches majuscules (#876). - Capturez
OutOfMemoryError
lors de l'analyse de très grands cadres ID3, ce qui signifie que la lecture peut se poursuivre sans les informations de balise au lieu de l'échec complet de la lecture.
- Correction d'un bug où
- DRM :
- Extension du correctif pour l'URL de licence
https://default.url
ClearKey factice à l'API 33 et versions ultérieures (auparavant, le correctif ne s'appliquait qu'à l'API 33 exactement) (numéro 837). - Correction de
ERROR_DRM_SESSION_NOT_OPENED
lors du passage du contenu chiffré au contenu clair sans surface associée au lecteur. L'erreur est due à une utilisation incorrecte d'un décodeur sécurisé pour lire le contenu clair.
- Extension du correctif pour l'URL de licence
- Session :
- Placez les clés et valeurs personnalisées dans
MediaMetadataCompat
àMediaMetadata.extras
etMediaMetadata.extras
àMediaMetadataCompat
(#756, #802). - Correction de la diffusion de
notifyChildrenChanged
pour les anciens contrôleurs (#644). - Correction d'un bug qui entraînait un plantage sur certains appareils lorsque l'on définissait une valeur négative pour un minuteur
setWhen
désactivé de la notification (numéro 903). - Correction de
IllegalStateException
lorsque le contrôleur de notification multimédia n'a pas terminé la connexion lorsque la première mise à jour de la notification est demandée (numéro 917).
- Placez les clés et valeurs personnalisées dans
- Interface utilisateur :
- Correction d'un problème pour lequel les boutons de lecture et de retour en arrière ne sont pas visibles lorsqu'ils sont utilisés avec Material Design dans un BottomSheetDialogFragment (#511).
- Correction d'un problème qui entraînait un mauvais alignement des chiffres sur le bouton d'avance rapide de
PlayerControlView
(#547).
- Extension DASH :
- Analyse "f800" comme nombre de canaux de 5 pour Dolby dans le fichier manifeste DASH (#688).
- Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Extension Cast :
- Nettoyez la création d'un
Timeline
pour éviter que l'application ne plante lorsque le chargement de contenu multimédia échoue sur l'appareil de diffusion (n° 708).
- Nettoyez la création d'un
Version 1.2.0
15 novembre 2023
- Bibliothèque commune :
- Ajoutez un paramètre
@Nullable Throwable
aux méthodes de l'interfaceLog.Logger
. Le paramètremessage
de ces méthodes ne contient plus aucune information sur leThrowable
transmis aux méthodesLog.{d,i,w,e}()
. Les implémentations devront donc ajouter manuellement ces informations si elles le souhaitent (éventuellement à l'aide deLogger.appendThrowableString(String, Throwable)
). - Résolution du problème de compatibilité Kotlin dans lequel 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
etSimpleDecoder
(#6792). - Modification du comportement de l'UI et des notifications par défaut dans
Util.shouldShowPlayButton
pour afficher un bouton "Lecture" lorsque la lecture est temporairement supprimée (par exemple, en raison d'une perte temporaire de la sélection audio). L'ancien comportement peut être conservé en utilisantPlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
ouMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Mise à niveau de
androidx.annotation:annotation-experimental
vers1.3.1
pour corriger le problème https://issuetracker.google.com/251172715. - Déplacez
ExoPlayer.setAudioAttributes
vers l'interfacePlayer
.
- Ajoutez un paramètre
- ExoPlayer :
- Correction des problèmes de recherche dans les flux AC4 causés par l'absence d'identification correcte des échantillons de décodage uniquement (#11000).
- Ajout de la suppression de la lecture sur les périphériques de sortie audio inappropriés (par exemple, le haut-parleur intégré sur les appareils Wear OS) lorsque cette fonctionnalité est activée via
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. La raison de la suppression de la lecture sera mise à jour en tant quePlayer.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 sera supprimée lorsqu'une sortie appropriée sera connectée. - Ajoutez
MediaSource.canUpdateMediaItem
etMediaSource.updateMediaItem
pour accepter les mises à jourMediaItem
après la création viaPlayer.replaceMediaItem(s)
. - Autorisez les mises à jour
MediaItem
pour toutes les classesMediaSource
fournies par la bibliothèque viaPlayer.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 dansTrackOutput
en tant qu'échantillon. - Amélioration de la méthode
SequenceableLoader.continueLoading(long)
dans l'interfaceSequenceableLoader
pourSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contient des paramètres supplémentaires, y comprisplaybackSpeed
etlastRebufferRealtimeMs
en plus deplaybackPositionUs
existant. - Améliorez la méthode
ChunkSource.getNextChunk(long, long, List, ChunkHolder)
dans l'interfaceChunkSource
versChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder)
. - Ajout de champs supplémentaires à la journalisation des données client multimédias communes (CMCD) : famine de tampon (
bs
), échéance (dl
), débit de lecture (pr
) et démarrage (su
) (numéro 8699). - Ajout de la profondeur de bits de la luma et de la chrominance à
ColorInfo
(491) - Ajout de champs supplémentaires à la journalisation des données client multimédias communes (CMCD) : requête d'objet suivante (
nor
) et requête de plage suivante (nrr
) (#8699). - Ajout de la fonctionnalité permettant de transmettre des données CMCD (Common Media Client Data) à l'aide de paramètres de requête (numéro 553).
- Correction de
ConcurrentModificationException
dansExperimentalBandwidthMeter
(#612). - Ajoutez le paramètre
MediaPeriodId
àCompositeMediaSource.getMediaTimeForChildMediaTime
. - Prise en charge de
ClippingMediaSource
(et d'autres sources avec des décalages de période/fenêtre) dansConcatenatingMediaSource2
(#11226). - Modifiez
BaseRenderer.onStreamChanged()
pour qu'il reçoive également un argumentMediaPeriodId
.
- Transformateur :
- Analysez les données de rotation EXIF pour les entrées d'images.
- Suppression du type d'annotation
TransformationRequest.HdrMode
et des constantes associées. Utilisez plutôtComposition.HdrMode
et les constantes associées. - Simplifiez
OverlaySettings
pour résoudre les problèmes de rotation. - Modification des paramètres
frameRate
etdurationUs
deSampleConsumer.queueInputBitmap
enTimestampIterator
.
- Sélection de la piste :
- Ajoutez
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
pour autoriser ou non explicitement l'adaptation non fluide. Le comportement par défaut reste celui detrue
.
- Ajoutez
- Extracteurs :
- MPEG-TS: assurez-vous que le dernier frame est affiché 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 deprojectionPosePitch
parprojectionPoseRoll
(numéro 461). - Supprimez l'hypothèse selon laquelle les instances
Extractor
peuvent être directement inspectées avecinstanceof
. Si vous souhaitez accéder au moment de l'exécution aux détails d'implémentation d'unExtractor
, vous devez d'abord appelerExtractor.getUnderlyingInstance
. - Ajout de
BmpExtractor
. - Ajout de
WebpExtractor
. - Ajout de
HeifExtractor
. - Ajout de la compatibilité avec 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 de l'audio Vorbis au format MP4.
- Ajout de
AudioSink.getFormatOffloadSupport(Format)
qui récupère le niveau de compatibilité avec le transfert que le collecteur peut fournir pour le format via unDefaultAudioOffloadSupportProvider
. Il renvoie le nouveauAudioOffloadSupport
contenantisFormatSupported
,isGaplessSupported
etisSpeedChangeSupported
. - Ajoutez
AudioSink.setOffloadMode()
via lequel la configuration de l'exportation sur le collecteur audio est configurée. La valeur par défaut estAudioSink.OFFLOAD_MODE_DISABLED
. - Le transfert peut être activé via
setAudioOffloadPreference
dansTrackSelectionParameters
. Si la préférence définie est d'activer le transfert, que l'appareil est compatible avec le format et que la sélection de piste est une seule piste audio, le transfert audio est activé. - Si
audioOffloadModePreference
est défini surAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
ne sélectionnera qu'une piste audio et uniquement si le format de cette piste est compatible avec le transfert. Si aucune piste audio n'est compatible avec le transfert, aucune piste n'est sélectionnée. - Désactivation de la compatibilité sans coupure pour le transfert avant le niveau d'API 33 en raison d'un problème de position de lecture après la transition de piste.
- Suppression du paramètre
enableOffload
de la signature de la méthodeDefaultRenderersFactory.buildAudioSink
. - Supprimez la méthode
DefaultAudioSink.Builder.setOffloadMode
. - Supprimez la valeur intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Prise en charge des métadonnées Opus sans coupure lors de la lecture en déchargement.
- Autorisez la récupération du moteur de rendu en désactivant le transfert si l'écriture échoue lors de la première tentative (#627).
- Activez la planification de l'externalisation par défaut pour la lecture externalisée en mode audio uniquement.
- Supprimez
ExoPlayer.experimentalSetOffloadSchedulingEnabled
etAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. onExperimentalSleepingForOffloadChanged
a été renomméonSleepingForOffloadChanged
etonExperimentalOffloadedPlayback
onOffloadedPlayback
.- Déplacez les interfaces et définitions
TrackSelectionParameters
liées au mode de transfert audio vers une classeAudioOffloadPreferences
interne. - Ajoutez des rappels
onAudioTrackInitialized
etonAudioTrackReleased
àAnalyticsListener
,AudioRendererEventListener
etAudioSink.Listener
. - Correction du problème de sous-débit du tampon audio DTS Express (#650).
- Correction d'un bug où la vérification des fonctionnalités d'E-AC3-JOC génère une exception
IllegalArgumentException
(#677).
- Ajout de la compatibilité avec le PCM big-endian 24/32 bits dans MP4 et Matroska, et analyse de l'encodage PCM pour
- Vidéo :
- Autorisez
MediaCodecVideoRenderer
à utiliser unVideoFrameProcessor.Factory
personnalisé. - Correction d'un bug qui empêchait le rendu du premier frame si le flux audio commence par des codes temporels négatifs (#291).
- Autorisez
- Texte :
- Supprimez
ExoplayerCuesDecoder
. Les pistes de texte avecsampleMimeType = application/x-media3-cues
sont désormais gérées directement parTextRenderer
sans nécessiter d'instanceSubtitleDecoder
.
- Supprimez
- Métadonnées :
MetadataDecoder.decode
ne sera plus appelé pour les exemples "décodeur uniquement", car l'implémentation doit renvoyer la valeur "null" de toute façon.
- Effet :
- Ajoutez
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
pour mettre en file d'attente l'entrée de bitmap par code temporel. - Modifiez
VideoFrameProcessor.registerInputStream()
pour qu'il ne soit pas bloquant. Les applications doivent implémenterVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Modification des paramètres
frameRate
etdurationUs
deVideoFrameProcessor.queueInputBitmap
enTimestampIterator
.
- Ajoutez
- Extension IMA :
- Correction d'un bug qui pouvait entraîner l'exception d'un flux en direct DASH multipériode qui n'était pas le premier élément d'une playlist (#571).
- Libérer StreamManager avant d'appeler
AdsLoader.destroy()
- Passage du SDK IMA vers la version 3.31.0.
- Session :
- Définissez le comportement du service de premier plan des notifications sur
FOREGROUND_SERVICE_IMMEDIATE
dansDefaultMediaNotificationProvider
(#167). - N'utilisez que
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
au-dessus de l'API 31 pour éviter les problèmes liés aux API obsolètes sur les appareils Samsung (numéro 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 renseigner la notification et la session de la plate-forme.
- Convertissez les événements de bouton multimédia reçus par
MediaSessionService.onStartCommand()
dans Media3 au lieu de les acheminer vers la session de la plate-forme, puis vers Media3. Ainsi, le contrôleur de l'appelant est toujours le contrôleur de notification multimédia, et les applications peuvent facilement reconnaître les appels provenant de la notification de la même manière à tous les niveaux d'API compatibles. - Correction d'un bug qui empêchait
MediaController.getCurrentPosition()
d'avancer lorsqu'il était connecté à une ancienneMediaSessionCompat
. - Ajoutez
MediaLibrarySession.getSubscribedControllers(mediaId)
pour plus de commodité. - Ignorez
MediaLibrarySession.Callback.onSubscribe()
pour affirmer la disponibilité de l'ID parent auquel le contrôleur s'abonne. Si l'opération réussit, l'abonnement est accepté etnotifyChildrenChanged()
est appelé immédiatement pour en informer le navigateur (numéro 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. Avec Android Auto comme contrôleur client lisant à partir de la session du framework, le boutonqueue
de l'interface utilisateur d'Android Auto ne s'affiche pas (numéro 339). - Utilisation de
DataSourceBitmapLoader
par défaut au lieu deSimpleBitmapLoader
(#271, #327). - Ajoutez
MediaSession.Callback.onMediaButtonEvent(Intent)
, qui permet aux applications de remplacer la gestion des événements par défaut des boutons multimédias.
- Définissez le comportement du service de premier plan des notifications sur
- Interface utilisateur :
- Ajoutez une implémentation
Player.Listener
pour les appareils Wear OS qui gère la suppression de la lecture en raison dePlayer.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, des écouteurs Bluetooth). L'écouteur reprendra automatiquement la lecture si un appareil approprié est connecté dans un délai configurable (par défaut, cinq minutes).
- Ajoutez une implémentation
- Téléchargements :
- Déclarez le type de service de premier plan "dataSync" pour
DownloadService
pour la compatibilité avec Android 14. Lorsque vous utilisez ce service, l'application doit également ajouterdataSync
en tant queforegroundServiceType
dans le fichier manifeste et ajouter l'autorisationFOREGROUND_SERVICE_DATA_SYNC
(numéro 11239).
- Déclarez le type de service de premier plan "dataSync" pour
- Extension HLS :
- Actualisation de la playlist en direct HLS avec un intervalle calculé à partir de l'heure de début de la dernière charge plutôt qu'à partir de l'heure de fin de la dernière charge (numéro 663).
- Extension DASH :
- Autorisez plusieurs fois le même identifiant DASH 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. Cela permet de mieux fusionner les sous-titres qui se chevauchent, y compris en résolvant le clignotement 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 erreur
IndexOutOfBoundsException
lors du retour à TCP ou un blocage de la lecture dans certaines situations. - Vérifiez l'état dans la configuration RTSP lorsque vous renvoyez 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).
- Utilisation de la valeur de délai avant expiration de la réponse de configuration RTSP dans l'intervalle de temps d'envoi des requêtes d'options RTSP de maintien de la connexion (#662).
- Correction d'une condition de concurrence pouvant entraîner une erreur
- Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Publiez le module de décodeur MIDI, qui prend en charge 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 abandonnée. - Ajoutez
Decoder.setOutputStartTimeUs
etSimpleDecoder.isAtLeastOutputStartTimeUs
pour permettre aux décodeurs de supprimer les échantillons de décodage uniquement avant l'heure de début. Il est préférable d'utiliser cette méthode à la place deBuffer.isDecodeOnly
, qui sera abandonnée. - Correction d'un bug de publication de l'artefact du décodeur MIDI dans le dépôt Maven. L'artefact est renommé
media3-exoplayer-midi
(numéro 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).
- Correction d'un bug où la désactivation d'une surface peut entraîner une exception
- Utilitaires de test :
- Rendre
TestExoPlayerBuilder
etFakeClock
compatibles avec les tests d'interface utilisateur Espresso et les tests d'interface utilisateur Compose. Cela corrige un bug qui entraînait la progression de la lecture de manière non déterministe lors des interactions avec les vues Espresso ou Compose.
- Rendre
- Suppression des symboles obsolètes :
- Supprimez
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
etTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UtilisezComposition.Builder.setHdrMode(int)
et transmettezComposition
àTransformer.start(Composition, String)
à la place. - Supprimez la méthode
DownloadNotificationHelper.buildProgressNotification
obsolète, puis utilisez une méthode non obsolète qui accepte un paramètrenotMetRequirements
à la place.
- Supprimez
Version 1.2.0-rc01
1er novembre 2023
Utilisez la version stable 1.2.0.
Version 1.2.0-beta01
19 octobre 2023
Utilisez la version stable 1.2.0.
Version 1.2.0-alpha02
29 septembre 2023
Utilisez la version stable 1.2.0.
Version 1.2.0-alpha01
17 août 2023
Utilisez la version stable 1.2.0.
Version 1.1.0
Version 1.1.1
16 août 2023
- Bibliothèque commune :
- Suppression de la dépendance
multidex
ajoutée accidentellement de tous les modules (numéro 499).
- Suppression de la dépendance
- ExoPlayer :
- Correction d'un problème dans
PlaybackStatsListener
où desPlaybackStats
indésirables sont créés après l'effacement de la playlist. - Ajout de champs supplémentaires à la journalisation des données client multimédias communes (CMCD) : 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) (numéro 8699).
- Correction d'un problème dans
- Audio :
- Correction d'un bug qui empêchait
Player.getState()
de passer àSTATE_ENDED
lors de la lecture de fichiers très courts (#538).
- Correction d'un bug qui empêchait
- Décharge audio :
- Ajoutez les pages d'en-tête d'ID Ogg et d'en-tête de commentaire au flux de données pour la lecture Opus hors charge conformément à la RFC 7845.
- Vidéo :
- H.265/HEVC: correction de l'analyse des informations sur les images de référence à court et long terme SPS.
- Texte :
- CEA-608: modification de la logique de troncation des repères pour ne prendre en compte que le texte visible. Auparavant, l'indentation et le décalage de tabulation étaient inclus lorsque la longueur de la cue était limitée à 32 caractères (ce qui était techniquement correct selon les spécifications) (numéro 11019).
- Extension IMA :
- Passage du SDK IMA vers la version 3.30.3.
- Session :
- Ajoutez une mise en page personnalisée à l'état du contrôleur et fournissez un getter pour y accéder. Lorsque la mise en page personnalisée change,
MediaController.Listener.onCustomLayoutChanged
est appelé. Les applications qui souhaitent envoyer différentes mises en page personnalisées à différents contrôleurs Media3 peuvent le faire dansMediaSession.Callback.onConnect
à l'aide d'unAcceptedResultBuilder
pour s'assurer que la mise en page personnalisée est disponible pour le contrôleur une fois la connexion établie. - Correction des cas où
MediaLibraryServiceLegacyStub
envoyait une erreur à unResult
qui ne le prenait pas en charge, ce qui produisait unUnsupportedOperationException
(numéro 78). - Correction de la façon dont
PlayerWrapper
crée unVolumeProviderCompat
en déterminantvolumeControlType
à la fois via les anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUME
etCOMMAND_SET_DEVICE_VOLUME
) et les nouvelles commandes (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
etCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (numéro 554).
- Ajoutez une mise en page personnalisée à l'état du contrôleur et fournissez un getter pour y accéder. Lorsque la mise en page personnalisée change,
Version 1.1.0
5 juillet 2023
- Bibliothèque commune :
- Ajouter un motif de suppression pour un itinéraire audio inapproprié et la lecture lorsque vous êtes prêt, modifier le motif de suppression pour une suppression trop longue. (#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
- Ajout de méthodes surchargées au lecteur qui permettent aux utilisateurs de spécifier des indicateurs de volume :
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Ajout de
Builder
pourDeviceInfo
et abandon du constructeur existant. - Ajoutez
DeviceInfo.routingControllerId
pour spécifier l'ID du contrôleur de routage pour les lectures à distance. - Ajout de
Player.replaceMediaItem(s)
en tant que raccourci pour ajouter et supprimer des éléments à la même position (#8046).
- ExoPlayer :
- Autorisez ExoPlayer à contrôler les méthodes de contrôle du volume de l'appareil uniquement si elles sont activées explicitement. Utilisez
ExoPlayer.Builder.setDeviceVolumeControlEnabled
pour accéder aux éléments suivants :getDeviceVolume()
isDeviceMuted()
setDeviceVolume(int)
etsetDeviceVolume(int, int)
increaseDeviceVolume(int)
etincreaseDeviceVolume(int, int)
decreaseDeviceVolume(int)
etdecreaseDeviceVolume(int, int)
- Ajout de
FilteringMediaSource
qui permet de filtrer les types de pistes disponibles à partir d'unMediaSource
. - Ajout de la prise en charge de l'inclusion des données client multimédias communes (CMCD) dans les requêtes sortantes des formats de streaming adaptatif DASH, HLS et SmoothStreaming. Les champs suivants,
br
,bl
,cid
,rtp
etsid
, ont été intégrés (numéro 8699). Structure et méthodes de l'API :- La journalisation CMCD est désactivée par défaut. Utilisez
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
pour l'activer. - Toutes les clés sont activées par défaut. Remplacez
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
pour filtrer les clés consignées. - Forcer
CmcdConfiguration.RequestConfig.getCustomData()
pour activer la journalisation des touches personnalisée.
- La journalisation CMCD est désactivée par défaut. Utilisez
- Ajout d'une action supplémentaire au fichier manifeste de la démonstration principale pour faciliter le démarrage de l'application de démonstration avec un fichier
*.exolist.json
personnalisé (n° 439). - Ajoutez
ExoPlayer.setVideoEffects()
pour utiliserEffect
pendant la lecture vidéo. - Mettez à jour
SampleQueue
pour stockersourceId
en tant quelong
plutôt qu'en tant queint
. Les signatures des méthodes publiquesSampleQueue.sourceId
etSampleQueue.peekSourceId
sont modifiées. - Ajoutez des paramètres aux méthodes
LoadControl
shouldStartPlayback
etonTracksSelected
qui permettent d'associer ces méthodes auMediaPeriod
approprié. - Modifiez la signature de
ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>)
en ajoutant un paramètre de chronologie contenant les périodes avec les UID utilisés comme clés dans la carte. Cela permet d'éviter les problèmes de simultanéité avec les diffusions en direct sur plusieurs périodes. - Abandon de
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
etBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. La variante des méthodes sansmediaTimeOffsetUs
peut être appelée à la place. Notez que même pour les variantes obsolètes, le décalage n'est plus ajouté àstartTimeUs
etendTimeUs
des objetsMediaLoadData
distribués par le distributeur. - Renommez
ExoTrackSelection.blacklist
enexcludeTrack
etisBlacklisted
enisTrackExcluded
. - Correction du comportement incohérent entre
ExoPlayer.setMediaItem(s)
etaddMediaItem(s)
lorsqu'ils sont appelés sur une playlist vide.
- Autorisez ExoPlayer à contrôler les méthodes de contrôle du volume de l'appareil uniquement si elles sont activées explicitement. Utilisez
- Transformateur :
- Supprimez
Transformer.Builder.setMediaSourceFactory(MediaSource.Factory)
. UtilisezExoPlayerAssetLoader.Factory(MediaSource.Factory)
etTransformer.Builder.setAssetLoaderFactory(AssetLoader.Factory)
à la place. - Supprimez
Transformer.startTransformation(MediaItem, ParcelFileDescriptor)
. - Correction d'un bug qui pouvait entraîner le blocage de la transformation (ce qui entraînait un délai avant expiration du muxeur) 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 utilitairesfindDecoder/EncoderForFormat
pour étendre la compatibilité. - Suppression de la configuration des images B dans
DefaultEncoderFactory
, car elle ne fonctionne pas sur certains appareils.
- Supprimez
- Sélection de la piste :
- Ajout de
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
, qui est désactivé par défaut. Lorsqu'il est activé,DefaultTrackSelector
déclenche une nouvelle sélection de piste lorsque les fonctionnalités du moteur de rendu ont changé.
- Ajout de
- Extracteurs :
- Audio :
- Correction d'un bug qui entraînait l'échec de certaines lectures lorsque le tunnelage est activé et que
AudioProcessors
est actif, par exemple pour le recadrage sans coupure (#10847). - Encapsulez les trames Opus dans des paquets Ogg lors des lectures directes (décharge).
- Extrapolez la position actuelle pendant le sommeil avec la planification de l'externalisation.
- Ajoutez
Renderer.release()
etAudioSink.release()
pour libérer les ressources à la fin du cycle de vie du lecteur. - Écoutez les modifications des fonctionnalités audio dans
DefaultAudioSink
. Ajoutez un paramètre obligatoirecontext
dans le constructeur deDefaultAudioSink
, avec lequelDefaultAudioSink
s'enregistrera en tant qu'écouteur deAudioCapabilitiesReceiver
et modifiera sa propriétéaudioCapabilities
lorsqu'il sera informé d'un changement de fonctionnalités. - Propagez les modifications des fonctionnalités audio via un nouvel événement
onAudioCapabilitiesChanged
dans l'interfaceAudioSink.Listener
et une nouvelle interfaceRendererCapabilities.Listener
qui déclenche des événementsonRendererCapabilitiesChanged
. - Ajoutez
ChannelMixingAudioProcessor
pour appliquer la mise à l'échelle/le mixage aux canaux audio. - Ajout d'une nouvelle valeur int
DISCARD_REASON_AUDIO_BYPASS_POSSIBLE
àDecoderDiscardReasons
pour supprimer le décodeur audio lorsque le mode de contournement est possible après la modification des fonctionnalités audio. - Ajout de la prise en charge de la lecture directe pour DTS Express et DTS:X (#335).
- Correction d'un bug qui entraînait l'échec de certaines lectures lorsque le tunnelage est activé et que
- Vidéo :
- Forcer
MediaCodecVideoRenderer
à signaler unVideoSize
avec une largeur et une hauteur de 0 lorsque le moteur de rendu est désactivé.Player.Listener.onVideoSizeChanged
est appelé en conséquence lorsquePlayer.getVideoSize()
change. Avec cette modification, la taille vidéo d'ExoPlayer avecMediaCodecVideoRenderer
a une largeur et une hauteur de 0 lorsquePlayer.getCurrentTracks
n'est pas compatible avec la vidéo ou que la taille de la piste vidéo compatible n'est pas encore déterminée.
- Forcer
- DRM :
- Réduction de la visibilité de plusieurs méthodes internes uniquement sur
DefaultDrmSession
qui ne doivent pas être appelées en dehors du package DRM :void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Réduction de la visibilité de plusieurs méthodes internes uniquement sur
- Muxeur :
- Ajout d'une bibliothèque de muxage pouvant être utilisée pour créer un fichier de conteneur MP4.
- Extension IMA :
- Activez les flux DASH en direct multipériodes pour l'insertion dynamique d'annonces. Veuillez noter que l'implémentation actuelle n'est pas encore compatible avec la recherche dans les diffusions en direct (#10912).
- Correction d'un bug qui entraînait l'insertion d'un nouveau groupe d'annonces dans les diffusions en direct, car la position calculée du contenu dans les chronologies consécutives variait légèrement.
- Session :
- Ajoutez la méthode d'assistance
MediaSession.getControllerForCurrentRequest
pour obtenir des informations sur le contrôleur qui appelle actuellement une méthodePlayer
. - Ajout de
androidx.media3.session.MediaButtonReceiver
pour permettre aux applications d'implémenter la reprise de la lecture avec des événements de bouton multimédia envoyés par, par exemple, un casque Bluetooth (#167). - Ajout d'une implémentation par défaut à
MediaSession.Callback.onAddMediaItems
pour permettre de transmettre lesMediaItems
demandés àPlayer
s'ils disposent d'unLocalConfiguration
(par exemple, un URI) (numéro 282). - Ajout des boutons de commande "Rechercher le précédent" et "Rechercher le suivant" dans la vue compacte des notifications multimédias par défaut pour Android 12 et versions antérieures (numéro 410).
- Ajout d'une implémentation par défaut à
MediaSession.Callback.onAddMediaItems
pour permettre de transmettre lesMediaItems
demandés àPlayer
s'ils disposent d'unLocalConfiguration
(par exemple, un URI) (numéro 282). - Ajout des boutons de commande "Rechercher le précédent" et "Rechercher le suivant" dans la vue compacte des notifications multimédias par défaut pour Android 12 et versions antérieures (410).
- Ajoutez la méthode d'assistance
- Interface utilisateur :
- Ajoutez les méthodes Util
shouldShowPlayButton
ethandlePlayPauseButtonAction
pour écrire des éléments d'interface utilisateur personnalisés avec un bouton de lecture/pause.
- Ajoutez les méthodes Util
- Extension RTSP :
- Extension DASH :
- Supprimez le décalage temporel multimédia de
MediaLoadData.startTimeMs
etMediaLoadData.endTimeMs
pour les flux DASH multipériodiques. - Correction d'un bug qui entraînait la génération d'une exception
IndexOutOfBoundsException
lors de la préparation à nouveau d'une source multipériode de contenu multimédia Dash en direct (#10838).
- Supprimez le décalage temporel multimédia de
- Extension HLS :
- Ajoutez
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
pour définir un délai avant expiration pour que le thread de chargement attende l'initialisation deTimestampAdjuster
. Si l'initialisation ne se termine pas avant le délai avant expiration, une exceptionPlaybackException
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).
- Ajoutez
- Utilitaires de test :
- Vérifiez si le schéma d'URI n'est pas sensible à la casse dans
DataSourceContractTest
.
- Vérifiez si le schéma d'URI n'est pas sensible à la casse dans
- Suppression des symboles obsolètes :
- Suppression des constructeurs
DefaultAudioSink
. Utilisez plutôtDefaultAudioSink.Builder
. - Supprimez
HlsMasterPlaylist
et utilisezHlsMultivariantPlaylist
à la place. - Supprimez
Player.stop(boolean)
. Utilisez plutôtPlayer.stop()
etPlayer.clearMediaItems()
(sireset
esttrue
). - Suppression de deux constructeurs
SimpleCache
obsolètes, utilisation d'un constructeur non obsolète qui utilise unDatabaseProvider
à la place pour de meilleures performances. - Suppression du constructeur
DefaultBandwidthMeter
. Utilisez plutôtDefaultBandwidthMeter.Builder
. - Suppression des constructeurs
DefaultDrmSessionManager
. Utilisez plutôtDefaultDrmSessionManager.Builder
. - Suppression de deux constructeurs
HttpDataSource.InvalidResponseCodeException
obsolètes, utilisation d'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
etDownloadHelper.forSmoothStreaming
, et utilisezDownloadHelper.forMediaItem
à la place. - Supprimez le constructeur
DownloadService
obsolète, utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètrechannelDescriptionResourceId
. - Suppression des constantes de chaîne obsolètes pour les jeux de caractères (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
etUTF16LE_NAME
). Utilisez plutôt les jeux de caractères Kotlin du packagekotlin.text
,java.nio.charset.StandardCharsets
oucom.google.common.base.Charsets
. - Supprimez le constructeur
WorkManagerScheduler
obsolète, puis utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètreContext
à la place. - Supprimez les méthodes obsolètes
createVideoSampleFormat
,createAudioSampleFormat
,createContainerFormat
etcreateSampleFormat
, qui étaient utilisées pour instancier la classeFormat
. Utilisez plutôtFormat.Builder
pour créer des instances deFormat
. - Suppression des méthodes obsolètes
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
etcopyWithVideoSize
. Utilisez plutôt les méthodesFormat.buildUpon()
et setter. - Supprimez
ExoPlayer.retry()
obsolète et utilisezprepare()
à la place. - Suppression du constructeur
DefaultTrackSelector
obsolète à zéro argument. Utilisez plutôtDefaultTrackSelector(Context)
. - Suppression du constructeur
OfflineLicenseHelper
obsolète. Utilisez plutôtOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Suppression du constructeur
DownloadManager
obsolète. Utilisez plutôt le constructeur qui accepte unExecutor
. - Suppression des constructeurs
Cue
obsolètes. Utilisez plutôtCue.Builder
. - Suppression du constructeur
OfflineLicenseHelper
obsolète. Utilisez plutôtOfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher)
. - Suppression de quatre méthodes
AnalyticsListener
obsolètes :onDecoderEnabled
, utilisez plutôtonAudioEnabled
et/ouonVideoEnabled
.onDecoderInitialized
, utilisez plutôtonAudioDecoderInitialized
et/ouonVideoDecoderInitialized
.onDecoderInputFormatChanged
, utilisez plutôtonAudioInputFormatChanged
et/ouonVideoInputFormatChanged
.onDecoderDisabled
, utilisez plutôtonAudioDisabled
et/ouonVideoDisabled
.
- Supprimez les éléments
Player.Listener.onSeekProcessed
etAnalyticsListener.onSeekProcessed
obsolètes, et utilisezonPositionDiscontinuity
avecDISCONTINUITY_REASON_SEEK
à la place. - Supprimez
ExoPlayer.setHandleWakeLock(boolean)
et utilisezsetWakeMode(int)
à la place. - Supprimez
DefaultLoadControl.Builder.createDefaultLoadControl()
obsolète et utilisezbuild()
à la place. - Supprimez
MediaItem.PlaybackProperties
obsolète et utilisezMediaItem.LocalConfiguration
à la place. Le champ obsolèteMediaItem.playbackProperties
est désormais de typeMediaItem.LocalConfiguration
.
- Suppression des constructeurs
Version 1.1.0-rc01
21 juin 2023
Utilisez la version stable 1.1.0.
Version 1.1.0-beta01
7 juin 2023
Utilisez la version stable 1.1.0.
Version 1.1.0-alpha01
10 mai 2023
Utilisez la version stable 1.1.0.
Version 1.0.0
Version 1.0.2
18 mai 2023
Publication d'androidx.media3:media3-*:1.0.2
.
Liste des commits de la version 1.0.2
Cette version correspond à la version 2.18.7 d'ExoPlayer.
Cette version contient les modifications suivantes depuis la version 1.0.1:
- Bibliothèque principale :
- Ajoutez
Buffer.isLastSample()
qui indique siBuffer
contient l'indicateurC.BUFFER_FLAG_LAST_SAMPLE
. - Correction d'un problème qui pouvait empêcher l'affichage du dernier frame si le dernier échantillon avec des frames était retiré de la file d'attente sans lire l'échantillon "fin de flux". (#11079)
- Ajoutez
- Extracteurs :
- Correction de l'analyse des SPS H.265 dans les fichiers MPEG-TS en réutilisant la logique d'analyse déjà utilisée par les extracteurs RTSP et MP4 (#303).
- Texte :
- SSA: les fichiers UTF-16 sont acceptés s'ils commencent par un ordre d'octet (numéro 319).
- Session :
- Correction d'un problème où
MediaController
ne met pas à jour ses commandes disponibles lorsqu'il est connecté à un ancienMediaSessionCompat
qui met à jour ses actions. - Correction d'un bug qui empêchait
MediaLibraryService
de renvoyer la valeur nulle pour un appel de l'UI système versCallback.onGetLibraryRoot
avecparams.isRecent == true
sur l'API 30 (numéro 355). - Correction de la fuite de mémoire de
MediaSessionService
ouMediaLibraryService
(#346). - Correction d'un bug qui pouvait entraîner l'affichage d'une erreur
IllegalStateException
par unMediaController
en cas de mise à jour combinée deTimeline
et de position dans unMediaSession
.
- Correction d'un problème où
Version 1.0.1
18 avril 2023
Publication d'androidx.media3:media3-*:1.0.1
.
Liste des commits de la version 1.0.1
Cette version correspond à la version 2.18.6 d'ExoPlayer.
- Bibliothèque principale :
- Réinitialisation du forçage de la diffusion en direct cible lors de la recherche de la position par défaut (#11051).
- Correction d'un bug qui pouvait entraîner le blocage de la lecture en raison de flux d'échantillons vides 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 une ancienneMediaSessionCompat
(290). - Ajout du transfert manquant de
MediaSession.broadcastCustomCommand
vers l'ancienneMediaControllerCompat.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'ignorement des instances
TrackSelectionOverride
envoyées à partir d'unMediaController
si elles faisaient référence à un groupe avecFormat.metadata
(numéro 296). - Correction d'un problème où
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
doit être disponible pour accéder aux métadonnées via l'ancienneMediaSessionCompat
. - Correction d'un problème où les instances
MediaSession
sur un thread en arrière-plan provoquent des plantages lorsqu'elles sont utilisées dansMediaSessionService
(#318). - Correction d'un problème où un récepteur de bouton multimédia était déclaré par la bibliothèque sans que l'application ne l'ait prévu (#314).
- Correction d'un bug qui entraînait une exception dans
- DASH :
- Correction de la gestion des chronologies de segments vides (#11014).
- RTSP :
- Réessayer avec TCP si la configuration RTSP avec UDP échoue avec l'erreur RTSP 461 UnsupportedTransport (#11069).
Version 1.0.0
22 mars 2023
Publication d'androidx.media3:media3-*:1.0.0
.
Liste des commits de la version 1.0.0
Cette version correspond à la version 2.18.5 d'ExoPlayer.
Aucune modification n'a été apportée depuis la version 1.0.0-rc02.
Version 1.0.0-rc02
2 mars 2023
Publication d'androidx.media3:media3-*:1.0.0-rc02
.
Liste des commits de la version 1.0.0-rc02
Cette version correspond à la version 2.18.4 d'ExoPlayer.
- Bibliothèque principale :
- Téléchargements :
- Rendre la différence maximale de l'heure de début de deux segments à fusionner configurable dans
SegmentDownloader
et les sous-classes (numéro 248).
- Rendre la différence maximale de l'heure de début de deux segments à fusionner configurable dans
- Audio :
- Vidéo :
- Mappez le format HEVC HDR10 sur
HEVCProfileMain10HDR10
au lieu deHEVCProfileMain10
. - Ajout d'un correctif pour un problème d'appareil sur Chromecast avec Google TV et Lenovo M10 FHD Plus, qui entraîne la mise en surbrillance des flux AVC 60 FPS comme non compatibles (numéro 10898).
- Correction des problèmes de performances de libération des images lors de la lecture de contenus multimédias avec une fréquence d'images beaucoup plus élevée que la fréquence d'actualisation de l'écran.
- Mappez le format HEVC HDR10 sur
- Google Cast :
- Correction de l'
STATE_IDLE
temporaire lors de la transition entre les éléments multimédias (#245).
- Correction de l'
- RTSP :
- Attrapez l'exception IllegalArgumentException générée lors de l'analyse des messages de réponse Describe RTSP non valides (#10971).
- Session :
- Correction d'un bug qui empêchait le bouton de lecture/pause de la notification de s'actualiser avec l'état du lecteur (#192).
- Extension IMA :
- Correction d'un bug qui empêchait le démarrage des flux DAI sans annonces, car le premier événement
LOADED
(et le seul en l'absence d'annonces) n'était pas reçu.
- Correction d'un bug qui empêchait le démarrage des flux DAI sans annonces, car le premier événement
Version 1.0.0-rc01
16 février 2023
Publication d'androidx.media3:media3-*:1.0.0-rc01
.
Liste des commits de la version 1.0.0-rc01
Cette version correspond à la version 2.18.3 d'ExoPlayer.
- Bibliothèque principale :
- Ajustement de la logique de tri du moteur de rendu pour respecter les préférences de
MediaCodecSelector
, même si un décodeur indique qu'il ne peut pas lire les contenus multimédias de manière performante. Par exemple, avec le sélecteur par défaut, un décodeur physique qui ne propose qu'une prise en charge fonctionnelle est privilégié par rapport à un décodeur logiciel qui prend entièrement en charge le format. (#10604) - Ajout d'
ExoPlayer.Builder.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)
- Ajustement de la logique de tri du moteur de rendu pour respecter les préférences de
- Extracteurs :
- Exception
ParserException
générée au lieu deNullPointerException
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)
- Exception
- 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).
- Utilisation du débit au format audio compressé pour calculer la taille minimale de la mémoire tampon pour
- 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.
- Correction de
- Métadonnées :
- Analyse de plusieurs valeurs séparées par des valeurs nulles à partir des images ID3, comme autorisé par ID3 v2.4.
- Ajout de
MediaMetadata.mediaType
pour indiquer le type de contenu ou le type de dossier décrit par les métadonnées. - Ajout de
MediaMetadata.isBrowsable
pour remplacerMediaMetadata.folderType
. Le type de dossier sera abandonné dans la prochaine version.
- DASH :
- Ajout d'une analyse complète pour les ensembles d'adaptation d'image, y compris le nombre de cartes. (#3752)
- Interface utilisateur :
- Correction du
PlayerView.setControllerVisibilityListener(PlayerControlView.VisibilityListener)
obsolète pour que les modifications de visibilité soient transmises à l'écouteur enregistré. (#229) - Correction de l'ordre des commandes du lecteur central dans
PlayerView
avec une mise en page de droite à gauche. (#227)
- Correction du
- Session :
- Ajout du
SimpleBasePlayer
abstrait afin de faciliter l'implémentation de l'interfacePlayer
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()
deDefaultMediaNotificationProvider
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 listeMediaItem
, l'index de départ et la position par session avant de passer au lecteur. (#156) - La détection du double appui est évitée pour les événements de bouton multimédia non Bluetooth. (#233)
- Renforcement de la robustesse de
QueueTimeline
en cas d'état de session hérité douteux. (#241)
- Ajout du
- Métadonnées :
- Analyse de plusieurs valeurs séparées par des valeurs nulles à partir des images ID3, comme autorisé par ID3 v2.4.
- Ajout de
MediaMetadata.mediaType
pour indiquer le type de contenu ou le type de dossier décrit par les métadonnées. - Ajout de
MediaMetadata.isBrowsable
pour remplacerMediaMetadata.folderType
. Le type de dossier sera abandonné dans la prochaine version.
- Extension Cast :
- Passage du SDK Cast à la version 21.2.0.
- Extension IMA :
- Suppression de l'écouteur du lecteur de
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.
- Suppression de l'écouteur du lecteur de
- Application de démonstration :
- Demande de l'autorisation d'envoyer des notifications de téléchargement lors de l'exécution. (#10884)
Version 1.0.0-beta03
22 novembre 2022
Publication d'androidx.media3:media3-*:1.0.0-beta03
.
Liste des commits de la version 1.0.0-beta03.
Cette version correspond à la version 2.18.2 d'ExoPlayer.
- Bibliothèque principale :
- Ajout de
ExoPlayer.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 seuleMediaSource
(#7279). - Suppression du tampon arrière avant que la lecture ne soit bloquée en raison d'une mémoire disponible insuffisante.
- Fermeture du bloc de traçage "doSomeWork" lorsque le déchargement est activé.
- Correction du problème de suivi de session lors de recherches rapides dans
PlaybackStatsListener
(#180). - Envoi du rappel
onMediaItemTransition
manquant lors de l'appel deseekToNext
ou deseekToPrevious
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).
- Ajout de
- 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.
- Applique un nombre minimal de
- Sélection de la piste :
- Privilégie d'autres pistes à Dolby Vision si l'écran ne prend pas en charge cette technologie. (#8944).
- Téléchargements :
- Correction d'une boucle infinie dans
ProgressiveDownloader
pouvant être provoquée par le téléchargement et la lecture simultanés avec le mêmePriorityTaskManager
(#10570). - Affichage immédiat de la notification de téléchargement (#183)
- Limitation du nombre de suppressions de téléchargements parallèles à 1 pour éviter la création d'un nombre excessif de threads (#10458).
- Correction d'une boucle infinie dans
- Vidéo :
- Essaie un autre décodeur pour Dolby Vision si l'écran ne le prend pas en charge. (#9794).
- Audio :
- Utilisation de
SingleThreadExecutor
pour le lancement d'instancesAudioTrack
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).
- Utilisation de
- 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 avecMetadataRenderer(MetadataOutput, Looper, MetadataDecoderFactory, boolean)
pour spécifier si le moteur de rendu doit générer les métadonnées de manière anticipée ou synchronisée avec la position du lecteur.
- DRM :
- Contournement d'un bug dans l'implémentation ClearKey d'Android 13 qui renvoie une URL de licence non vide, mais non valide.
- Correction de l'erreur
setMediaDrmSession failed: session not 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).
- Analyse
- Interface utilisateur :
- Utilisation de remplacements actuels du lecteur comme préréglage dans
TrackSelectionDialogBuilder
(#10429)
- Utilisation de remplacements actuels du lecteur comme préréglage dans
- Session :
- Permet d'assurer que les commandes sont toujours exécutées dans le bon ordre, même si certaines nécessitent une résolution asynchrone (#85).
- Ajout de
DefaultMediaNotificationProvider.Builder
pour créer des instancesDefaultMediaNotificationProvider
. Le compilateur peut configurer l'ID de notification, l'ID du canal de notification et le nom du canal de notification utilisé par le fournisseur. Ajoutez également la méthodeDefaultMediaNotificationProvider.setSmallIcon(int)
pour définir la petite icône des notifications. (#104). - Permet d'assurer que les commandes envoyées avant
MediaController.release()
ne sont pas supprimées (#99). SimpleBitmapLoader
peut charger le bitmap à partir des URIfile://
(#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 :
- 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 identifierCastPlayer
lors du contrôle de la lecture avecMediaController
(#142).
- Implémentation de
- Transformateur :
- Ajout d'un minuteur watchdog pour détecter quand la génération d'un échantillon de sortie est trop lente.
- Suppression des symboles obsolètes :
- Suppression de
Transformer.Builder.setOutputMimeType(String)
. Cette fonctionnalité a été supprimée. Le type MIME sera toujours MP4 lorsque le multiplexeur par défaut est utilisé.
- Suppression de
Version 1.0.0-beta02
21 juillet 2022
Publication d'androidx.media3:media3-*:1.0.0-beta02
.
Liste des commits de la version 1.0.0-beta02
Cette version correspond à la version 2.18.1 d'ExoPlayer.
- Bibliothèque principale :
- S'assure que la modification de
ShuffleOrder
avecExoPlayer.setShuffleOrder
entraîne un appel dePlayer.Listener#onTimelineChanged
avecreason=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
dansDefaultMediaSourceFactory
, qui n'était pas fonctionnelle dans certains cas (#116).
- S'assure que la modification de
- Extracteurs :
- DASH :
- Analyse l'URL de licence ClearKey à partir des fichiers manifestes (#10246).
- Interface utilisateur :
- S'assure que TalkBack annonce l'option de vitesse actuelle dans le menu des commandes de lecture (#10298).
- RTSP :
- Ajoute la gestion de paquets fragmentés VP8 (#110).
- Extension Leanback :
- Écoute les modifications de
playWhenReady
dansLeanbackAdapter
(10420).
- Écoute les modifications de
- Google Cast :
Version 1.0.0-beta01
16 juin 2022
Publication d'androidx.media3:media3-*:1.0.0-beta01
.
Liste des commits de la version 1.0.0-beta01
Cela correspond à la version 2.18.0 d'ExoPlayer.
- Bibliothèque principale :
- Active la prise en charge des diagnostics de la plate-forme Android via
MediaMetricsManager
. ExoPlayer transfère les événements de lecture et les données de performances à la plate-forme, ce qui permet de fournir des informations sur les performances du système et le débogage sur l'appareil. Ces données peuvent également être collectées par Google si le partage des données d'utilisation et de diagnostic est activé par l'utilisateur de l'appareil. Les applications peuvent cesser de contribuer aux diagnostics de plate-forme pour ExoPlayer avecExoPlayer.Builder.setUsePlatformDiagnostics(false)
. - Correction d'un bug qui provoque la réinitialisation trop fréquente d'une piste lors de l'utilisation de
MergingMediaSource
, par exemple lors du téléchargement indépendant des sous-titres et de la modification du sous-titre sélectionné en cours de lecture (#10248). - Arrêt de la détection du type de réseau 5G-NSA sur les API 29 et 30. Ces lectures reposent sur un réseau 4G.
- Interdiction de la transmission de
null
àMediaSource.Factory.setDrmSessionManagerProvider
etMediaSource.Factory.setLoadErrorHandlingPolicy
. Les instances deDefaultDrmSessionManagerProvider
etDefaultLoadErrorHandlingPolicy
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émentLocalConfiguration
exact n'est pas connu. Suppression deMediaMetadata.mediaUrl
, qui est maintenant inclus dansRequestMetadata
. - Ajout de
Player.Command.COMMAND_SET_MEDIA_ITEM
pour permettre aux joueurs de définir un seul élément.
- Active la prise en charge des diagnostics de la plate-forme Android via
- Sélection de la piste :
- Réduction de la classe
TrackSelectionOverrides
qui devientTrackSelectionParameters
et promotion deTrackSelectionOverride
en classe de niveau supérieur. TracksInfo
a été renomméTracks
etTracksInfo.TrackGroupInfo
a été renomméTracks.Group
.Player.getCurrentTracksInfo
etPlayer.Listener.onTracksInfoChanged
ont également été renommésPlayer.getCurrentTracks
etPlayer.Listener.onTracksChanged
. Cela permet d'annuler l'abandon du nom de la méthodePlayer.Listener.onTracksChanged
, mais avec différents types de paramètres.- Remplacement de
DefaultTrackSelector.buildUponParameters
etDefaultTrackSelector.Parameters.buildUpon
pour renvoyerDefaultTrackSelector.Parameters.Builder
au lieu deDefaultTrackSelector.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 UItelevision
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'instanceDefaultTrackSelector
doit être créée avec unContext
.
- Réduction de la classe
- 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()
parandroid.media.AudioAttributes
par une nouvelle classe de wrapperAudioAttributesV21
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 canalAudioFormat.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 renvoyerCueGroup
au lieu deList<Cue>
. - SSA : Prise en charge du paramètre de style
OutlineColour
lorsqueBorderStyle == 3
(c'est-à-dire lorsqueOutlineColour
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.
- Modification de
- Extracteurs :
- Interface utilisateur :
- Correction de la diffusion des événements dans les
OnClickListener
définis surPlayerView
, lorsqueuseController=false
. (#9605) Correction de la diffusion des événements dansOnLongClickListener
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 clicACTION_UP
. (#9861) - Résolution d'un problème d'accessibilité
PlayerView
: un appui sur l'écran pouvait activer/désactiver la lecture au lieu de masquer les commandes (#8627). - Réécriture de
TrackSelectionView
etTrackSelectionDialogBuilder
pour qu'elles fonctionnent avec l'interfacePlayer
au lieu deExoPlayer
. Cela permet d'utiliser les vues avec d'autres implémentationsPlayer
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)
- Correction de la diffusion des événements dans les
- 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 deDefaultCompositeSequenceableLoaderFactory
peuvent être transmises explicitement si nécessaire.
- Analyse le nombre de canaux à partir des éléments
- HLS :
- Création de remplacement sur la préparation en blocs si l'attribut de playlist CODECS ne contient pas le codec audio (#10065).
- Interdiction de la transmission de
null
àHlsMediaSource.Factory.setCompositeSequenceableLoaderFactory
,HlsMediaSource.Factory.setPlaylistParserFactory
etHlsMediaSource.Factory.setPlaylistTrackerFactory
. Les instances deDefaultCompositeSequenceableLoaderFactory
ouDefaultHlsPlaylistParserFactory
, 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 deDefaultCompositeSequenceableLoaderFactory
peuvent être transmises explicitement si nécessaire.
- Interdiction de la transmission de
- RTSP :
- Ajout d'un lecteur RTP pour H263 (#63).
- Ajout d'un lecteur RTP pour MPEG4 (#35).
- Ajout d'un lecteur RTP pour HEVC (#36).
- Ajout d'un lecteur RTP pour AMR. Actuellement, seuls les flux AMR monocanaux et non entrelacés sont acceptés. La charge utile RMR composée d'AMR n'est pas prise en charge. (#46)
- Ajout d'un lecteur RTP pour VP8 (#47).
- Ajout d'un lecteur RTP pour WAV (#56).
- Correction de l'en-tête d'autorisation de base RTSP. (#9544).
- Arrêt de la vérification des champs SDP obligatoires, car ExoPlayer n'en a pas besoin (#10049).
- Génération d'une exception vérifiée lors de l'analyse de la durée RTSP (#10165).
- Ajout d'un lecteur RTP pour VP9 (#47).
- Ajout d'un lecteur RTP pour OPUS (#53).
- Sources de données :
DummyDataSource
a été renomméPlaceholderDataSource
.- Solution de contournement de la gestion des interruptions OkHttp.
- Session :
- Remplacement de
MediaSession.MediaItemFiller
parMediaSession.Callback.onAddMediaItems
pour permettre la résolution asynchrone des requêtes. - Utilisation des méthodes
setMediaItems(s)
lorsqueMediaController
se connecte à une ancienne session multimédia. - Suppression de
MediaController.setMediaUri
etMediaSession.Callback.onSetMediaUri
. Vous pouvez obtenir la même fonctionnalité en utilisantMediaController.setMediaItem
etMediaSession.Callback.onAddMediaItems
. - Transfert des anciens appels
MediaController
pour lire des contenus multimédias versMediaSession.Callback.onAddMediaItems
au lieu deonSetMediaUri
. - Ajout de
MediaNotification.Provider
etDefaultMediaNotificationProvider
pour personnaliser la notification. - Ajout de
BitmapLoader
etSimpleBitmapLoader
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
etMediaSession.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).
- Remplacement de
- Lecture des annonces / IMA :
- Fait passer le taux d'interrogation des annonces de 100 à 200 ms, conformément aux recommandations du Media Rating Council (MRC).
- Extension FFmpeg :
- Définit la version CMake sur
3.21.0+
pour éviter un bug CMake qui entraînerait l'échec de la synchronisation Gradle d'Android Studio (#9933).
- Définit la version CMake sur
- Suppression des symboles obsolètes :
- Suppression de
Player.Listener.onTracksChanged(TrackGroupArray, TrackSelectionArray)
. Utilisation dePlayer.Listener.onTracksChanged(Tracks)
à la place. - Suppression de
Player.getCurrentTrackGroups
etPlayer.getCurrentTrackSelections
. Utilisation dePlayer.getCurrentTracks
à la place. Vous pouvez également continuer à utiliserExoPlayer.getCurrentTrackGroups
etExoPlayer.getCurrentTrackSelections
, bien que ces méthodes restent obsolètes. - Suppression des constantes
DownloadHelper
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT
etDEFAULT_TRACK_SELECTOR_PARAMETERS
. Utilisation degetDefaultTrackSelectorParameters(Context)
si possible, etDEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
dans le cas contraire. - Suppression du constructeur
DefaultTrackSelector(ExoTrackSelection.Factory)
. UtilisezDefaultTrackSelector(Context, ExoTrackSelection.Factory)
à la place. - Suppression de
Transformer.Builder.setContext
.Context
doit être transmis au constructeurTransformer.Builder
.
- Suppression de
Version 1.0.0-alpha03
14 mars 2022
Publication d'androidx.media3:media3-*:1.0.0-alpha03
.
Liste des commits de la version 1.0.0-alpha03
Cela correspond à la version 2.17.1 d'ExoPlayer.
- Audio :
- Corrige les erreurs de vérification des capacités audio de Dolby Atmos (E-AC3-JOC) dans HLS.
- Extracteurs :
- FMP4 : correction d'un problème d'ordre de sortie des exemples de métadonnées emsg pour les flux contenant à la fois des atomes emsg v0 et v1 (#9996).
- Texte :
- Corrige l'interaction entre
SingleSampleMediaSource.Factory.setTrackId
etMediaItem.SubtitleConfiguration.Builder.setId
pour donner la priorité au champSubtitleConfiguration
, et utilisation de la valeurFactory
si celle-ci n'est pas définie (#10016).
- Corrige l'interaction entre
- Lecture des annonces :
- Correction des sous-diffusions audio entre les périodes d'annonces dans les flux SSAI HLS en direct.
Version 1.0.0-alpha02
2 mars 2022
Publication d'androidx.media3:media3-*:1.0.0-alpha02
.
Liste des commits de la version 1.0.0-alpha02.
Cela correspond à la version 2.17.0 d'ExoPlayer.
- Bibliothèque principale :
- Ajout de la méthode protégée
DefaultRenderersFactory.getCodecAdapterFactory()
, afin que les sous-classes deDefaultRenderersFactory
qui ignorentbuildVideoRenderers()
oubuildAudioRenderers()
puissent accéder à la fabrique d'adaptateurs de codec et les transmettre aux instancesMediaCodecRenderer
. qu'ils créent. - Propagation des champs d'en-tête ICY
name
etgenre
respectivement surMediaMetadata.station
etMediaMetadata.genre
afin qu'ils atteignent l'application viaPlayer.Listener.onMediaMetadataChanged()
. (#9677). - Suppression des clés nulles de
DefaultHttpDataSource#getResponseHeaders
. - Mise en veille et nouvelle tentative en cas d'échec de création d'une instance
MediaCodec
. Ainsi, le problème survenant sur certains appareils lors du passage d'une surface d'un codec sécurisé à un autre codec est résolu (#8696). - Ajout de
MediaCodecAdapter.getMetrics()
pour permettre aux utilisateurs d'obtenir des données de métriques à partir deMediaCodec
. (#9766). - Corrige la résolution des dépendances Maven (#8353).
- Désactivation de l'ajustement automatique de la vitesse pour les diffusions en direct qui n'offrent pas de fonctionnalités de faible latence ni d'option de requête utilisateur pour définir la vitesse (#9329).
- Remplacement du nom
DecoderCounters#inputBufferCount
parqueuedInputBufferCount
. SimpleExoPlayer.renderers
devient privé. Les moteurs de rendu sont accessibles viaExoPlayer.getRenderer
.- Mise à jour de certaines valeurs constantes de
AnalyticsListener.EventFlags
pour correspondre aux valeurs dansPlayer.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.
- Ajout de la méthode protégée
- Sélection de la piste :
- Compatible avec les indicateurs de rôle vidéo préférés dans la sélection de piste (#9402).
- Mise à jour de la logique de sélection des pistes vidéo pour prendre en compte les types MIME et les indicateurs de rôle souhaités lorsque vous sélectionnez plusieurs pistes vidéo pour l'adaptation (#9519).
- Mise à jour de la logique de sélection des pistes vidéo et audio pour ne choisir que les formats de sélections adaptatives ayant le même niveau de compatibilité avec le décodeur et le matériel (#9565).
- Mise à jour de la logique de sélection de la piste vidéo pour privilégier les codecs plus efficaces si plusieurs codecs sont compatibles avec des décodeurs principaux dotés de l'accélération matérielle (#4835).
- Priorité aux préférences du contenu audio (par exemple, la piste audio "par défaut" ou une piste correspondant à la langue des paramètres régionaux du système) sur les contraintes de sélection technique de piste (par exemple, le type MIME préféré ou le nombre maximal de canaux).
- Correction d'un problème de sélection de suivi qui annule le blocage d'autres groupes de suivi du même type en cas de remplacement d'un groupe de suivi (#9675).
- Correction d'un problème de sélection de piste dans lequel un mélange de valeurs de remplacement de pistes non vides et non vides n'est pas correctement appliqué (#9649).
- Interdiction des
TrackGroup
en double dans unTrackGroupArray
. Il est toujours possible de distinguer lesTrackGroup
en définissant unid
dans le constructeurTrackGroup
. Cela permet de résoudre un plantage lors de la reprise de la lecture en arrière-plan dans l'application, avec un remplacement de la piste active (#9718). - Modification de la logique dans
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 deAudioCapabilities.DEFAULT_AUDIO_CAPABILITIES
au lieu denull
. - Autorisation de personnaliser le calcul de la taille de la mémoire tampon
AudioTrack
en injectant unAudioTrackBufferSizeProvider
dansDefaultAudioSink
(#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 :
- Texte :
- Ajout d'un champ
MediaItem.SubtitleConfiguration.id
qui est propagé au champFormat.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.
- Ajout d'un champ
- DRM :
- Suppression de
playbackLooper
deDrmSessionManager.(pre)acquireSession
. Lorsqu'un élémentDrmSessionManager
est utilisé par une application dans un élémentMediaSource
personnalisé, le champplaybackLooper
doit être transmis àDrmSessionManager.setPlayer
.
- Suppression de
- 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 :
- 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
commeC.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).
- Ajout des propriétés essentielles et supplémentaires analysées dans
- 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).
- Renseigne correctement le
- 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).
- Fournit une API cliente pour remplacer le paramètre
- 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 appelersetClearMediaItemsOnStop(false)
sur le connecteur.
- Par défaut,
- Extension Cast :
- Extension FFmpeg :
- Fait en sorte que
build_ffmpeg.sh
dépende des utilitaires bin de LLVM plutôt que de GNU (#9933).
- Fait en sorte que
- Compatibilité avec Android 12 :
- Mise à niveau de l'extension Cast pour qu'elle dépende de
com.google.android.gms:play-services-cast-framework:20.1.0
. Les versions antérieures deplay-services-cast-framework
ne sont pas compatibles avec les applications ciblant Android 12 et plantent avecIllegalArgumentException
lors de la création dePendingIntent
(#9528).
- Mise à niveau de l'extension Cast pour qu'elle dépende de
- Suppression des symboles obsolètes :
- Suppression de
Player.EventListener
. UtilisezPlayer.Listener
à la place. - Suppression de
MediaSourceFactory#setDrmSessionManager
,MediaSourceFactory#setDrmHttpDataSourceFactory
etMediaSourceFactory#setDrmUserAgent
. UtilisezMediaSourceFactory#setDrmSessionManagerProvider
à la place. - Suppression de
MediaSourceFactory#setStreamKeys
. UtilisezMediaItem.Builder#setStreamKeys
à la place. - Suppression de
MediaSourceFactory#createMediaSource(Uri)
. UtilisezMediaSourceFactory#createMediaSource(MediaItem)
à la place. - Suppression de
setTag
deDashMediaSource
,HlsMediaSource
etSsMediaSource
. UtilisezMediaItem.Builder#setTag
à la place. - Suppression de
DashMediaSource#setLivePresentationDelayMs(long, boolean)
. UtilisezMediaItem.Builder#setLiveConfiguration
etMediaItem.LiveConfiguration.Builder#setTargetOffsetMs
pour remplacer le fichier manifeste, ouDashMediaSource#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
etActionFileUpgradeUtil
. Utilisez ExoPlayer 2.16.1 ou une version antérieure pour utiliserActionFileUpgradeUtil
afin de fusionner les anciens fichiers d'action dansDefaultDownloadIndex
. - Suppression de
ProgressiveMediaSource#setExtractorsFactory
. Utilisez le constructeurProgressiveMediaSource.Factory(DataSource.Factory, ExtractorsFactory)
à la place. - Suppression de
ProgressiveMediaSource.Factory#setTag
etProgressiveMediaSource.Factory#setCustomCacheKey
. UtilisezMediaItem.Builder#setTag
etMediaItem.Builder#setCustomCacheKey
à la place. - Suppression des constructeurs
DefaultRenderersFactory(Context, @ExtensionRendererMode int)
etDefaultRenderersFactory(Context, @ExtensionRendererMode int, long)
. Utilisez plutôt le constructeurDefaultRenderersFactory(Context)
,DefaultRenderersFactory#setExtensionRendererMode
etDefaultRenderersFactory#setAllowedVideoJoiningTimeMs
. - Suppression de tous les constructeurs
CronetDataSource
publics. UtilisezCronetDataSource.Factory
à la place.
- Suppression de
- 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 packagecom.google.android.exoplayer2.ext.flac
)@FlacExtractor.Flags
(dans le packagecom.google.android.exoplayer2.extractor.flac
)@FragmentedMp4Extractor.Flags
@HlsMediaPlaylist.PlaylistType
@HttpDataSourceException.Type
@IllegalClippingException.Reason
@IllegalMergeException.Reason
@LoadErrorHandlingPolicy.FallbackType
@MatroskaExtractor.Flags
@Mp3Extractor.Flags
@Mp4Extractor.Flags
@NotificationUtil.Importance
@PlaybackException.FieldNumber
@PlayerNotificationManager.Priority
@PlayerNotificationManager.Visibility
@PlayerView.ShowBuffering
@Renderer.State
@RendererCapabilities.AdaptiveSupport
@RendererCapabilities.Capabilities
@RendererCapabilities.DecoderSupport
@RendererCapabilities.FormatSupport
@RendererCapabilities.HardwareAccelerationSupport
@RendererCapabilities.TunnelingSupport
@SampleStream.ReadDataResult
@SampleStream.ReadFlags
@StyledPlayerView.ShowBuffering
@SubtitleView.ViewType
@TextAnnotation.Position
@TextEmphasisSpan.MarkFill
@TextEmphasisSpan.MarkShape
@Track.Transformation
@TrackOutput.SampleDataPart
@Transformer.ProgressState
@TsExtractor.Mode
@TsPayloadReader.Flags
@WebvttCssStyle.FontSizeUnit
Version 1.0.0-alpha01
27 octobre 2021
Publication d'androidx.media3:media3-*:1.0.0-alpha01
.
Liste des commits de la version 1.0.0-alpha01
Nouvelles fonctionnalités
Media3 est le nouvel espace dédié aux bibliothèques Support pour les contenus multimédias, dont ExoPlayer. La première version alpha contient les implémentations préliminaires et fonctionnelles des bibliothèques pour implémenter des cas d'utilisation de contenus multimédias, y compris :
- ExoPlayer, un lecteur multimédia au niveau de l'application pour Android, facile à personnaliser et à étendre.
- Fonctionnalité de session multimédia, pour exposer et contrôler les lectures. Ce nouveau module utilise la même interface
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.