Media3
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
16 février 2023 | - | 1.0.0-rc01 | - | - |
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.1.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 RTSP playback support with ExoPlayer implementation "androidx.media3:media3-exoplayer-rtsp:$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" // 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 media database components implementation "androidx.media3:media3-database:$media3_version" // Common functionality for media decoders implementation "androidx.media3:media3-decoder:$media3_version" // Common functionality for loading data implementation "androidx.media3:media3-datasource:$media3_version" // Common functionality used across multiple media libraries implementation "androidx.media3:media3-common:$media3_version" }
Kotlin
dependencies { val media3_version = "1.1.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 RTSP playback support with ExoPlayer implementation("androidx.media3:media3-exoplayer-rtsp:$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") // 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 media database components implementation("androidx.media3:media3-database:$media3_version") // Common functionality for media decoders implementation("androidx.media3:media3-decoder:$media3_version") // Common functionality for loading data implementation("androidx.media3:media3-datasource:$media3_version") // Common functionality used across multiple media libraries implementation("androidx.media3:media3-common:$media3_version") }
Pour en savoir plus sur les dépendances, consultez la page Ajouter des dépendances de compilation.
Commentaires
Vos commentaires nous aident à améliorer Jetpack. Vous pouvez utiliser l'outil Issue Tracker Media3 pour obtenir des réponses à vos questions, aux problèmes connus et aux demandes de fonctionnalités, et pour signaler de nouveaux problèmes.
Version 1.0.0
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.