Media3
Documentation de référence AndroidX pour Java
Documentation de référence AndroidX sur Kotlin
Dernière mise à jour | Version stable | Version finale | Version bêta | Version alpha |
---|---|---|---|---|
10 juillet 2024 | 1.3.1 | 1.4.0-rc01 | 1.4.0-beta01 | 1.4.0-alpha02 |
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.4.0
Version 1.4.0-rc01
10 juillet 2024
Publication d'androidx.media3:media3-*:1.4.0-rc01
.
La version 1.4.0-rc01 contient ces commits.
- Bibliothèque commune :
- Ajout de
Format.customData
pour stocker des informations personnalisées fournies par l'application concernant les instancesFormat
.
- Ajout de
- ExoPlayer:
- Correction de certaines incohérences de ciblage audio, par exemple l'absence de signalement d'une perte de mise au point totale ou temporaire lorsque le lecteur est mis en pause (#1436).
- Correction de
IndexOutOfBoundsException
potentiel causé par les extracteurs signalant des pistes supplémentaires après l'étape de préparation initiale (#1476). Effects
dansExoPlayer.setVideoEffect()
recevra les codes temporels après suppression du décalage du moteur de rendu (#1098).- Correction de
IllegalArgumentException
potentiel lors du traitement de l'erreur du lecteur qui se produisait lors de la lecture d'un autre élément de playlist (#1483).
- Texte :
- Correction d'une
IllegalArgumentException
à partir deLegacySubtitleUtil
lorsqu'un exemple de sous-titre WebVTT ne contient aucun signal, par exemple dans un flux DASH (#1516).
- Correction d'une
- Session:
- Autorisez la définition de l'activité de session par contrôleur pour remplacer l'activité de session globale. L'activité de session peut être définie pour un contrôleur au moment de la connexion en créant un
ConnectionResult
avecAcceptedResultBuilder.setSessionActivivty(PendingIntent)
. Une fois connectée, 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.
- Autorisez la définition de l'activité de session par contrôleur pour remplacer l'activité de session globale. L'activité de session peut être définie pour un contrôleur au moment de la connexion en créant un
- UI:
- Correction d'un bug de la plate-forme qui entraînait l'étirement ou le recadrage de la vidéo lors de l'utilisation de
SurfaceView
dans uneAndroidView
Compose sur l'API 34 (#1237).
- Correction d'un bug de la plate-forme qui entraînait l'étirement ou le recadrage de la vidéo lors de l'utilisation de
- Application de démonstration :
- Utilisez
HttpEngineDataSource
commeHttpDataSource
lorsque l'appareil le permet.
- Utilisez
Version 1.4.0-beta01
26 juin 2024
Publication d'androidx.media3:media3-*:1.4.0-beta01
.
La version 1.4.0-beta01 contient ces commits.
- ExoPlayer:
- 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).
- Ajoutez
- Transformateur :
- Suppression du 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
.
- Suppression du champ
- Extracteurs :
- Correction de l'extraction du format audio PCM dans les conteneurs AVI.
- Image:
- Autorisez
null
comme paramètre pourExoPlayer.setImageOutput
afin d'effacer uneImageOutput
précédemment définie.
- Autorisez
- Effet :
- Suppression des
OverlaySettings.useHdr
inutilisés, car la plage dynamique de superposition et l'image doivent correspondre. - Ajouter la compatibilité HDR pour
TextOverlay
. La luminance de la superposition de texte peut être ajustée avecOverlaySettings.setHdrLuminanceMultiplier
.
- Suppression des
- Session:
- Ajout de
MediaSession.Callback.onPlayerInteractionFinished
pour informer les sessions lorsqu'une série d'interactions du joueur avec une manette spécifique est terminée. - Ajoutez
SessionError
et utilisez-le dansSessionResult
etLibraryResult
à la place du code d'erreur pour fournir plus d'informations sur l'erreur et savoir comment la résoudre, si possible. - Publiez le code de l'application de test du contrôleur media3, qui peut être utilisée pour tester les interactions avec les applications qui publient une session multimédia.
- Propage les extras transmis au
MediaSession[Builder].setSessionExtras()
de media3 vers lePlaybackStateCompat.getExtras()
d'un contrôleur media1. - Mapper les erreurs fatales et non fatales depuis et vers la session de la plate-forme. Un
PlaybackException
est mappé à un état d'erreur fatale dePlaybackStateCompat
. UnSessionError
envoyé au contrôleur des notifications multimédias avecMediaSession.sendError(ControllerInfo, SessionError)
est mappé à une erreur non fatale dansPlaybackStateCompat
, ce qui signifie que le code et le message d'erreur sont définis, mais que l'état de la session de la plate-forme reste différent deSTATE_ERROR
.
- Ajout de
- UI:
- Ajout de la prise en charge de l'affichage des 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 les remplacements globaux (#1200).
- Ajout de la prise en charge de l'affichage des images dans
- Extension HLS :
- Correction d'un bug qui empêchait l'actualisation des playlists qui ne sont pas des playlists principales pendant la lecture en direct. (#1240)
- Suppression des symboles obsolètes :
- Suppression de 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 l'interface
Version 1.4.0-alpha02
7 juin 2024
Publication d'androidx.media3:media3-*:1.4.0-alpha02
.
La version 1.4.0-alpha02 contient ces commits.
- Bibliothèque commune :
- Transférez les appels de recherche no-op présumés vers les 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 lors du désucrage Java 8 amélioré (#1312).
- Assurez-vous que la durée transmise à
MediaItem.Builder.setImageDurationMs
est ignorée pour uneMediaItem
autre qu'une image (comme indiqué).
- Transférez les appels de recherche no-op présumés vers les méthodes
- ExoPlayer:
- Ajoutez
reset
àBasePreloadManager
pour libérer toutes les sources d'attente tout en conservant l'instance du gestionnaire de préchargement. - Ajoutez
ExoPlayer.setPriority
(etBuilder.setPriority
) pour définir la valeur de priorité utilisée dansPriorityTaskManager
et l'importance de MediaCodec à partir de l'API 35. - Correction d'un problème de mise à jour du dernier délai de remise en mémoire tampon, qui entraînait une clé
bs
incorrecte (manque de mémoire tampon) dans CMCD (#1124). - Ajoutez
PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource)
pour indiquer que la source a été chargée jusqu'à la fin. Cela permet àDefaultPreloadManager
et aux implémentationsPreloadMediaSource.PreloadControl
personnalisées de précharger la source suivante ou d'effectuer d'autres actions. - Correction d'un bug qui provoquait une exception de lecture lorsque le silence était ignoré à la fin des éléments.
- Ajoutez
clear
àPreloadMediaSource
pour supprimer la période de préchargement. - Ajoutez un nouveau code d'erreur
PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED
, qui est utilisé lorsque les ressources du codec sont récupérées pour des tâches de priorité supérieure. - Permet à
AdsMediaSource
de charger les annonces pré-roll avant la fin de la préparation initiale du contenu multimédia (#1358). - Correction d'un bug qui provoquait le passage de la lecture à
STATE_ENDED
lors de la repréparation d'un flux en direct DASH multipériode alors que la période d'origine avait déjà été supprimée du fichier manifeste. - Renommez
onTimelineRefreshed
enonSourcePrepared
etonPrepared
enonTracksSelected
dansPreloadMediaSource.PreloadControl
. Renommez également IntDefs dansDefaultPreloadManager.Stage
en conséquence. - Ajout d'une compatibilité expérimentale pour la planification dynamique afin de mieux aligner le travail avec les cycles d'activation du processeur et retarder l'activation jusqu'au moment où les moteurs de rendu peuvent progresser.
Vous pouvez l'activer à l'aide de
experimentalSetDynamicSchedulingEnabled
lors de la configuration de votre instance ExoPlayer. - Ajout de
Renderer.getDurationToProgressMs
. UnRenderer
peut implémenter cette méthode pour renvoyer à ExoPlayer la durée d'avance de la lecture pour que le moteur de rendu puisse progresser. SiExoPlayer
est défini avecexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
appelle cette méthode lors du calcul du délai de planification de la tâche. - Ajout de
MediaCodecAdapter#OnBufferAvailableListener
pour alerter lorsque des tampons d'entrée et de sortie peuvent être utilisés parMediaCodecRenderer
.MediaCodecRenderer
signaleExoPlayer
lors de la réception de ces rappels. SiExoPlayer
est défini avecexperimentalSetDynamicSchedulingEnabled
,ExoPlayer
planifie sa boucle de travail à mesure que les moteurs de rendu peuvent progresser. - Utilisez une classe de données pour les méthodes
LoadControl
au lieu de paramètres individuels.
- Ajoutez
- Transformateur :
- Résolution d'un bug du décodeur où le nombre de canaux audio était limité en stéréo lors du traitement de l'entrée PCM.
- Lorsque vous sélectionnez des pistes dans
ExoPlayerAssetLoader
, ignorez les contraintes de nombre de canaux audio, car elles ne s'appliquent qu'à la lecture. - Remplacez l'interface
androidx.media3.transformer.Muxer
parandroidx.media3.muxer.Muxer
et supprimezandroidx.media3.transformer.Muxer
. - Correction du chargement d'image HEIC à partir des schémas d'URI de contenu. (#1373)
- Ajustez la durée de la piste audio dans
AudioGraphInput
pour améliorer la synchronisation AV.
- Extracteurs :
- MPEG-TS: avance de la modification en s'assurant que le dernier frame est affiché en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillon (#7909). Intégration de correctifs pour résoudre les problèmes survenus dans les flux HLS avec iFrame uniquement(#1150) et les flux HLS H.262 (#1126).
- MP3: privilégier la taille des données d'une trame
Info
par rapport à la taille signalée par le flux sous-jacent (par exemple, la taille du fichier ou l'en-tête HTTPContent-Length
). Cela permet d'exclure les données de bandes-annonces non lisibles (par exemple, les pochettes d'album) des calculs de recherche à débit constant, ce qui améliore la précision des recherches. (#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 une 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 petite, par exemple la tramePCUT
(#1376).
- Audio:
- Correction des attributs d'encodage du profil 2 DTS:X pour la lecture passthrough (#1299).
- Pour la lecture déchargée, réinitialisez le champ de suivi pour la fin 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) pouvaient entraîner la génération d'une exception par le processeur (#1352). - Implémentez
MediaCodecAudioRenderer.getDurationToProgressUs
afin qu'ExoPlayer planifie de manière dynamique sa boucle de travail principale au moment où MediaCodecAudioRenderer peut progresser.
- Vidéo :
- Correction de la logique de remplacement du décodeur pour que Dolby Vision utilise un décodeur AV1 compatible si nécessaire (#1389).
- Texte :
- Correction d'un problème où les sous-titres démarrant avant une position de recherche étaient ignorés. Ce problème n'a été introduit que dans Media3 1.4.0-alpha01.
- Modifiez le comportement par défaut de l'analyse des sous-titres de sorte qu'il se produise pendant l'extraction plutôt que pendant le rendu (consultez le schéma d'architecture d'ExoPlayer pour connaître la différence entre l'extraction et le rendu).
- Cette modification peut être remplacée en appelant les deux
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false)
etTextRenderer.experimentalSetLegacyDecodingEnabled(true)
. Consultez la documentation sur la personnalisation pour découvrir comment intégrer ces composants dans une instanceExoPlayer
. Ces méthodes (et toute prise en charge du décodage des anciens 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 les deux
- PGS: correction du décodage de la durée d'exécution pour résoudre
0
en tant qu'index de couleur, au lieu d'une valeur de couleur littérale (#1367). - CEA-708: ignorer la valeur
rowLock
. La spécification CEA-708-E S-2023 stipule querowLock
etcolumnLock
doivent tous les deux être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la compatibilité aveccolumnLock
n'est pas implémentée, il est donc supposé toujours "faux").- Cette modification était initialement incluse dans les notes de version de
1.3.0-alpha01
, mais elle a été annulée accidentellement avant la version1.3.0-rc01
. Ce problème est maintenant résolu, la modification est donc de nouveau présente.
- Cette modification était initialement incluse dans les notes de version de
- CEA-708: évitez l'ajout de sauts de ligne en double par la gestion naïve de la commande "set pen location" par ExoPlayer (#1315).
- Métadonnées :
- Correction du mappage des tags de tri MP4 avec ID3. Auparavant, les balises MP4 "tri de l'album" (
soal
), "tri par artiste" (soar
) et "tri par artiste de l'album" (soaa
) étaient mal mappées avec les balises ID3TSO2
,TSOA
etTSOP
(#1302). - Correction de la lecture des balises numériques
gnre
(genre) ettmpo
(tempo) MP4 (/iTunes) lorsque la valeur dépasse un octet. - Propagation du frame
TCON
ID3 dansMediaMetadata.genre
(#1305).
- Correction du mappage des tags de tri MP4 avec ID3. Auparavant, les balises MP4 "tri de l'album" (
- Image:
- Ajout de la prise en charge des grilles de vignettes DASH non carrées (#1300).
- Ajout de la prise en charge du format AVIF pour l'API 34 ou version ultérieure.
- Source de données :
- Permet à
ByteArrayDataSource
de résoudre un URI en un tableau d'octets pendantopen()
, au lieu d'être codé en dur lors de la construction (#1405).
- Permet à
- DRM:
- Autorisation de définir un
LoadErrorHandlingPolicy
surDefaultDrmSessionManagerProvider
(#1271).
- Autorisation de définir un
- Effet :
- Correction d'un bug qui provoquait le plantage de
TimestampWrapper
lorsqu'il est utilisé avecExoPlayer#setVideoEffects
(#821). - Modification de l'espace de travail des couleurs SDR par défaut pour passer des couleurs linéaires à la vidéo SDR BT 709 électrique. Proposez également une troisième option pour conserver l'espace colorimétrique d'origine.
- Autorisation de définir l'ordre z indéterminé des EditedMediaItemSequences (#1055).
- Maintenez une plage de luminance cohérente entre différents éléments de contenu HDR (elle utilise la plage HLG).
- Ajout de la prise en charge des superpositions Ultra HDR (bitmap) sur les contenus HDR.
- Autorise l'utilisation des effets
SeparableConvolution
avant le niveau d'API 26.
- Correction d'un bug qui provoquait le plantage de
- Extension IMA :
- Passage en version stable de l'API requise pour que les applications puissent lire des flux d'annonces pour l'insertion dynamique d'annonce.
- Ajout de
replaceAdTagParameters(Map <String, String>)
àImaServerSideAdInsertionMediaSource.AdLoader
pour permettre de remplacer les paramètres de tag d'emplacement publicitaire au moment de l'exécution. - Correction d'un bug qui empêchait l'appel de
VideoAdPlayer.VideoAdPlayerCallback.onError
lorsqu'une erreur du lecteur se produisait pendant la lecture de l'annonce (#1334). - Passez à la version 3.33.0 du SDK IMA pour corriger une
NullPointerException
lorsque vous utilisez des URI de tag d'emplacement publicitairedata://
(#700).
- Session:
- Masquage de la barre de recherche dans la notification multimédia pour les diffusions en direct en ne définissant pas la durée dans les métadonnées de session de la plate-forme (#1256).
- Alignement de la conversion de
MediaMetadata
enMediaDescriptionCompat
pour utiliser le même ordre et la même logique préférés lors de la sélection des propriétés de métadonnées que dans media1. - 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 lePlaybackState
de la session de la plate-forme vers un état d'erreur avec les informations d'erreur fournies (#543).
- Extension Cronet :
- Correction de
SocketTimeoutException
dansCronetDataSource
. Dans certaines versions de Cronet, la requête fournie par le rappel n'est pas toujours la même. Cela entraîne l'échec du rappel et l'expiration du délai de la requête (https://issuetracker.google.com/328442628).
- Correction de
- Extension HLS :
- Correction d'un bug où des échantillons EMSG en attente en attente d'une discontinuité étaient délégués dans
HlsSampleStreamWrapper
avec un décalage incorrect, ce qui entraînait uneIndexOutOfBoundsException
ou uneIllegalArgumentException
(#1002). - Correction d'un bug qui provoquait l'actualisation continue des playlists secondaires pour les flux LL-HLS (#1240).
- Correction d'un bug où l'activation de CMCD pour HLS avec des segments d'initialisation entraînait
Source Error
etIllegalArgumentException
.
- Correction d'un bug où des échantillons EMSG en attente en attente d'une discontinuité étaient délégués dans
- Extension DASH :
- Extension Cast :
- Correction d'un bug qui convertit le titre de l'album
MediaQueueItem
en artiste dans l'élément multimédia Media3 (#1255).
- Correction d'un bug qui convertit le titre de l'album
- Application de démonstration :
- Autorisation de la définition du mode de répétition avec les arguments
Intent
de la ligne de commande (#1266).
- Autorisation de la définition du mode de répétition avec les arguments
- Suppression des symboles obsolètes :
- Suppression de la méthode
setContentTypePredicate(Predicate)
deDefaultHttpDataSource
,OkHttpDataSource
etCronetDataSource
. Utilisez plutôt la méthode équivalente sur chaqueXXXDataSource.Factory
. - Suppression des constructeurs
OkHttpDataSource
et deOkHttpDataSourceFactory
. UtilisezOkHttpDataSource.Factory
à la place. - Supprimez
PlayerMessage.setHandler(Handler)
. Utilisez plutôtsetLooper(Looper)
. - Suppression du 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)
. Utilisez plutôtMediaCodecInfo.canReuseCodec(Format, Format)
. - Suppression des méthodes
DrmSessionManager.DUMMY
etgetDummyDrmSessionManager()
. UtilisezDrmSessionManager.DRM_UNSUPPORTED
à la place. - Suppression de
AnalyticsListener.onAudioInputFormatChanged(EventTime, Format)
,AnalyticsListener.onVideoInputFormatChanged(EventTime, Format)
,AudioRendererEventListener.onAudioInputFormatChanged(Format)
etVideoRendererEventListener.onVideoInputFormatChanged(Format)
. Utilisez plutôt les surcharges qui acceptent unDecoderReuseEvaluation
. - Suppression des constantes
RendererSupport.FormatSupport
IntDef etFORMAT_HANDLED
,FORMAT_EXCEEDS_CAPABILITIES
,FORMAT_UNSUPPORTED_DRM
,FORMAT_UNSUPPORTED_SUBTYPE
etFORMAT_UNSUPPORTED_TYPE
. Utilisez plutôt les constantes et IntDef équivalentes dansandroidx.media3.common.C
(par exemple,C.FORMAT_HANDLED
).
- Suppression de la méthode
Version 1.4.0-alpha01
17 avril 2024
Publication d'androidx.media3:media3-*:1.4.0-alpha01
.
La version 1.4.0-alpha01 contient ces commits.
- ExoPlayer:
- Ajoutez
BasePreloadManager
, qui coordonne le préchargement pour plusieurs sources en fonction des priorités définies par leurrankingData
. Vous pouvez la personnaliser en étendant cette classe. AjoutezDefaultPreloadManager
, qui utilisePreloadMediaSource
pour précharger en mémoire les échantillons multimédias des sources et utilise unrankingData
entier qui indique l'index d'un élément sur l'interface utilisateur. - Ajout de
PlayerId
à la plupart des méthodes deLoadControl
pour permettre aux implémentationsLoadControl
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écideront d'ignorer les tampons en fonction de l'horodatage. Les implémentations deRenderer
personnalisées 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
TargetPreloadStatusControl.getTargetPreloadStatus(T)
à renvoyer une valeur nulle pour indiquer qu'il ne faut pas précharger unMediaSource
avec l'rankingData
donnée. - Ajout de
remove(MediaSource)
àBasePreloadManager
.
- Ajoutez
- Transformateur :
- Ajout de
audioConversionProcess
etvideoConversionProcess
àExportResult
pour indiquer comment la piste correspondante a été créée dans le fichier de sortie. - Assouplissement des vérifications de niveau H.264 pour l'optimisation de l'édition
- Ajout de la possibilité de basculer entre un support d'entrée SDR et HDR dans une séquence.
- Ajout de la prise en charge des effets audio au niveau de la composition.
- Ajout de la prise en charge du transcodage d'images Ultra HDR en vidéos HDR.
- Correction d'un problème qui empêchait
DefaultAudioMixer
de générer la quantité correcte d'octets après avoir été réinitialisé et réutilisé.
- Ajout de
- Vidéo :
- Correction d'un problème qui entraînait l'apparition de
Listener.onRenderedFirstFrame()
trop tôt lors du changement de surface en cours de lecture.
- Correction d'un problème qui entraînait l'apparition de
- Source de données :
- Implémentez la compatibilité avec les URI de ressources brutes
android.resource://package/id
oùpackage
est différent du package de l'application actuelle. Cette méthode n'était pas encore documentée, mais il s'agit d'un moyen plus efficace d'accéder aux ressources d'un autre package que par nom. - Vérifiez hâtivement que
url
n'est pas nul dans les constructeursDataSpec
. Ce paramètre était déjà annoté pour être non nul.
- Implémentez la compatibilité avec les URI de ressources brutes
- Effet :
- Acceptez plusieurs changements de vitesse dans le même
EditedMediaItem
ouComposition
dansSpeedChangeEffect
. - Compatibilité avec la sortie HLG et PQ à partir d'une entrée bitmap ultra-HDR.
- Ajout de la prise en charge de EGL_GL_COLORSPACE_BT2020_HLG_EXT, qui améliore la sortie de surface HLG dans ExoPlayer.setVideoEffect et le débogage SurfaceView 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
.
- Acceptez plusieurs changements de vitesse dans le même
- Session:
- Remplacez la valeur par défaut de
CommandButton.enabled
partrue
et assurez-vous que la valeur peut rester "false" pour les manettes même si la commande associée est disponible. - Ajoutez des constantes d'icône pour
CommandButton
à utiliser à la place des ressources d'icônes personnalisées. - Ajout de
MediaSessionService.isPlaybackOngoing()
pour permettre aux applications de demander si le service doit être arrêté dansonTaskRemoved()
(#1219). - Ajoutez
MediaSessionService.pauseAllPlayersAndStopSelf()
, qui permet de suspendre facilement la lecture de toutes les sessions et d'appelerstopSelf
pour mettre fin au cycle de vie deMediaSessionService
. - Ignorez
MediaSessionService.onTaskRemoved(Intent)
pour fournir une implémentation par défaut sécurisée qui maintient le service au premier plan si la lecture est en cours ou arrête le service.
- Remplacez la valeur par défaut de
- Téléchargements :
- Assurez-vous que
DownloadHelper
ne divulgue pas d'instancesRenderer
non publiées, ce qui peut entraîner le plantage de l'application avecIllegalStateException: Too many receivers, total of 1000, registered for pid
. (#1224)
- Assurez-vous que
- 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 courte.
- Utilisez
- Suppression des symboles obsolètes :
- Suppression de
CronetDataSourceFactory
. Utilisez plutôtCronetDataSource.Factory
. - Supprimez certains constructeurs
DataSpec
. Utilisez plutôtDataSpec.Builder
.
- Suppression de
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 :
- Ajout de
Format.labels
pour autoriser les libellés localisés ou d'autres libellés.
- Ajout de
- ExoPlayer:
- Correction d'un problème qui empêchait
PreloadMediaPeriod
de conserver les flux lorsqu'il était à nouveau préchargé. - Appliquez le
TrackSelectionResult
correspondant à la période de lecture lors de la resélection du titre. - Démarrez les moteurs de rendu anticipés uniquement après avoir avancé la période de lecture lors de la transition entre des éléments multimédias. (#1017)
- Ajout d'un type renvoyé manquant à la règle ProGuard
-keepclasseswithmembers
pourDefaultVideoFrameProcessor.Factory.Builder.build()
(#1187).
- Correction d'un problème qui empêchait
- Transformateur :
- Ajout d'une solution de contournement à l'exception générée, car
MediaMuxer
n'accepte pas les horodatages de présentation négatifs antérieurs à l'API 30.
- Ajout d'une solution de contournement à l'exception générée, car
- Sélection de la piste :
DefaultTrackSelector
: privilégiez les pistes vidéo dont la fréquence d'images est raisonnable (supérieure à 10 images par seconde) à celles dont la fréquence d'images est inférieure ou non définie. Cela garantit que le lecteur sélectionne la "véritable" piste vidéo dans les fichiers MP4 extraits de photos animées pouvant contenir deux pistes HEVC, dont l'une présente une résolution plus élevée, mais comporte un très petit nombre d'images (#1051).
- Extracteurs :
- Correction d'un problème qui empêchait la marge intérieure lors de la lecture de fragments de taille inhabituelle à partir de fichiers WAV (#1117).
- MP3: renseignez
Format.averageBitrate
à partir des trames de métadonnées telles queXING
etVBRI
. - MPEG-TS: annulez une modification visant à garantir l'affichage de la dernière image en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (#7909). Cela est dû à la modification qui entraîne de nouveaux problèmes avec les flux HLS iFrame uniquement (#1150) et les flux HLS H.262 (#1126).
- Audio:
- Autorisez la récupération du moteur de rendu en désactivant le déchargement si la piste audio ne s'initialise pas en mode de déchargement.
- Vidéo :
- Ajout d'une solution pour résoudre un problème lié à un appareil sur Galaxy Tab S7 FE, Chromecast avec Google TV et Lenovo M10 FHD Plus qui entraîne le marquage des flux H265 60 FPS comme non compatibles
- Ajout d'une solution de contournement qui garantit que le premier frame s'affiche toujours lors du tunnel, même si l'appareil ne le fait pas automatiquement comme requis par l'API. (#1169) (#966)
- Correction d'un problème où la gestion des informations sur les couleurs HDR entraînait un comportement incorrect du codec et empêcherait les changements de format adaptatifs pour les pistes vidéo SDR (#1158).
- Texte :
- WebVTT: interdiction pour les repères directement consécutifs de créer de fausses instances
CuesWithTiming
supplémentaires à partir deWebvttParser.parse
(#1177).
- WebVTT: interdiction pour les repères directement consécutifs de créer de fausses instances
- DRM:
- Contournez une
NoSuchMethodError
qui peut être générée par le frameworkMediaDrm
au lieu deResourceBusyException
ouNotProvisionedException
sur certains appareils Android 14 (#1145).
- Contournez une
- Effet :
- Amélioration du mappage des tons PQ vers SDR en convertissant les espaces colorimétrique.
- Session:
- UI:
- Création de remplacement pour inclure le nom de la langue de la piste audio si
Locale
ne peut pas identifier de nom à afficher (#988).
- Création de remplacement pour inclure le nom de la langue de la piste audio si
- Extension DASH :
- Renseignez tous les éléments
Label
du fichier manifeste dansFormat.labels
(#1054).
- Renseignez tous les éléments
- Extension RTSP :
- Ignore les valeurs d'informations de session vides (tags i) lors de l'analyse SDP (#1087).
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Désactive par défaut l'extension MIDI en tant que dépendance locale, car elle nécessite la configuration d'un dépôt Maven supplémentaire. Les utilisateurs qui ont besoin de ce module à partir d'une dépendance locale peuvent le réactiver.
Version 1.3.0
6 mars 2024
Publication d'androidx.media3:media3-*:1.3.0
.
La version 1.3.0 contient ces commits.
- Bibliothèque commune :
- Implémentez la compatibilité avec les URI de ressources brutes
android.resource://package/[type/]name
oùpackage
est différent du package de l'application actuelle. Cela a toujours été documenté pour fonctionner, mais n'a pas été correctement implémenté jusqu'à présent. - Normalisez les types MIME définis par le code de l'application ou lus à partir du contenu multimédia pour qu'ils soient entièrement en minuscules.
- Définissez des annonces avec un
MediaItem
complet au lieu d'un seulUri
dansAdPlaybackState
. - Faites passer
minSdk
à 19 (Android KitKat). Cette bibliothèque est conforme à toutes les autres bibliothèques AndroidX. Elle est nécessaire pour effectuer une mise à niveau vers les dernières versions de nos dépendances AndroidX. - Renseignez
artworkUri
etartworkData
dansMediaMetadata.Builder.populate(MediaMetadata)
lorsqu'au moins l'un d'entre eux n'est pas nul (#964).
- Implémentez la compatibilité avec les 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épart spécifique avant la lecture.PreloadMediaSource
se charge de préparer la source multimédia du contenu pour recevoir leTimeline
, de préparer et de mettre en cache la période à la position de départ donnée, de sélectionner des 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 définissent 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
par défaut au joueur avec des valeurs nullesImageOutput
etImageDecoder.Factory.DEFAULT
.- Émission d'un événement
Player.Listener.onPositionDiscontinuity
lorsque le silence est ignoré. (#765) - Ajout de la compatibilité expérimentale pour l'analyse des sous-titres lors de l'extraction. Vous pouvez l'activer à l'aide de
MediaSource.Factory.experimentalParseSubtitlesDuringExtraction()
. - Compatible avec les sources multimédias adaptatives avec
PreloadMediaSource
. - Implémentez
HttpEngineDataSource
, unHttpDataSource
à l'aide de l'API HttpEngine. - Empêche le sous-classement de
CompositeSequenceableLoader
. Ce composant a été déjà 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 motif du décorateur et en implémentant unCompositeSequenceableLoaderFactory
personnalisé. - Correction d'un problème qui provoquait l'effacement des métadonnées de cet élément en cas de répétition à la même heure. (#1007)
- Renommage des méthodes
experimentalSetSubtitleParserFactory
surBundledChunkExtractor.Factory
etDefaultHlsExtractorFactory
parsetSubtitleParserFactory
et interdiction de transmettrenull
. Utilisez les nouvelles méthodesexperimentalParseSubtitlesDuringExtraction(boolean)
pour contrôler le comportement d'analyse. - Ajout de la possibilité de personnaliser le
SubtitleParser.Factory
utilisé lors de l'extraction. Pour ce faire, utilisezMediaSource.Factory.setSubtitleParserFactory()
. - Ajoutez le préfixe source à tous les champs
Format.id
générés à partir deMergingMediaSource
. Cela permet d'identifier la source qui a généré une erreurFormat
(#883). - Correction de l'expression régulière utilisée pour valider les noms de clés CMCD (Common Media Client Data) personnalisées en la modifiant pour ne rechercher que les traits d'union (#1028).
- Arrêt du double encodage des paramètres de requête CMCD (#1075).
- Ajout de
- Transformateur :
- Ajout de la prise en charge de l'aplatissement des vidéos au ralenti H.265/HEVC au ralenti.
- Augmentez la vitesse de transmuxation, en particulier lors de la suppression d'une vidéo.
- Ajout d'une API pour s'assurer que le fichier de sortie commence sur une image vidéo Cela peut rendre le résultat des opérations de découpage plus compatible avec les implémentations de lecteur qui n'affichent pas la première image vidéo avant son code temporel de présentation (#829).
- Ajout de la prise en charge de l'optimisation des opérations d'édition MP4 d'élément unique.
- Assurez-vous que le premier code temporel d'une image vidéo figure dans le fichier de sortie. Correction des fichiers de sortie commençant par un cadre noir dans les lecteurs iOS (#829).
- Sélection de la piste :
- Ajout de
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.
- Ajout de
- 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: utilisez la recherche de fichiers avec un en-tête
Info
(équivalent CBR de l'en-têteXing
). Auparavant, nous avons utilisé la table de recherche à partir de l'en-têteInfo
, mais la recherche est alors moins précise que si nous l'ignorons et supposons que le fichier est au format CBR. - MPEG2-TS: prise en charge de DTS, DTS-LBR et DTS:X Profile2 (#275).
- Extrayez les types audio des descripteurs TS et mappez-les à des indicateurs de rôle, ce qui permet aux utilisateurs de faire des sélections de pistes audio mieux informées (#973).
- Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs
- Audio:
- Vidéo :
- Modifiez le constructeur
MediaCodecVideoRenderer
qui accepte un argumentVideoFrameProcessor.Factory
et remplacez-le par un constructeur qui accepte un argumentVideoSinkProvider
. Les applications qui souhaitent injecter unVideoFrameProcessor.Factory
personnalisé peuvent instancier unCompositingVideoSinkProvider
qui utilise l'VideoFrameProcessor.Factory
personnalisé et transmettre le fournisseur de récepteur vidéo àMediaCodecVideoRenderer
.
- Modifiez le constructeur
- Texte :
- Correction de la sérialisation des repères bitmap pour résoudre l'erreur
Tried to marshall a Parcel that contained Binder objects
lors de l'utilisation deDefaultExtractorsFactory.setTextTrackTranscodingEnabled
(#836). - CEA-708: ignorer la valeur
rowLock
. La spécification CEA-708-E S-2023 stipule querowLock
etcolumnLock
doivent tous les deux être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la compatibilité aveccolumnLock
n'est pas implémentée, il est donc supposé toujours "faux").
- Correction de la sérialisation des repères bitmap pour résoudre l'erreur
- Image:
- Prise en charge des vignettes DASH. Les images de la grille sont recadrées et des vignettes individuelles sont fournies à
ImageOutput
peu de temps avant leur présentation.
- Prise en charge des vignettes DASH. Les images de la grille sont recadrées et des vignettes individuelles sont fournies à
- DRM:
- Lire immédiatement par défaut les échantillons non chiffrés de type "clear lead" dans le contenu DRM, même si les clés des échantillons chiffrés ultérieurs ne sont pas encore prêtes. Cela peut entraîner des blocages en cours de lecture si les clés ne sont toujours pas prêtes lorsque la position de lecture atteint les échantillons chiffrés (mais la lecture n'aurait pas commencé précédemment à ce stade). Ce comportement peut être désactivé avec
MediaItem.DrmConfiguration.Builder.setPlayClearContentWithoutKey
ouDefaultDrmSessionManager.Builder.setPlayClearSamplesWithoutKeys
.
- Lire immédiatement par défaut les échantillons non chiffrés de type "clear lead" dans le contenu DRM, même si les clés des échantillons chiffrés ultérieurs ne sont pas encore prêtes. Cela peut entraîner des blocages en cours de lecture si les clés ne sont toujours pas prêtes lorsque la position de lecture atteint les échantillons chiffrés (mais la lecture n'aurait pas commencé précédemment à ce stade). Ce comportement peut être désactivé avec
- Extension IMA :
- Correction d'un problème qui empêchait la lecture des annonces DASH et HLS sans l'extension de fichier appropriée.
- Session:
- Désactivation de la détection du double clic pour les applications TV (#962).
- Correction d'un problème qui empêchait la transmission d'
MediaItem.RequestMetadata
contenant uniquement des extras non nuls entre les contrôleurs multimédias et les sessions. - Ajoutez à
MediaLibrarySession.Builder
un constructeur qui n'accepte qu'unContext
au lieu d'unMediaLibraryService
.
- Extension HLS :
- Réduisez
HlsMediaPeriod
en mode "privé pour le package". Ce type ne doit pas dépendre directement de l'extérieur du package HLS. - La fonction Résoudre recherche le début d'un segment plus efficacement (#1031).
- Réduisez
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Décodeur MIDI: omission des messages d'événement SysEx (#710)
- Utilitaires de test :
- Ne mettez pas en pause la lecture dans
TestPlayerRunHelper.playUntilPosition
. Le test maintient la lecture en lecture, mais suspend la progression jusqu'à ce qu'il puisse ajouter des assertions et d'autres actions.
- Ne mettez pas en pause la lecture dans
- Application de démonstration :
- Ajout d'un module de démonstration court pour montrer l'utilisation de
PreloadMediaSource
avec le cas d'utilisation de contenu court.
- Ajout d'un module de démonstration court pour montrer l'utilisation de
Version 1.3.0-rc01
22 février 2024
Utilisez la version stable 1.3.0.
Version 1.3.0-beta01
7 février 2024
Utilisez la version stable 1.3.0.
Version 1.3.0-alpha01
15 janvier 2024
Utilisez la version stable 1.3.0.
Version 1.2.0
Version 1.2.1
9 janvier 2024
- ExoPlayer:
- Correction d'un problème où les recherches manuelles en dehors de la plage
LiveConfiguration.min/maxOffset
continuent d'ajuster le décalage surmin/maxOffset
. - Correction d'un problème empêchant la mise en page des chaînes OPUS et VORBIS pour 3, 5, 6, 7 et 8 chaînes (#8396).
- Correction d'un problème où les sélections de titres après la recherche de zéro dans un flux en direct laissaient mal démarrer le flux à sa position par défaut (#9347).
- Correction du problème où de nouvelles instances de
CmcdData.Factory
recevaient des valeurs négatives pourbufferedDurationUs
à partir de sources de fragment, ce qui entraînait une erreurIllegalArgumentException
(#888).
- Correction d'un problème où les recherches manuelles en dehors de la plage
- Transformateur :
- Une solution de contournement à un problème qui survenait à la configuration de l'encodeur 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 d'images clés incorrecte pour les flux TS H264 (#864).
- Correction de l'estimation de la durée des flux TS de plus de 47 721 secondes (#855).
- Marquez les pistes HEVC secondaires (non lisibles) dans les photos animées JPEG comme
- Audio:
- Correction de la gestion de la fin d'assistance pour
SilenceSkippingAudioProcessor
en cas d'appel multiple (#712).
- Correction de la gestion de la fin d'assistance pour
- Vidéo :
- Ajout d'une solution pour résoudre un problème d'appareil sur Galaxy Tab S7 FE, Chromecast avec Google TV et Lenovo M10 FHD Plus, qui entraînait le marquage des flux AVC 60 FPS comme non compatibles (#693).
- Métadonnées :
- Correction d'un bug où
MediaMetadata
n'était renseigné qu'à partir de commentaires Vorbis avec des touches majuscules (#876). - intercepte
OutOfMemoryError
lors de l'analyse de très grands frames ID3, ce qui signifie que la lecture peut se poursuivre sans les informations de la balise au lieu d'échouer complètement ;
- Correction d'un bug où
- DRM:
- Extension de la solution de contournement pour l'URL de licence ClearKey
https://default.url
erronée à l'API 33 ou version ultérieure (auparavant, la solution ne s'appliquait exactement qu'à l'API 33) (#837). - Correction de
ERROR_DRM_SESSION_NOT_OPENED
lors du passage d'un contenu chiffré à un contenu effacé sans surface associée au lecteur. L'erreur était due à l'utilisation incorrecte d'un décodeur sécurisé pour lire le contenu clair.
- Extension de la solution de contournement pour l'URL de licence ClearKey
- Session:
- Placez les clés et valeurs personnalisées de
MediaMetadataCompat
surMediaMetadata.extras
etMediaMetadata.extras
surMediaMetadataCompat
(#756, #802). - Correction de la diffusion de
notifyChildrenChanged
pour les anciennes manettes (#644). - Correction d'un bug où la définition d'un délai négatif pour un minuteur
setWhen
désactivé de la notification entraînait un plantage sur certains appareils (#903). - Correction de
IllegalStateException
lorsque le contrôleur de notifications multimédias n'a pas terminé de se connecter lors de la première demande de mise à jour de notification (#917).
- Placez les clés et valeurs personnalisées de
- UI:
- Extension DASH :
- Analyse de "f800" comme nombre de canaux égal à 5 pour Dolby dans le fichier manifeste DASH (#688).
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Extension Cast :
- Suppression de la création d'un
Timeline
pour ne pas faire planter l'application en cas d'échec du chargement du contenu multimédia sur l'appareil Cast (#708).
- Suppression de 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 d'informations sur leThrowable
transmis aux méthodesLog.{d,i,w,e}()
. Les implémentations devront donc ajouter manuellement ces informations si vous le souhaitez (éventuellement à l'aide deLogger.appendThrowableString(String, Throwable)
). - Correction d'un problème de compatibilité Kotlin où les paramètres de type générique pouvant avoir une valeur nulle et les types d'éléments de tableau pouvant avoir une valeur nulle ne sont pas détectés comme pouvant avoir une valeur nulle. Les paramètres des méthodes
TrackSelectorResult
etSimpleDecoder
en sont des exemples (#6792). - Modifiez le comportement de l'interface utilisateur et des notifications par défaut dans
Util.shouldShowPlayButton
pour afficher un bouton de lecture lorsque la lecture est temporairement supprimée (par exemple, en raison d'une perte de focus audio temporaire). L'ancien comportement peut être conservé à l'aide dePlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false)
ou deMediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false)
(#11213). - Mettez à niveau
androidx.annotation:annotation-experimental
vers1.3.1
pour résoudre 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 le mauvais identifiant des exemples de décodage uniquement (#11000).
- Ajoutez la suppression de la lecture sur les appareils de sortie audio inappropriés (par exemple, le haut-parleur intégré aux appareils Wear OS) lorsque cette fonctionnalité est activée via
ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput
. Le motif de suppression de la lecture est mis à jour en tant quePlayer.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT
si une tentative de lecture est effectuée lorsqu'aucune sortie audio appropriée n'est disponible ou si toutes les sorties appropriées sont déconnectées pendant la lecture. Le motif de la suppression sera supprimé lorsqu'une sortie appropriée sera connectée. - Ajout de
MediaSource.canUpdateMediaItem
etMediaSource.updateMediaItem
pour accepter les mises à jour deMediaItem
après la création viaPlayer.replaceMediaItem(s)
. - Autorise les mises à jour de
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
comme exemple. - Amélioration de la méthode
SequenceableLoader.continueLoading(long)
dans l'interfaceSequenceableLoader
versSequenceableLoader.continueLoading(LoadingInfo loadingInfo)
.LoadingInfo
contient des paramètres supplémentaires, y comprisplaybackSpeed
etlastRebufferRealtimeMs
, en plus duplaybackPositionUs
existant. - Amélioration de 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 CMCD (Common Media Client Data) : manque de mémoire tampon (
bs
), délai (dl
), vitesse de lecture (pr
) et démarrage (su
) (#8699). - Ajout de la luma et de la profondeur de bits de la chroma à
ColorInfo
(#491). - Ajout de champs supplémentaires à la journalisation CMCD (Common Media Client Data) : requête d'objet suivante (
nor
) et requête de plage suivante (nrr
) (#8699). - Ajout d'une fonctionnalité permettant de transmettre des données CMCD (Common Media Client Data) à l'aide de paramètres de requête (#553).
- Correction de
ConcurrentModificationException
dansExperimentalBandwidthMeter
(#612). - Ajout du paramètre
MediaPeriodId
àCompositeMediaSource.getMediaTimeForChildMediaTime
. - Prise en charge de
ClippingMediaSource
(et d'autres sources avec des décalages temporels de période/fenêtre) dansConcatenatingMediaSource2
(#11226). - Modifiez
BaseRenderer.onStreamChanged()
pour recevoir également un argumentMediaPeriodId
.
- Transformateur :
- Analyser les données de rotation EXIF pour les entrées d'image
- Suppression du type d'annotation
TransformationRequest.HdrMode
et de ses constantes associées. Utilisez plutôtComposition.HdrMode
et les constantes associées. - Simplifiez
OverlaySettings
pour résoudre les problèmes de rotation. - Remplacement des paramètres
frameRate
etdurationUs
deSampleConsumer.queueInputBitmap
parTimestampIterator
.
- Sélection de la piste :
- Ajoutez
DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness
pour autoriser ou interdire explicitement l'adaptation. La valeur par défaut conserve son comportement actuel,true
.
- Ajoutez
- Extracteurs :
- MPEG-TS: permet de s'assurer que la dernière image est affichée en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (#7909).
- Correction d'une faute de frappe lors de la détermination de
rotationDegrees
. Remplacement deprojectionPosePitch
parprojectionPoseRoll
(#461). - Supprimez l'hypothèse selon laquelle les instances
Extractor
peuvent être directement inspectées avecinstanceof
. Si vous souhaitez accéder en 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 version classique de QuickTime à
Mp4Extractor
.
- Audio:
- Ajout de la prise en charge du PCM big-endian 24/32 bits en MP4 et Matroska, et analyse de l'encodage PCM pour
lpcm
en MP4. - Ajout de la prise en charge de l'extraction du contenu audio Vorbis au format MP4.
- Ajoutez
AudioSink.getFormatOffloadSupport(Format)
, qui récupère le niveau de prise en charge du déchargement que le récepteur peut fournir pour le format via un élémentDefaultAudioOffloadSupportProvider
. Elle renvoie le nouveauAudioOffloadSupport
contenantisFormatSupported
,isGaplessSupported
etisSpeedChangeSupported
. - Ajoutez
AudioSink.setOffloadMode()
par le biais duquel la configuration de déchargement sur le récepteur audio est configurée. La valeur par défaut estAudioSink.OFFLOAD_MODE_DISABLED
. - Le déchargement peut être activé via
setAudioOffloadPreference
dansTrackSelectionParameters
. Si la préférence définie est d'activer, l'appareil prend en charge le déchargement pour le format et la sélection de la piste est une seule piste audio, le déchargement audio est alors activé. - Si
audioOffloadModePreference
est défini surAUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED
,DefaultTrackSelector
ne sélectionne une piste audio que si son format est compatible avec le déchargement. Si aucune piste audio n'est compatible avec le déchargement, aucune piste n'est sélectionnée. - Désactivation de la prise en charge du déchargement sans interruption pour le niveau antérieur à l'API 33 en raison d'un problème de position de lecture après la transition de canal.
- Suppression du paramètre
enableOffload
de la signature de la méthodeDefaultRenderersFactory.buildAudioSink
. - Suppression de la méthode
DefaultAudioSink.Builder.setOffloadMode
. - Suppression de la valeur intdef
DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED
. - Ajout de la prise en charge des métadonnées sans intervalles Opus lors du déchargement de la lecture.
- Autorisation de la récupération du moteur de rendu en désactivant le déchargement en cas d'échec lors de la première écriture (#627).
- Activez la planification de déchargement par défaut pour la lecture déchargée en mode audio uniquement.
- Supprimez
ExoPlayer.experimentalSetOffloadSchedulingEnabled
etAudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged
. - Remplacement du nom de
onExperimentalSleepingForOffloadChanged
paronSleepingForOffloadChanged
et deonExperimentalOffloadedPlayback
paronOffloadedPlayback
. - Déplacement des interfaces et définitions
TrackSelectionParameters
liées au mode de déchargement audio vers une classeAudioOffloadPreferences
interne. - Ajoutez des rappels
onAudioTrackInitialized
etonAudioTrackReleased
àAnalyticsListener
,AudioRendererEventListener
etAudioSink.Listener
. - Correction du problème de dépassement de mémoire tampon audio DTS Express (#650).
- Correction d'un bug qui provoquait la génération d'une erreur
IllegalArgumentException
par la vérification des fonctionnalités d'E-AC3-JOC (#677).
- Ajout de la prise en charge du PCM big-endian 24/32 bits en MP4 et Matroska, et analyse de l'encodage PCM pour
- Vidéo :
- Autoriser
MediaCodecVideoRenderer
à utiliser unVideoFrameProcessor.Factory
personnalisé. - Correction d'un bug qui empêchait l'affichage de la première image si le flux audio commence par des horodatages négatifs (#291).
- Autoriser
- Texte :
- Supprimez
ExoplayerCuesDecoder
. Les pistes de texte avecsampleMimeType = application/x-media3-cues
sont désormais gérées directement parTextRenderer
sans avoir besoin d'une instanceSubtitleDecoder
.
- Supprimez
- Métadonnées :
MetadataDecoder.decode
ne sera plus appelé pour les exemples de décodage uniquement, car l'implémentation doit quand même renvoyer une valeur nulle.
- Effet :
- Ajout d'une entrée bitmap de mise en file d'attente
VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>)
par code temporel. - Modifiez
VideoFrameProcessor.registerInputStream()
pour qu'il ne soit pas bloquant. Les applications doivent implémenterVideoFrameProcessor.Listener#onInputStreamRegistered()
. - Remplacement des paramètres
frameRate
etdurationUs
deVideoFrameProcessor.queueInputBitmap
parTimestampIterator
.
- Ajout d'une entrée bitmap de mise en file d'attente
- Extension IMA :
- Correction d'un bug qui provoquait une exception lorsqu'un flux en direct DASH multi-points qui n'était pas le premier élément d'une playlist (#571)
- Libérez StreamManager avant d'appeler
AdsLoader.destroy()
- Passez à la version 3.31.0 du SDK IMA.
- Session:
- Définissez le comportement du service de premier plan des notifications sur
FOREGROUND_SERVICE_IMMEDIATE
dansDefaultMediaNotificationProvider
(#167). - Utilisez uniquement
android.media.session.MediaSession.setMediaButtonBroadcastReceiver()
au-dessus de l'API 31 pour éviter les problèmes liés à une API obsolète sur les appareils Samsung (#167). - Utilisez le contrôleur de notifications multimédias en tant que proxy pour définir les commandes disponibles et la mise en page personnalisée permettant de remplir la notification et la session de la plate-forme.
- Convertissez les événements de boutons multimédias 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 des notifications multimédias, et les applications peuvent facilement reconnaître les appels provenant de la notification de la même manière sur tous les niveaux d'API compatibles. - Correction d'un bug qui empêchait
MediaController.getCurrentPosition()
d'avancer lorsqu'il était connecté à un ancienMediaSessionCompat
. - Ajoutez
MediaLibrarySession.getSubscribedControllers(mediaId)
pour plus de commodité. - Ignorez
MediaLibrarySession.Callback.onSubscribe()
pour déclarer la disponibilité de l'ID parent auquel la manette est abonnée. En cas de succès, l'abonnement est accepté etnotifyChildrenChanged()
est appelé immédiatement pour en informer le navigateur (#561). - Ajoutez un module de démonstration de session pour Automotive OS et activez la démonstration de session pour Android Auto.
- Ne définissez pas la file d'attente de la session du framework lorsque
COMMAND_GET_TIMELINE
n'est pas disponible pour le contrôleur de notifications multimédias. Avec Android Auto comme contrôleur client lisant la session du framework, le boutonqueue
de l'interface utilisateur d'Android Auto ne s'affiche pas (#339). - Utilisation de
DataSourceBitmapLoader
par défaut au lieu deSimpleBitmapLoader
(#271, #327). - Ajout de
MediaSession.Callback.onMediaButtonEvent(Intent)
qui permet aux applications d'ignorer la gestion par défaut des événements du bouton multimédia.
- Définissez le comportement du service de premier plan des notifications sur
- UI:
- 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 permettant à un utilisateur de connecter une sortie audio appropriée (par exemple, un casque Bluetooth). L'écouteur reprend automatiquement la lecture si un appareil approprié est connecté dans un délai configurable (par défaut, 5 minutes).
- Ajoutez une implémentation
- Téléchargements :
- Déclarez le type de service de premier plan "synchronisation de données" 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
(#11239).
- Déclarez le type de service de premier plan "synchronisation de données" pour
- Extension HLS :
- Actualisation de la playlist HLS en direct avec un intervalle calculé à partir de l'heure de début du dernier chargement plutôt que de l'heure de fin du dernier chargement (#663).
- Extension DASH :
- Autoriser plusieurs identifiants DASH identiques dans l'URL du modèle de segment.
- Ajout de la compatibilité expérimentale pour l'analyse des sous-titres lors de l'extraction. Cette fonctionnalité offre une meilleure prise en charge de la fusion des sous-titres qui se chevauchent, y compris la résolution du scintillement lors des transitions 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 qui pouvait entraîner l'erreur
IndexOutOfBoundsException
en cas de retour à TCP ou le blocage de la lecture dans certaines situations. - Vérification de l'état dans la configuration RTSP lors du renvoi de l'état de chargement de
RtspMediaPeriod
(#577). - Ignorer les méthodes de requête RTP personnalisées dans l'en-tête public de la réponse Options (#613).
- Utilisation de la valeur du délai avant expiration de la réponse de configuration RTSP dans l'intervalle de temps d'envoi des requêtes d'options RTSP de conservation (#662).
- Correction d'une condition de concurrence qui pouvait entraîner l'erreur
- Extensions de décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
- Libérez le module de décodeur MIDI, qui permet de lire des fichiers MIDI standards à l'aide de la bibliothèque Jsyn pour synthétiser l'audio.
- Ajout de
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é. - Ajout de
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'utiliserBuffer.isDecodeOnly
, qui sera abandonné. - Correction d'un bug lors de la publication de l'artefact de décodeur MIDI dans le dépôt Maven. L'artefact est renommé
media3-exoplayer-midi
(#734).
- Extension Leanback :
- Correction d'un bug à cause duquel la désactivation d'une surface pouvait entraîner une
ArithmeticException
dans le code Leanback (#617).
- Correction d'un bug à cause duquel la désactivation d'une surface pouvait entraîner une
- Utilitaires de test :
- Rendez
TestExoPlayerBuilder
etFakeClock
compatibles avec les tests de l'interface utilisateur Espresso et les tests de l'interface utilisateur Compose. Correction d'un bug qui provoquait l'avance de la lecture de manière non déterministe lors des interactions avec les vues Espresso ou Compose.
- Rendez
- Suppression des symboles obsolètes :
- Suppression de
TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean)
etTransformationRequest.Builder.experimental_setEnableHdrEditing(boolean)
. UtilisezComposition.Builder.setHdrMode(int)
et transmettezComposition
àTransformer.start(Composition, String)
à la place. - Supprimez la méthode
DownloadNotificationHelper.buildProgressNotification
obsolète et utilisez une méthode non obsolète qui utilise un paramètrenotMetRequirements
à la place.
- Suppression de
Version 1.2.0-rc01
1er novembre 2023
Utilisez la version stable 1.2.0.
Version 1.2.0-beta01
19 octobre 2023
Utilisez la version stable 1.2.0.
Version 1.2.0-alpha02
29 septembre 2023
Utilisez la version stable 1.2.0.
Version 1.2.0-alpha01
17 août 2023
Utilisez la version stable 1.2.0.
Version 1.1.0
Version 1.1.1
16 août 2023
- Bibliothèque commune :
- Suppression de la dépendance
multidex
ajoutée accidentellement de tous les modules (#499).
- Suppression de la dépendance
- ExoPlayer:
- Correction d'un problème dans
PlaybackStatsListener
où de fauxPlaybackStats
étaient créés après l'effacement de la playlist. - Ajout de champs supplémentaires à la journalisation CMCD : format de streaming (sf), type de flux (st), version (v), birate supérieur (tb), durée de l'objet (d), débit mesuré (mtp) et type d'objet (ot) (#8699).
- Correction d'un problème dans
- Audio:
- Correction d'un bug qui empêchait
Player.getState()
de passer àSTATE_ENDED
lors de la lecture de fichiers très courts (#538).
- Correction d'un bug qui empêchait
- Déchargement audio :
- Ajoutez les pages d'en-tête d'ID Ogg et d'en-tête de commentaire au début du flux de bits pour la lecture Opus déchargée, conformément à la RFC 7845.
- Vidéo :
- H.265/HEVC: correction de l'analyse des informations sur les images de référence SPS à court et à long terme.
- Texte :
- CEA-608: modification de la logique de troncation des repères pour ne prendre en compte que le texte visible Auparavant, le retrait et le décalage de tabulation étaient inclus pour limiter la longueur du repère à 32 caractères (ce qui était techniquement correct selon la spécification) (#11019).
- Extension IMA :
- Passez à la version 3.30.3 du SDK IMA.
- Session:
- Ajoutez une mise en page personnalisée à l'état de la manette et fournissez un getter pour y accéder. Lorsque la mise en page personnalisée est modifiée,
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 terminée. - Correction des cas où
MediaLibraryServiceLegacyStub
envoyait une erreur à unResult
non compatible, ce qui générait une erreurUnsupportedOperationException
(#78). - Correction de la façon dont
PlayerWrapper
crée unVolumeProviderCompat
en déterminantvolumeControlType
à l'aide des anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUME
etCOMMAND_SET_DEVICE_VOLUME
) et des nouvelles commandes (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
etCOMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
) (#554).
- Ajoutez une mise en page personnalisée à l'état de la manette et fournissez un getter pour y accéder. Lorsque la mise en page personnalisée est modifiée,
Version 1.1.0
5 juillet 2023
- Bibliothèque commune :
- Ajout d'un motif de suppression pour l'itinéraire audio inapproprié et de la lecture lorsque le message est prêt à changer de motif pour la suppression trop longue. (#15)
- Ajoutez 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 à Player qui permettent aux utilisateurs de spécifier des indicateurs de volume :
void setDeviceVolume(int, int)
void increaseDeviceVolume(int)
void decreaseDeviceVolume(int)
void setDeviceMuted(boolean, int)
- Ajout de
Builder
pourDeviceInfo
et abandon du constructeur existant. - Ajout de
DeviceInfo.routingControllerId
afin de spécifier l'ID du contrôleur de routage pour les lectures à distance. - Ajout de
Player.replaceMediaItem(s)
comme raccourci pour ajouter et supprimer des éléments à la même position (#8046).
- ExoPlayer:
- Permet à ExoPlayer de contrôler les méthodes de volume de l'appareil uniquement si elles sont explicitement activées. 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 d'un
FilteringMediaSource
permettant de filtrer les types de canaux disponibles à partir d'unMediaSource
. - Ajout de la possibilité d'inclure des données CMCD (Common Media Client Data) dans les requêtes sortantes des formats de streaming adaptatif DASH, HLS et SmoothStreaming. Les champs suivants,
br
,bl
,cid
,rtp
etsid
, ont été incorporés (#8699). Structure de l'API et méthodes d'API :- La journalisation CMCD est désactivée par défaut. Utilisez
MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)
pour l'activer. - Toutes les clés sont activées par défaut. Remplacez
CmcdConfiguration.RequestConfig.isKeyAllowed(String key)
pour filtrer les clés consignées. - Ignorez
CmcdConfiguration.RequestConfig.getCustomData()
pour activer la journalisation des clés 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é (#439). - Ajout de
ExoPlayer.setVideoEffects()
pour utiliserEffect
lors de la lecture vidéo. - Mettez à jour
SampleQueue
pour stockersourceId
en tant quelong
plutôt qu'en tant queint
. Cette opération modifie les signatures des méthodes publiquesSampleQueue.sourceId
etSampleQueue.peekSourceId
. - 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. Cette étape est nécessaire pour éviter les problèmes de simultanéité avec les diffusions en direct multipériodes. - Abandon de
EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs)
etBaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs)
. La variante des méthodes 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
envoyés par le coordinateur. - Renommez
ExoTrackSelection.blacklist
enexcludeTrack
etisBlacklisted
enisTrackExcluded
. - Correction du comportement incohérent entre
ExoPlayer.setMediaItem(s)
etaddMediaItem(s)
en cas d'appel sur une playlist vide.
- Permet à ExoPlayer de contrôler les méthodes de volume de l'appareil uniquement si elles sont explicitement activées. 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 provoquait le blocage de la transformation (provoquant un délai d'expiration du multiplexeur) si la fin du flux vidéo était signalée au moment où une image d'entrée était en attente de traitement.
- Interrogez les codecs via
MediaCodecList
au lieu d'utiliser les utilitairesfindDecoder/EncoderForFormat
afin d'étendre la compatibilité. - Suppression de la configuration du cadre B dans
DefaultEncoderFactory
, car elle ne fonctionne pas sur certains appareils.
- Supprimez
- Sélection de la piste :
- Ajout de
DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange
, qui est désactivé par défaut. Lorsque cette option est activée,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 provoquait l'échec de certaines lectures lorsque le tunneling est activé et que
AudioProcessors
est actif, par exemple pour le découpage sans intervalles (#10847). - Encapsuler les trames Opus dans les paquets Ogg lors des lectures directes (déchargement).
- Extrapoler la position actuelle pendant la veille avec la planification de déchargement
- Ajout de
Renderer.release()
etAudioSink.release()
pour libérer les ressources à la fin du cycle de vie du joueur. - Écoutez les modifications des fonctionnalités audio dans
DefaultAudioSink
. Ajoutez un paramètre obligatoirecontext
dans le constructeur deDefaultAudioSink
, avec lequelDefaultAudioSink
sera enregistré en tant qu'écouteur deAudioCapabilitiesReceiver
et mettra à jour sa propriétéaudioCapabilities
lorsqu'il sera informé d'une modification des fonctionnalités. - Propager 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
. - Ajout de
ChannelMixingAudioProcessor
pour appliquer un scaling/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 le changement des fonctionnalités audio. - Ajout de la prise en charge de la lecture directe pour DTS Express et DTS:X (#335).
- Correction d'un bug qui provoquait l'échec de certaines lectures lorsque le tunneling est activé et que
- Vidéo :
- Faites en sorte que
MediaCodecVideoRenderer
signale uneVideoSize
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 largeur et la hauteur des vidéos d'ExoPlayer avecMediaCodecVideoRenderer
sont 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.
- Faites en sorte que
- DRM:
- Réduisez la visibilité de plusieurs méthodes réservées à un usage interne sur
DefaultDrmSession
qui ne sont pas censées être appelées en dehors du package DRM :void onMediaDrmEvent(int)
void provision()
void onProvisionCompleted()
onProvisionError(Exception, boolean)
- Réduisez la visibilité de plusieurs méthodes réservées à un usage interne sur
- Muxer:
- Ajoutez une bibliothèque muxer permettant de créer un fichier de conteneur MP4.
- Extension IMA :
- Activez les flux DASH en direct multipériodes pour l'insertion dynamique d'annonce. Veuillez noter que l'implémentation actuelle ne permet pas encore la recherche dans les diffusions en direct (#10912).
- Correction d'un bug qui provoquait l'insertion d'un nouveau groupe d'annonces dans les diffusions en direct, car la position du contenu calculée dans les chronologies consécutives varie légèrement.
- Session:
- Ajout de 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 lecture avec les événements de boutons multimédias envoyés par un casque Bluetooth, par exemple (#167). - Ajout d'une implémentation par défaut à
MediaSession.Callback.onAddMediaItems
pour permettre la transmission desMediaItems
demandés àPlayer
s'ils comportent desLocalConfiguration
(par exemple, URI) (#282). - Ajout par défaut des boutons de commande "seek to previous" (rechercher à l'élément précédent) et "seek to next" (rechercher jusqu'à suivant) dans l'affichage des notifications de médias compacts pour Android 12 et versions antérieures (#410).
- Ajout d'une implémentation par défaut à
MediaSession.Callback.onAddMediaItems
pour permettre la transmission desMediaItems
demandés àPlayer
s'ils comportent desLocalConfiguration
(par exemple, URI) (#282). - Ajout par défaut des boutons de commande "seek to previous" (rechercher à l'élément précédent) et "seek to next" (rechercher jusqu'à suivant) dans l'affichage des notifications de médias compacts pour Android 12 et versions antérieures (#410).
- Ajout de la méthode d'assistance
- UI:
- Ajout des méthodes Util
shouldShowPlayButton
ethandlePlayPauseButtonAction
pour écrire des éléments d'interface utilisateur personnalisés avec un bouton de lecture/pause.
- Ajout des méthodes Util
- Extension RTSP :
- Pour MPEG4-LATM, utilisez la valeur par défaut de l'ID au niveau du profil si elle n'est pas spécifiée dans le message SDP "Descriptif" de la réponse (#302).
- Utilisation de l'URI de base pour la résolution du chemin relatif à partir de la session RTSP s'il est présent dans l'en-tête de réponse DESCRIBE (#11160).
- Extension DASH :
- Supprimez le décalage temporel des contenus multimédias de
MediaLoadData.startTimeMs
etMediaLoadData.endTimeMs
pour les flux DASH sur plusieurs périodes. - Correction d'un bug où la repréparation d'une source multimédia Dash multipériode en direct générait une
IndexOutOfBoundsException
(#10838).
- Supprimez le décalage temporel des contenus multimédias de
- Extension HLS :
- Ajoutez
HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long)
pour définir un délai d'inactivité pendant lequel le thread de chargement attend l'initialisation deTimestampAdjuster
. Si l'initialisation ne se termine pas avant l'expiration du délai, une exceptionPlaybackException
est générée pour éviter que la lecture ne soit arrêtée sans fin. Par défaut, le délai avant expiration est défini sur zéro (#323).
- Ajoutez
- Utilitaires de test :
- Recherchez l'insensibilité à la casse du schéma d'URI dans
DataSourceContractTest
.
- Recherchez l'insensibilité à la casse du schéma d'URI dans
- Suppression des symboles obsolètes :
- Supprimez les constructeurs
DefaultAudioSink
. Utilisez plutôtDefaultAudioSink.Builder
. - Supprimez
HlsMasterPlaylist
. UtilisezHlsMultivariantPlaylist
à la place. - Supprimez
Player.stop(boolean)
. Utilisez plutôtPlayer.stop()
etPlayer.clearMediaItems()
(sireset
esttrue
). - Supprimez deux constructeurs
SimpleCache
obsolètes et utilisez un constructeur non obsolète qui utilise unDatabaseProvider
à la place pour de meilleures performances. - Suppression du constructeur
DefaultBandwidthMeter
. Utilisez plutôtDefaultBandwidthMeter.Builder
. - Supprimez les constructeurs
DefaultDrmSessionManager
et utilisez plutôtDefaultDrmSessionManager.Builder
. - Supprimez deux constructeurs
HttpDataSource.InvalidResponseCodeException
obsolètes et utilisez un constructeur non obsolète qui accepte des champs supplémentaires(cause
,responseBody
) pour améliorer la journalisation des erreurs. - Suppression de
DownloadHelper.forProgressive
,DownloadHelper.forHls
,DownloadHelper.forDash
etDownloadHelper.forSmoothStreaming
, et utilisation deDownloadHelper.forMediaItem
à la place. - Suppression du constructeur
DownloadService
obsolète. Utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètrechannelDescriptionResourceId
. - Supprimez les constantes de chaîne obsolètes pour les jeux de caractères (
ASCII_NAME
,UTF8_NAME
,ISO88591_NAME
,UTF16_NAME
etUTF16LE_NAME
), et utilisez les jeux de caractères Kotlin du packagekotlin.text
,java.nio.charset.StandardCharsets
oucom.google.common.base.Charsets
à la place. - Suppression du constructeur
WorkManagerScheduler
obsolète. 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
, utilisées pour instancier la classeFormat
. Utilisez plutôtFormat.Builder
pour créer des instances deFormat
. - Supprimez les méthodes obsolètes
copyWithMaxInputSize
,copyWithSubsampleOffsetUs
,copyWithLabel
,copyWithManifestFormatInfo
,copyWithGaplessInfo
,copyWithFrameRate
,copyWithDrmInitData
,copyWithMetadata
,copyWithBitrate
etcopyWithVideoSize
, et utilisez les méthodesFormat.buildUpon()
et setter à la place. - Suppression de
ExoPlayer.retry()
obsolète. Utilisez plutôtprepare()
. - Suppression du constructeur obsolète
DefaultTrackSelector
à argument, qui est désormais obsolète. UtilisezDefaultTrackSelector(Context)
à la place. - 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 des quatre méthodes
AnalyticsListener
obsolètes :onDecoderEnabled
, utilisezonAudioEnabled
et/ouonVideoEnabled
à la place.onDecoderInitialized
, utilisezonAudioDecoderInitialized
et/ouonVideoDecoderInitialized
à la place.onDecoderInputFormatChanged
, utilisezonAudioInputFormatChanged
et/ouonVideoInputFormatChanged
à la place.onDecoderDisabled
, utilisezonAudioDisabled
et/ouonVideoDisabled
à la place.
- Supprimez les
Player.Listener.onSeekProcessed
etAnalyticsListener.onSeekProcessed
obsolètes, et utilisezonPositionDiscontinuity
avecDISCONTINUITY_REASON_SEEK
à la place. - Supprimez
ExoPlayer.setHandleWakeLock(boolean)
et utilisezsetWakeMode(int)
à la place. - Suppression de
DefaultLoadControl.Builder.createDefaultLoadControl()
, désormais obsolète, et utilisez plutôtbuild()
. - Suppression de
MediaItem.PlaybackProperties
, désormais obsolète. UtilisezMediaItem.LocalConfiguration
à la place. Le champ obsolèteMediaItem.playbackProperties
est désormais de typeMediaItem.LocalConfiguration
.
- Supprimez les constructeurs
Version 1.1.0-rc01
21 juin 2023
Utilisez la version stable 1.1.0.
Version 1.1.0-beta01
7 juin 2023
Utilisez la version stable 1.1.0.
Version 1.1.0-alpha01
10 mai 2023
Utilisez la version stable 1.1.0.
Version 1.0.0
Version 1.0.2
18 mai 2023
Publication d'androidx.media3:media3-*:1.0.2
.
Liste des commits de la version 1.0.2
Cette version correspond à la version 2.18.7 d'ExoPlayer.
Cette version contient les modifications suivantes depuis la version 1.0.1:
- Bibliothèque principale :
- Ajout de
Buffer.isLastSample()
qui indique siBuffer
contient l'indicateurC.BUFFER_FLAG_LAST_SAMPLE
. - Correction d'un problème qui empêchait l'affichage du dernier frame si le dernier échantillon avec des frames était retiré de la file d'attente sans lire l'exemple de fin de flux. (#11079)
- Ajout de
- Extracteurs :
- Correction de l'analyse de 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: ajout de la prise en charge des fichiers UTF-16 s'ils commencent par un indicateur d'ordre des octets (#319).
- Session:
- Correction d'un problème qui empêchait
MediaController
de mettre à jour ses commandes disponibles lorsqu'il était connecté à un ancienMediaSessionCompat
qui met à jour ses actions. - Correction d'un bug qui empêchait
MediaLibraryService
de renvoyer une valeur nulle pour un appel de l'UI du système versCallback.onGetLibraryRoot
avecparams.isRecent == true
sur l'API 30 (#355). - Correction de la fuite de mémoire de
MediaSessionService
ouMediaLibraryService
(#346). - Correction d'un bug où une mise à jour combinée de
Timeline
et de la position dans unMediaSession
pouvait entraîner la génération d'uneIllegalStateException
parMediaController
.
- Correction d'un problème qui empêchait
Version 1.0.1
18 avril 2023
Publication d'androidx.media3:media3-*:1.0.1
.
Liste des commits de la version 1.0.1
Cette version correspond à la version 2.18.6 d'ExoPlayer.
- Bibliothèque principale :
- Réinitialisation du remplacement du flux en direct cible lors de la recherche de la position par défaut (#11051).
- Correction d'un bug qui provoquait le blocage de la lecture dans des flux d'échantillons vides dans le contenu multimédia.
- Session:
- Correction d'un bug où plusieurs éléments de file d'attente identiques publiés par un ancien
MediaSessionCompat
entraînaient une exception dansMediaController
(#290). - Ajout du transfert manquant de
MediaSession.broadcastCustomCommand
vers l'ancienMediaControllerCompat.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 empêchait les instances
TrackSelectionOverride
envoyées à partir d'uneMediaController
d'être ignorées si elles faisaient référence à un groupe avecFormat.metadata
(#296). - Correction d'un problème qui entraînait la disponibilité de
Player.COMMAND_GET_CURRENT_MEDIA_ITEM
pour accéder aux métadonnées via l'ancienMediaSessionCompat
. - Correction d'un problème où les instances
MediaSession
sur un thread en arrière-plan provoquaient des plantages lorsqu'elles étaient utilisées dansMediaSessionService
(#318). - Correction d'un problème où un récepteur de boutons multimédias était déclaré par la bibliothèque alors que l'application ne l'avait pas prévu (#314).
- Correction d'un bug où plusieurs éléments de file d'attente identiques publiés par un ancien
- DASH:
- Correction du traitement des timelines de segment vides (#11014).
- RTSP:
- Réessayez 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 :
- La différence maximale d'heure de début de deux segments à fusionner est configurable dans
SegmentDownloader
et les sous-classes (#248).
- La différence maximale d'heure de début de deux segments à fusionner est configurable dans
- Audio:
- Vidéo :
- Mappez le format HEVC HDR10 sur
HEVCProfileMain10HDR10
au lieu deHEVCProfileMain10
. - Ajout d'une solution de contournement à un problème d'appareil sur Chromecast avec Google TV et Lenovo M10 FHD Plus, qui entraînait le marquage des flux AVC 60 FPS comme non compatibles (#10898).
- Correction des problèmes de performances lors de la lecture de contenus multimédias avec une fréquence d'images largement supérieure à la fréquence d'actualisation de l'écran.
- Mappez le format HEVC HDR10 sur
- Cast:
- Correction de
STATE_IDLE
temporaire lors de la transition entre les éléments multimédias (#245).
- Correction de
- RTSP:
- Interceptez l'exception IllegalArgumentException générée lors de l'analyse des messages de réponse Décrit RTSP non valides (#10971).
- Session:
- Correction d'un bug qui empêchait le bouton de lecture/pause des notifications d'être mis à jour avec l'état du lecteur (#192).
- Extension IMA :
- Correction d'un bug qui empêchait le démarrage de flux d'insertion dynamique d'annonces sans annonce, car le premier événement
LOADED
(et dans le cas sans annonces, le seul) n'était pas reçu.
- Correction d'un bug qui empêchait le démarrage de flux d'insertion dynamique d'annonces sans annonce, 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)
- UI:
- 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
- UI:
- 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).
- UI:
- 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
- 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 :
- UI:
- 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).
- UI:
- 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.