Media3

Prenez en charge des bibliothèques pour les cas d'utilisation de contenus multimédias.
Dernière mise à jour Version stable Version finale Version bêta Version alpha
27 novembre 2024 1.5.0 - - -

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.5

Version 1.5.0

27 novembre 2024

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

  • Bibliothèque commune :
    • Ajout de ForwardingSimpleBasePlayer qui permet de transférer vers un autre lecteur avec de petits ajustements, tout en assurant une cohérence et une gestion des écouteurs complètes (#1183).
    • Remplacez SimpleBasePlayer.State.playlist par la méthode getPlaylist().
    • Ajout d'un forçage pour SimpleBasePlayer.State.Builder.setPlaylist() afin de spécifier directement un Timeline et des Tracks et Metadata actuels au lieu de créer une structure de playlist.
    • Augmentez minSdk à 21 (Android Lollipop). Cela est conforme à toutes les autres bibliothèques AndroidX.
    • Ajouter un artefact androidx.media3:media3-common-ktx qui fournit des fonctionnalités spécifiques à Kotlin basées sur la bibliothèque Common
    • Ajoutez la fonction d'extension de suspension Player.listen pour faire tourner une coroutine afin d'écouter Player.Events dans la bibliothèque media3-common-ktx.
    • Suppression des annotations @DoNotInline des classes internes hors ligne manuellement conçues pour éviter les échecs de validation de classe d'exécution. Les versions récentes de R8 génèrent désormais automatiquement des appels hors ligne de ce type pour éviter les échecs d'exécution (la mise hors ligne manuelle n'est donc plus nécessaire). Tous les utilisateurs Gradle de la bibliothèque doivent déjà utiliser une version du plug-in Android Gradle qui utilise une version de R8 qui le fait, en raison de compileSdk = 35. Les utilisateurs de la bibliothèque avec des systèmes de compilation autres que Gradle devront s'assurer que leur étape de réduction/obscurcissement équivalente à R8 effectue un processus de mise en ligne automatique similaire afin d'éviter les échecs de validation de classe au moment de l'exécution. Cette modification a déjà été effectuée dans d'autres bibliothèques AndroidX.
  • ExoPlayer :
    • MediaCodecRenderer.onProcessedStreamChange() peut désormais être appelé pour chaque élément multimédia. Auparavant, il n'était pas appelé pour le premier. Pour l'activer, utilisez MediaCodecRenderer.experimentalEnableProcessedStreamChangedAtStart().
    • Ajout de PreloadMediaSource.PreloadControl.onPreloadError pour permettre aux implémentations PreloadMediaSource.PreloadControl d'effectuer des actions en cas d'erreur.
    • Ajoutez BasePreloadManager.Listener pour propager les événements de précharge aux applications.
    • Autorisez la modification du délai avant expiration du client SNTP et réessayez les adresses alternatives en cas d'expiration (numéro 1540).
    • Supprimez MediaCodecAdapter.Configuration.flags, car le champ était toujours nul.
    • Autorisez l'utilisateur à sélectionner le haut-parleur intégré pour la lecture sur l'API Wear OS 35 ou version ultérieure (lorsque l'appareil annonce la prise en charge de cette fonctionnalité).
    • Différez l'appel de blocage vers Context.getSystemService(Context.AUDIO_SERVICE) jusqu'à ce que la gestion de la sélection audio soit activée. Cela garantit que l'appel bloquant n'est pas effectué si la gestion de la sélection audio n'est pas activée (numéro 1616).
    • Autorisation de la lecture quelle que soit la durée mise en mémoire tampon en cas d'échec du chargement (#1571).
    • Ajoutez AnalyticsListener.onRendererReadyChanged() pour signaler quand les moteurs de rendu individuels permettent la lecture.
    • Correction du problème qui faisait que MediaCodec.CryptoException était parfois signalé comme une "erreur d'exécution inattendue" lorsque MediaCodec était exécuté en mode asynchrone (comportement par défaut sur l'API 31 et versions ultérieures).
    • Transmettez bufferedDurationUs au lieu de bufferedPositionUs avec PreloadMediaSource.PreloadControl.onContinueLoadingRequested(). DefaultPreloadManager.Status.STAGE_LOADED_TO_POSITION_MS est également remplacé par DefaultPreloadManager.Status.STAGE_LOADED_FOR_DURATION_MS. Les applications doivent alors transmettre une valeur représentant une durée spécifique à partir de la position de début par défaut pour laquelle la source multimédia correspondante doit être préchargée avec cette IntDef, au lieu d'une position.
    • Ajout d'une implémentation ForwardingRenderer qui transfère tous les appels de méthode vers un autre moteur de rendu (1703).
    • Ajoutez le préchargement de la playlist pour l'élément suivant. Les applications peuvent activer le préchargement en appelant ExoPlayer.setPreloadConfiguration(PreloadConfiguration) en conséquence. Par défaut, le préchargement est désactivé. Lorsque l'option est activée et pour ne pas interférer avec la lecture, DefaultLoadControl limite le préchargement au démarrage et à la poursuite uniquement lorsque le lecteur ne charge pas de contenu pour la lecture. Les applications peuvent modifier ce comportement en implémentant LoadControl.shouldContinuePreloading() en conséquence (par exemple, en remplaçant cette méthode dans DefaultLoadControl). L'implémentation par défaut de LoadControl désactive le préchargement si une application utilise une implémentation personnalisée de LoadControl.
    • Ajout de la méthode MediaSourceEventListener.EventDispatcher.dispatchEvent() pour permettre l'appel d'événements des écouteurs de sous-classes (1736).
    • Ajoutez DefaultPreloadManager.Builder qui crée les instances DefaultPreloadManager et ExoPlayer avec des configurations partagées de manière cohérente.
    • Suppression du paramètre Renderer[] de LoadControl.onTracksSelected(), car l'implémentation de DefaultLoadControl peut récupérer les types de flux à partir de ExoTrackSelection[].
    • DefaultLoadControl.calculateTargetBufferBytes(Renderer[], ExoTrackSelection[]) obsolète et méthode marquée comme définitive pour éviter les forçages. Utilisez plutôt le nouveau DefaultLoadControl.calculateTargetBufferBytes(ExoTrackSelection[]).
    • Enregistrez les événements MediaSourceEventListener à partir de sources secondaires dans MergingMediaSource. Des événements de début/d'erreur/d'annulation/d'achèvement du chargement seront alors signalés pour les sous-titres téléchargés côté client (ceux ajoutés avec MediaItem.LocalConfiguration.subtitleConfigurations), qui peuvent apparaître comme des événements de chargement en double émis à partir de AnalyticsListener.
    • Empêcher les erreurs de sous-titres et de métadonnées d'arrêter complètement la lecture Au lieu de cela, la piste problématique est désactivée et la lecture des autres pistes se poursuit (#1722).
      • Dans la nouvelle gestion des sous-titres (lors de l'extraction), l'analyse associée (par exemple, les données de sous-titres non valides) et les erreurs de chargement (par exemple, HTTP 404) sont émises via des rappels onLoadError.
      • Dans l'ancienne gestion des sous-titres (lors du rendu), seules les erreurs de chargement associées sont émises via les rappels onLoadError, tandis que les erreurs d'analyse sont ignorées en silence (il s'agit d'un comportement préexistant).
    • Correction d'un bug qui pouvait entraîner le blocage des images à la fin de l'élément lorsque les durées des éléments ou des périodes de la playlist dans les flux DASH multipériodes ne correspondaient pas au contenu réel (numéro 1698).
    • Ajout d'un setter à SntpClient pour définir le temps écoulé maximal depuis la dernière mise à jour après laquelle le client est réinitialisé (#1794).
  • Transformateur :
    • Ajoutez SurfaceAssetLoader, qui permet de mettre en file d'attente des données vidéo dans Transformer via un Surface.
    • ImageAssetLoader signale une entrée non prise en charge via AssetLoader.onError au lieu de générer une IllegalStateException.
    • Rendre le paramétrage de la durée de l'image à l'aide de MediaItem.Builder.setImageDurationMs obligatoire pour l'exportation d'images.
    • Ajout de la prise en charge de l'exportation des espaces dans les séquences d'éléments audio EditedMediaItems.
  • Sélection de la piste :
    • DefaultTrackSelector: privilégiez l'audio basée sur les objets à l'audio basée sur les canaux lorsque les autres facteurs sont égaux.
  • Extracteurs :
    • Autorisez Mp4Extractor et FragmentedMp4Extractor à identifier les échantillons H264 qui ne sont pas utilisés comme référence par les échantillons suivants.
    • Ajout d'une option permettant d'activer la recherche basée sur l'index dans AmrExtractor.
    • Traitement des fichiers MP3 dont la taille est supérieure à 128 Ko entre les trames valides comme tronqués (au lieu d'être considérés comme non valides). Cela signifie que les fichiers contenant des données autres que MP3 à la fin, sans autre métadonnées pour indiquer la longueur des octets MP3, arrêtent désormais la lecture à la fin des données MP3 au lieu d'échouer avec ParserException: Searched too many bytes.{contentIsMalformed=true, dataType=1} (numéro 1563).
    • Correction de la gestion des échantillons de pré-roll pour les positions de début des médias autres que les images clés lors du traitement des listes de montage dans les fichiers MP4 (#1659).
    • Amélioration du calcul de la fréquence d'images à l'aide de la durée du contenu multimédia à partir de la zone mdhd dans Mp4Extractor et FragmentedMp4Extractor (numéro 1531).
    • Correction de la mise à l'échelle incorrecte de media_time dans les listes de montage MP4. Bien que segment_duration ait déjà été correctement mis à l'échelle à l'aide de la échelle temporelle du film, media_time est désormais correctement mis à l'échelle à l'aide de l'échelle temporelle de la piste, comme spécifié par la norme de format MP4 (#1792).
    • Gérer les images hors séquence dans le calcul endIndices pour MP4 avec la liste de montage (#1797).
    • Correction de l'analyse de la durée des médias dans le champ mdhd des fichiers MP4 pour gérer les valeurs -1 (#1819).
    • Ajout de la prise en charge de l'identification de la zone h263 dans les fichiers MP4 pour les vidéos H.263 (1821).
    • Prise en charge du format de fichier multimédia de base ISO AC-4 de niveau 4 (1265).
  • DataSource :
    • Mise à jour de HttpEngineDataSource pour permettre l'utilisation à partir de la version S, extension 7 au lieu du niveau d'API 34 (numéro 1262).
    • DataSourceContractTest: affirmez que DataSource.getUri() renvoie l'URI résolu (comme indiqué dans la documentation). Si ce n'est pas le cas de l'URI demandé, les tests peuvent l'indiquer à l'aide de la nouvelle méthode DataSourceContractTest.TestResource.Builder.setResolvedUri().
    • DataSourceContractTest: affirme que DataSource.getUri() et getResponseHeaders() renvoient leur valeur "open" après un appel à open() ayant échoué (en raison d'une ressource introuvable) et avant un appel close() ultérieur.
      • Le forçage de DataSourceContractTest.getNotFoundResources() permet aux sous-classes de test de fournir plusieurs ressources "introuvables", ainsi que les en-têtes attendus. Cela permet de faire la distinction entre le code HTTP 404 (avec en-têtes) et "serveur introuvable" (sans en-têtes).
  • Audio :
    • Configurez automatiquement les métadonnées de niveau sonore CTA-2075 sur le codec si elles sont présentes dans le contenu multimédia.
    • Assurez-vous que le volume diminue de manière fluide lors de la recherche.
    • Correction des bruits de claquement pouvant se produire lors des recherches.
    • Correction de l'accumulation d'erreurs de troncation pour l'algorithme de changement de hauteur/de temps de Sonic.
    • Correction d'un bug dans SpeedChangingAudioProcessor qui entraîne la suppression des frames de sortie.
  • Vidéo :
    • MediaCodecVideoRenderer évite de décoder des échantillons qui ne sont ni affichés ni utilisés comme référence par d'autres échantillons.
    • À partir de l'API 35, MediaCodecAdapter peut désormais recevoir un Surface null dans configure et appeler une nouvelle méthode detachOutputSurface pour supprimer un Surface précédemment défini si le codec le prend en charge (MediaCodecInfo.detachedSurfaceSupported).
    • Utilisez les valeurs de format de pixel fournies par MediaCodecAdapter, le cas échéant, lors du traitement de onOutputFormatChanged (numéro 1371).
    • Ajout d'un correctif pour un problème d'appareil sur la Galaxy Tab S7 FE qui entraîne la mise en surbrillance des flux H264 sécurisés à 60 FPS comme non compatibles (#1619).
    • Ajout d'un correctif pour les codecs qui se bloquent après le dernier échantillon sans renvoyer de signal de fin de flux.
  • Texte :
    • Ajout d'un VoiceSpan personnalisé et de données pour les intervalles vocaux WebVTT (#1632).
    • Assurez-vous que les sous-titres WebVTT au format HLS avec des codes temporels de sous-titres très longs (qui débordent une long 64 bits lorsqu'ils sont représentés en microsecondes et multipliés par la base de temps MPEG 90,000) s'affichent (#1763).
    • Prise en charge des sous-titres CEA-608 dans les contenus Dolby Vision (#1820).
    • Correction du blocage de la lecture sur les flux multipériodes DASH lorsque les sous-titres CEA-608 sont activés (#1863).
  • Métadonnées :
    • Attribuez le type C.TRACK_TYPE_METADATA aux pistes contenant du contenu icy ou vnd.dvb.ait.
  • Image :
    • Ajoutez ExternallyLoadedImageDecoder pour une intégration simplifiée avec des bibliothèques de chargement d'images externes telles que Glide ou Coil.
  • DataSource :
    • Ajout de FileDescriptorDataSource, un nouveau DataSource qui peut être utilisé pour lire à partir d'un FileDescriptor (#3757).
  • Effet :
    • Ajout d'une solution de contournement DefaultVideoFrameProcessor pour l'ajustement mineur de SurfaceTexture. SurfaceTexture peut inclure une petite mise à l'échelle qui coupe une bordure de 1 texel autour du bord d'un tampon rogné. Ce problème est désormais géré de sorte que la sortie soit plus proche de ce qui est attendu.
    • Accélérez DefaultVideoFrameProcessor.queueInputBitmap(). Par conséquent, l'exportation d'images vers des vidéos avec Transformer est plus rapide.
  • Extension IMA :
    • Correction d'un bug qui pouvait entraîner une ArrayIndexOutOfBoundsException dans ImaServerSideAdInsertionMediaSource lors de la suppression de la playlist.
    • Correction d'un bug qui pouvait entraîner une erreur ArrayIndexOutOfBoundsException lors de la lecture au-delà de la dernière annonce mid-roll lorsque des flux DAI insérés côté serveur étaient utilisés sans pré-annonce (#1741).
  • Session :
    • Ajoutez MediaButtonReceiver.shouldStartForegroundService(Intent) pour permettre aux applications de supprimer une commande de lecture entrante pour la reprise de la lecture en ignorant cette méthode. Par défaut, le service est toujours démarré et la lecture ne peut pas être supprimée sans que le système ne plante le service avec un ForegroundServiceDidNotStartInTimeException (#1528).
    • Correction d'un bug qui entraînait l'envoi des commandes personnalisées envoyées à partir d'un MediaBrowser à MediaSessionCompat.Callback au lieu de la variante MediaBrowserServiceCompat de la méthode lorsqu'elle était connectée à un ancien service. Cela empêchait MediaBrowser de recevoir la valeur de retour réelle renvoyée par l'ancien service (numéro 1474).
    • Gérer les IllegalArgumentException générés par les appareils de certains fabricants lors de la configuration du broadcast receiver pour les intents de bouton multimédia (numéro 1730).
    • Ajoutez des boutons de commande pour les éléments multimédias. Cela ajoute l'API Media3 pour ce qui était appelé Custom browse actions avec l'ancienne bibliothèque avec MediaBrowserCompat. Notez qu'avec Media3, les boutons de commande pour les éléments multimédias sont disponibles pour MediaBrowser et MediaController. Consultez la section Actions de navigation personnalisées d'AAOS.
    • Correction d'un bug qui empêchait parfois un contrôleur Media3 de laisser une application de session démarrer un service de premier plan après avoir demandé play().
    • Limitez CommandButton.Builder.setIconUri à n'accepter que des URI de contenu.
    • Transmettez les indices de connexion d'un navigateur Media3 à l'MediaBrowserCompat initiale lorsque vous vous connectez à une ancienne MediaBrowserCompat. Le service peut recevoir les indices de connexion transmis en tant qu'indices racine avec le premier appel à onGetRoot().
    • Correction d'un bug qui empêchait un MediaBrowser connecté à un ancien service de navigateur de recevoir une erreur envoyée par le service après que le navigateur s'est abonné à un parentid.
    • Amélioration du comportement d'interopérabilité afin qu'un navigateur Media3 connecté à une ancienne MediaBrowserService ne demande pas deux fois les enfants d'un parentId lors de l'abonnement à un parent.
  • Interface utilisateur :
    • Rendre la vidéo étirée/recadrée dans la solution de contournement PlayerView-in-Compose-AndroidView facultative, en raison de problèmes liés aux transitions partagées basées sur XML. Les applications qui utilisent PlayerView dans AndroidView doivent appeler PlayerView.setEnableComposeSurfaceSyncWorkaround pour activer cette fonctionnalité (#1237, #1594).
    • Ajout de setFullscreenButtonState à PlayerView pour permettre la mise à jour de l'icône du bouton plein écran à la demande, c'est-à-dire en dehors de la bande et non de manière réactive à une interaction de clic (#1590, #184).
    • Correction d'un bug qui empêchait l'option "Aucune" de la sélection de texte de fonctionner si des préférences de sélection de piste de texte définies par l'application étaient définies.
  • Extension DASH :
    • Prise en charge des périodes commençant au milieu d'un segment. (#1440)
  • Extension Smooth Streaming :
    • Correction d'une erreur Bad magic number for Bundle lors de la lecture de flux SmoothStreaming avec des pistes de texte (#1779).
  • Extension RTSP :
    • Correction de la suppression des informations utilisateur pour les URL contenant des caractères @ encodés (#1138).
    • Correction du plantage lors de l'analyse des paquets RTP avec des extensions d'en-tête (#1225).
  • Extensions du décodeur (FFmpeg, VP9, AV1, etc.):
    • Ajoutez le module de décodeur IAMF, qui prend en charge la lecture de fichiers MP4 contenant des pistes IAMF à l'aide de la bibliothèque native libiamf pour synthétiser l'audio.
      • La lecture est activée avec une mise en page stéréo et 5.1 avec spatialisation, ainsi qu'avec le suivi de la tête activé en option, mais la compatibilité avec la lecture binaurale n'est pas disponible pour le moment.
    • Ajout de la prise en charge des pages de 16 ko pour les extensions de décodeur sur Android 15 (#1685).
  • Extension Cast :
    • Arrêtez de nettoyer la chronologie après la déconnexion de CastSession, ce qui permet à l'application d'envoi de reprendre la lecture localement après une déconnexion.
    • Renseignez le DeviceInfo de CastPlayer lorsqu'un Context est fourni. Cela permet d'associer MediaSession à RoutingSession, ce qui est nécessaire pour intégrer le commutateur de sortie (#1056).
  • Utilitaires de test :
    • DataSourceContractTest inclut désormais des tests pour vérifier les éléments suivants :
      • Le flux d'entrée read position est mis à jour.
      • La mémoire tampon de sortie offset est appliquée correctement.
  • Application de démonstration
    • Résolution des fuites de mémoire dans l'application de démonstration de format court (#1839).
  • Suppression des symboles obsolètes :
    • Suppression des Player.hasPrevious et Player.hasPreviousWindow() obsolètes. Utilisez Player.hasPreviousMediaItem() à la place.
    • Suppression de la méthode Player.previous() obsolète. Utilisez Player.seekToPreviousMediaItem() à la place.
    • Suppression de la méthode DrmSessionEventListener.onDrmSessionAcquired obsolète.
    • Suppression des constructeurs DefaultEncoderFactory obsolètes. Utilisez DefaultEncoderFactory.Builder à la place.

Version 1.5.0-rc02

19 novembre 2024

Utilisez la version stable 1.5.0.

Version 1.5.0-rc01

13 novembre 2024

Utilisez la version stable 1.5.0.

Version 1.5.0-beta01

30 octobre 2024

Utilisez la version stable 1.5.0.

Version 1.5.0-alpha01

10 septembre 2024

Utilisez la version stable 1.5.0.

Version 1.4.0

Version 1.4.1

27 août 2024

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

  • ExoPlayer :
    • Gérer les rappels de précharge de manière asynchrone dans PreloadMediaSource (1568)
    • Autorisation de la lecture quelle que soit la durée mise en mémoire tampon en cas d'échec du chargement (#1571).
  • Extracteurs :
    • MP3: correction de l'erreur Searched too many bytes en ignorant correctement les données non MP3 en fin de fichier en fonction du champ de longueur dans un frame Info (#1480).
  • Texte :
    • TTML: correction de la gestion des valeurs tts:fontSize en pourcentage pour s'assurer qu'elles sont correctement héritées des nœuds parents avec des valeurs tts:fontSize en pourcentage.
    • Correction de IndexOutOfBoundsException dans LegacySubtitleUtil, car la gestion du cas où l'heure de début de la sortie demandée est supérieure ou égale à l'heure de l'événement final dans Subtitle était incorrecte (#1516).
  • DRM :
    • Correction de l'erreur android.media.MediaCodec$CryptoException: Operation not supported in this configuration: ERROR_DRM_CANNOT_HANDLE sur les appareils équipés de l'API 31 ou version ultérieure qui diffusent du contenu Widevine L1. Cette erreur est due à une implémentation incomplète de la méthode MediaDrm.requiresSecureDecoder du framework (numéro 1603).
  • Effet :
    • Ajoutez une méthode release() à GlObjectsProvider.
  • Session :
    • Transformation d'un double appui sur KEYCODE_HEADSETHOOK en action de "rechercher la suivante", comme documenté (#1493).
    • Gérer KEYCODE_HEADSETHOOK en tant que commande "play" dans MediaButtonReceiver pour décider de l'ignorer afin d'éviter un ForegroundServiceDidNotStartInTimeException (numéro 1581).
  • Extension RTSP :
    • Ignorer les descriptions multimédias non valides lors de l'analyse SDP (#1087)

Version 1.4.0

25 juillet 2024

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

  • Bibliothèque commune :
    • Transmettez les appels de recherche présumés sans opération aux méthodes BasePlayer.seekTo() et SimpleBasePlayer.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 avec mediaItemIndex == C.INDEX_UNSET.
    • Suppression de la dépendance de compilation sur le désucrage amélioré de Java 8 (#1312).
    • Assurez-vous que la durée transmise à MediaItem.Builder.setImageDurationMs() est ignorée pour un MediaItem autre qu'une image (comme indiqué dans la documentation).
    • Ajoutez Format.customData pour stocker des informations personnalisées fournies par l'application sur les instances Format.
  • ExoPlayer :
    • Ajoutez BasePreloadManager, qui coordonne le préchargement de plusieurs sources en fonction des priorités définies par leur rankingData. Vous pouvez personnaliser cette classe. Ajoutez DefaultPreloadManager, qui utilise PreloadMediaSource pour précharger des échantillons multimédias des sources dans la mémoire et utilise un entier rankingData qui indique l'index d'un élément dans l'UI.
    • Ajoutez PlayerId à la plupart des méthodes de LoadControl pour permettre aux implémentations de LoadControl de prendre en charge plusieurs joueurs.
    • Suppression de Buffer.isDecodeOnly() et C.BUFFER_FLAG_DECODE_ONLY. Il n'est pas nécessaire de définir cet indicateur, car les moteurs de rendu et les décodeurs décident de sauter les tampons en fonction du code temporel. Les implémentations personnalisées de Renderer doivent vérifier si la durée de la mémoire tampon est d'au moins BaseRenderer.getLastResetPositionUs() pour décider si un échantillon doit être affiché. Les implémentations SimpleDecoder personnalisées peuvent vérifier isAtLeastOutputStartTimeUs() si nécessaire ou marquer d'autres tampons avec DecoderOutputBuffer.shouldBeSkipped pour les ignorer.
    • Autorisez une valeur nulle à être renvoyée par TargetPreloadStatusControl.getTargetPreloadStatus(T) pour indiquer de ne pas précharger un MediaSource avec le rankingData donné.
    • Ajout de remove(MediaSource) à BasePreloadManager.
    • Ajoutez reset() à BasePreloadManager pour libérer toutes les sources de stockage tout en conservant l'instance du gestionnaire de préchargement.
    • Ajout de ExoPlayer.setPriority() (et de Builder.setPriority()) pour définir la valeur de priorité utilisée dans PriorityTaskManager et pour l'importance de MediaCodec à partir de l'API 35.
    • Correction d'un problème de mise à jour de la dernière heure de mise en tampon, qui entraînait une clé bs (manque de mémoire tampon) incorrecte dans CMCD (#1124).
    • Ajoutez PreloadMediaSource.PreloadControl.onLoadedToTheEndOfSource(PreloadMediaSource) pour indiquer que la source a été chargée jusqu'à la fin. Cela permet aux implémentations DefaultPreloadManager et PreloadMediaSource.PreloadControl personnalisées de précharger la source suivante ou d'effectuer d'autres actions.
    • Correction d'un bug qui pouvait entraîner une exception de lecture lorsque le saut de silence à la fin des éléments.
    • Ajoutez clear à PreloadMediaSource pour supprimer la période de préchargement.
    • Ajout d'un nouveau code d'erreur PlaybackException.ERROR_CODE_DECODING_RESOURCES_RECLAIMED utilisé lorsque les ressources de codec sont récupérées pour des tâches de priorité plus élevée.
    • Laissez AdsMediaSource charger les annonces pré-roll avant la fin de la préparation initiale du contenu multimédia (#1358).
    • Correction d'un bug qui entraînait le transfert de la lecture vers STATE_ENDED lors de la préparation d'une diffusion en direct DASH multipériode après la suppression de la période d'origine du fichier manifeste.
    • Renommez onTimelineRefreshed() en onSourcePrepared() et onPrepared() en onTracksSelected() dans PreloadMediaSource.PreloadControl. Renommez également les IntDefs dans DefaultPreloadManager.Stage en conséquence.
    • Ajout d'une prise en charge expérimentale de la planification dynamique pour mieux aligner le travail sur les cycles de réveil du processeur et retarder le réveil jusqu'au moment où les moteurs de rendu peuvent progresser. Vous pouvez l'activer à l'aide de experimentalSetDynamicSchedulingEnabled() lorsque vous configurez votre instance ExoPlayer.
    • Ajout de Renderer.getDurationToProgressUs(). Un Renderer peut implémenter cette méthode pour renvoyer à ExoPlayer la durée de la lecture qui doit avancer pour que le moteur de rendu progresse. Si ExoPlayer est défini avec experimentalSetDynamicSchedulingEnabled(), ExoPlayer appellera cette méthode lors du calcul du moment où planifier sa tâche de travail.
    • Ajoutez MediaCodecAdapter#OnBufferAvailableListener pour envoyer une alerte lorsque les tampons d'entrée et de sortie sont disponibles pour MediaCodecRenderer. MediaCodecRenderer signalera ExoPlayer lors de la réception de ces rappels. Si ExoPlayer est défini avec experimentalSetDynamicSchedulingEnabled(), ExoPlayer planifiera sa boucle de travail, car les moteurs de rendu peuvent progresser.
    • Utilisez la classe de données pour les méthodes LoadControl au lieu de paramètres individuels.
    • Ajoutez ExoPlayer.isReleased() pour vérifier si Exoplayer.release() a été appelé.
    • Ajout de ExoPlayer.Builder.setMaxSeekToPreviousPositionMs() pour configurer la position maximale pour laquelle seekToPrevious() recherche l'élément précédent (#1425).
    • Correction de certaines incohérences liées à la priorité audio, par exemple, pas de signalement de perte de priorité complète ou temporaire lorsque le lecteur est mis en pause (numéro 1436).
    • Correction d'un éventuel IndexOutOfBoundsException causé par des extracteurs signalant des pistes supplémentaires après l'étape de préparation initiale (#1476).
    • Effects dans ExoPlayer.setVideoEffect() recevra les codes temporels avec le décalage du moteur de rendu supprimé (#1098).
    • Correction d'une exception IllegalArgumentException potentielle lors du traitement d'une erreur du lecteur qui s'est produite lors de la lecture d'un autre élément de playlist (#1483).
  • Transformateur :
    • Ajoutez audioConversionProcess et videoConversionProcess à ExportResult pour indiquer comment le canal correspondant du fichier de sortie a été créé.
    • Assouplissement des vérifications au niveau H.264 pour l'optimisation du recadrage.
    • Possibilité de passer d'un contenu multimédia SDR à un contenu multimédia HDR dans une séquence.
    • Ajout de la prise en charge des effets audio au niveau de la composition.
    • Prise en charge du transcodage d'images Ultra HDR en vidéos HDR.
    • Correction d'un problème où le DefaultAudioMixer n'affiche pas la quantité correcte d'octets après avoir été réinitialisé et réutilisé.
    • Correction d'un bug de décodeur qui limitait le nombre de canaux audio à la stéréo lors de la gestion de l'entrée PCM.
    • Lorsque vous sélectionnez des pistes dans ExoPlayerAssetLoader, ignorez les contraintes de nombre de canaux audio, car elles ne s'appliquent qu'à la lecture.
    • Remplacez l'interface androidx.media3.transformer.Muxer par androidx.media3.muxer.Muxer et supprimez androidx.media3.transformer.Muxer.
    • Correction du chargement d'images HEIC à partir de schémas d'URI de contenu. (#1373)
    • Ajustez la durée de la piste audio dans AudioGraphInput pour améliorer la synchronisation audio/vidéo.
    • Supprimez le champ ExportResult.processedInputs. Si vous utilisez ce champ pour les détails du codec, utilisez plutôt DefaultDecoderFactory.listener. En cas d'exception de codec, les détails du codec seront disponibles dans ExportException.codecInfo.
  • Extracteurs :
    • MPEG-TS: faites avancer la modification en vous assurant que le dernier frame est affiché en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (7909). Intégration de correctifs pour résoudre les problèmes apparus dans les flux HLS I-frame uniquement(#1150) et les flux HLS H.262 (#1126).
    • MP3: privilégiez la taille des données d'un frame Info à la taille indiquée par le flux sous-jacent (par exemple, la taille du fichier ou l'en-tête HTTP Content-Length). Cela permet d'exclure les données de bande-annonce non lisibles (par exemple, l'illustration de l'album) des calculs de recherche de débit constant, ce qui rend les recherches plus précises (numéro 1376).
    • MP3: utilisez le nombre de trames et d'autres données dans une trame Info (le cas échéant) pour calculer un débit moyen pour la recherche de débit constant, plutôt que d'extrapoler à partir du débit de la trame après la trame Info, qui peut être artificiellement faible, par exemple la trame PCUT (numéro 1376).
    • Correction de l'extraction du format audio PCM dans les conteneurs AVI.
  • Audio :
    • Correction des attributs d'encodage DTS:X Profile 2 pour la lecture en passthrough (#1299).
    • Pour la lecture hors charge, réinitialisez le champ de suivi de la finalisation du flux dans DefaultAudioSink avant d'appeler AudioTrack.stop() afin que AudioTrack.StreamEventCallback#onPresentationEnded identifie correctement quand toutes les données en attente ont été lues.
    • Correction d'un bug dans SilenceSkippingAudioProcessor où les transitions entre différents formats audio (par exemple, stéréo vers mono) peuvent entraîner l'émission d'une exception par le processeur (#1352).
    • Implémentez MediaCodecAudioRenderer.getDurationToProgressUs() afin qu'ExoPlayer planifie dynamiquement sa boucle de travail principale au moment où le MediaCodecAudioRenderer peut progresser.
  • Vidéo :
    • Correction d'un problème qui entraînait l'arrivée de Listener.onRenderedFirstFrame() trop tôt lors du changement de surface en cours de lecture.
    • Correction de la logique de remplacement du décodeur pour que Dolby Vision utilise un décodeur AV1 compatible si nécessaire (#1389).
    • Correction de l'exception de codec pouvant être causée par l'activation d'un moteur de rendu vidéo pendant la lecture.
  • Texte :
    • Correction d'un problème qui entraînait le saut des sous-titres commençant avant une position de recherche. Ce problème n'a été introduit que dans Media3 1.4.0-alpha01.
    • Modifiez le comportement d'analyse des sous-titres par défaut pour qu'il se produise lors de l'extraction plutôt que lors du rendu (voir le schéma d'architecture d'ExoPlayer pour connaître la différence entre l'extraction et le rendu).
      • Cette modification peut être remplacée en appelant à la fois MediaSource.Factory.experimentalParseSubtitlesDuringExtraction(false) et TextRenderer.experimentalSetLegacyDecodingEnabled(true). Consultez la documentation sur la personnalisation pour savoir comment connecter ces composants à une instance ExoPlayer. Ces méthodes (et toute compatibilité avec l'ancien décodage des sous-titres) seront supprimées dans une prochaine version.
      • Les applications avec des implémentations SubtitleDecoder personnalisées doivent les mettre à jour pour implémenter SubtitleParser à la place (et SubtitleParser.Factory au lieu de SubtitleDecoderFactory).
    • PGS: Correction du décodage de longueur d'exécution pour résoudre 0 en tant qu'index de couleur, au lieu d'une valeur de couleur littérale (#1367).
    • CEA-708: ignorez la valeur rowLock. La spécification CEA-708-E S-2023 indique que rowLock et columnLock doivent être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la prise en charge de columnLock n'est pas implémentée, il est donc supposé qu'elle est toujours fausse).
      • Cette modification était initialement incluse dans les notes de version 1.3.0-alpha01, mais elle a été accidentellement annulée avant la version 1.3.0-rc01. Ce problème est maintenant résolu.
    • CEA-708: Éviter l'ajout de lignes vides en double par la gestion naïve de la commande "set pen location" par ExoPlayer (#1315).
    • Correction d'un IllegalArgumentException à partir de LegacySubtitleUtil lorsqu'un extrait de sous-titres WebVTT ne contient aucun repère, par exemple dans le cadre d'un flux DASH (#1516).
  • Métadonnées :
    • Correction du mappage des tags de tri MP4 vers ID3. Auparavant, les tags MP4 "album sort" (soal), "artist sort" (soar) et "album artist sort" (soaa) étaient mal mappés sur les tags ID3 TSO2, TSOA et TSOP (numéro 1302).
    • Correction de la lecture des balises numériques MP4 (/iTunes) gnre (genre) et tmpo (tempo) lorsque la valeur est supérieure à un octet.
    • Propagation du frame TCON ID3 vers MediaMetadata.genre (#1305).
  • Image :
    • Prise en charge des grilles de vignettes DASH non carrées (numéro 1300).
    • Ajout de la prise en charge d'AVIF pour les API 34 et versions ultérieures.
    • Autorisez null en tant que paramètre pour ExoPlayer.setImageOutput() afin de supprimer un ImageOutput précédemment défini.
  • DataSource :
    • Implémentation de la prise en charge des URI de ressources brutes android.resource://package/id, où package est différent du package de l'application actuelle. Cette méthode ne fonctionnait pas auparavant, mais elle est plus efficace pour accéder aux ressources d'un autre package que par nom.
    • Vérifiez systématiquement que url n'est pas nul dans les constructeurs DataSpec. Ce paramètre a déjà été annoté comme non nul.
    • Autorisez ByteArrayDataSource à résoudre un URI en tableau d'octets lors de open(), au lieu d'être encodé en dur lors de la création (#1405).
  • DRM :
    • Autorisez le paramétrage d'un LoadErrorHandlingPolicy sur DefaultDrmSessionManagerProvider (#1271).
  • Effet :
    • Prise en charge de plusieurs changements de vitesse dans le même EditedMediaItem ou Composition dans SpeedChangeEffect.
    • Prise en charge de la sortie HLG et PQ à partir d'une entrée bitmap ultra HDR.
    • Ajout de la prise en charge d'EGL_GL_COLORSPACE_BT2020_HLG_EXT, qui améliore la sortie de surface HLG dans ExoPlayer.setVideoEffect et la SurfaceView de débogage de Transformer.
    • Mettez à jour l'implémentation de la matrice de superposition pour la rendre cohérente avec la documentation en inversant les valeurs x et y appliquées dans setOverlayFrameAnchor(). Si vous utilisez OverlaySettings.Builder.setOverlayFrameAnchor(), inversez leurs valeurs x et y en les multipliant par -1.
    • Correction d'un bug qui provoquait le plantage de TimestampWrapper lorsqu'il était utilisé avec ExoPlayer#setVideoEffects (#821).
    • Modification de l'espace de travail de couleur SDR par défaut des couleurs linéaires en vidéo SDR électrique BT 709. Fournissez également une troisième option pour conserver l'espace colorimétrique d'origine.
    • Permet de définir un ordre Z indéterminé pour les EditedMediaItemSequences (numéro 1055).
    • Maintenez une plage de luminance cohérente entre les différents éléments de contenu HDR (utilise la plage HLG).
    • Ajout de la compatibilité avec les superpositions Ultra HDR (bitmap) sur les contenus HDR.
    • Autorisez les effets SeparableConvolution à être utilisés avant l'API 26.
    • Supprimez les OverlaySettings.useHdr inutilisés, car la plage dynamique de la superposition et du frame doit correspondre.
    • Ajout de la compatibilité HDR pour TextOverlay. La luminosité de la superposition de texte peut être ajustée avec OverlaySettings.Builder.setHdrLuminanceMultiplier().
  • Extension IMA :
    • Promotion de l'API requise pour que les applications diffusent des flux publicitaires d'insertion dynamique d'annonces en version stable.
    • Ajout de replaceAdTagParameters(Map <String, String>) à ImaServerSideAdInsertionMediaSource.AdLoader, ce qui permet de remplacer les paramètres de la balise publicitaire au moment de l'exécution.
    • Correction d'un bug où VideoAdPlayer.VideoAdPlayerCallback.onError() n'était pas appelé lorsqu'une erreur de lecteur se produisait lors de la lecture d'une annonce (#1334).
    • Passage du SDK IMA vers la version 3.33.0 pour corriger un NullPointerException lors de l'utilisation d'URI de tags d'annonces data:// (numéro 700).
  • Session :
    • Remplacez la valeur par défaut CommandButton.enabled par true et assurez-vous que la valeur peut rester "false" pour les contrôleurs, même si la commande associée est disponible.
    • Ajoutez des constantes d'icônes pour CommandButton qui doivent être utilisées à la place des ressources d'icônes personnalisées.
    • Ajout de MediaSessionService.isPlaybackOngoing() pour permettre aux applications de demander si le service doit être arrêté dans onTaskRemoved() (#1219).
    • Ajoutez MediaSessionService.pauseAllPlayersAndStopSelf(), qui permet de mettre en pause la lecture de toutes les sessions et d'appeler stopSelf() pour mettre fin au cycle de vie de MediaSessionService.
    • Remplacez MediaSessionService.onTaskRemoved(Intent) pour fournir une implémentation par défaut sécurisée qui maintient le service en cours d'exécution au premier plan si la lecture est en cours ou arrête le service dans le cas contraire.
    • Masquage de la barre de défilement dans la notification multimédia pour les diffusions en direct en ne définissant pas la durée dans les métadonnées de la session de la plate-forme (1256).
    • Alignez la conversion de MediaMetadata sur MediaDescriptionCompat pour utiliser la même logique et le même ordre de préférence lors de la sélection des propriétés de métadonnées que dans media1.
    • Ajout de MediaSession.sendError() qui permet d'envoyer des erreurs non fatales au contrôleur Media3. Lorsque vous utilisez le contrôleur de notifications (voir MediaSession.getMediaNotificationControllerInfo()), l'erreur personnalisée permet de mettre à jour l'PlaybackState de la session de la plate-forme en état d'erreur avec les informations d'erreur données (numéro 543).
    • Ajoutez MediaSession.Callback.onPlayerInteractionFinished() pour informer les sessions lorsqu'une série d'interactions de joueur à partir d'un contrôleur spécifique est terminée.
    • Ajoutez SessionError et utilisez-le dans SessionResult et LibraryResult au lieu du code d'erreur pour fournir plus d'informations sur l'erreur et sur la façon de la résoudre, le cas échéant.
    • Publiez le code de l'application de test du contrôleur media3 qui peut être utilisé pour tester les interactions avec les applications qui publient une session multimédia.
    • Propagez les éléments supplémentaires transmis à MediaSession[Builder].setSessionExtras() de media3 vers PlaybackStateCompat.getExtras() d'un contrôleur media1.
    • Mappez les erreurs fatales et non fatales vers et depuis la session de la plate-forme. Un PlaybackException est mappé sur un état d'erreur fatale de l'PlaybackStateCompat. Un SessionError envoyé au contrôleur de notification multimédia avec MediaSession.sendError(ControllerInfo, SessionError) est mappé sur une erreur non fatale dans PlaybackStateCompat, ce qui signifie que le code et le message d'erreur sont définis, mais que l'état de la session de la plate-forme reste différent de STATE_ERROR.
    • Autorisez l'activité de la session à être définie par contrôleur pour remplacer l'activité de session globale. L'activité de session peut être définie pour un contrôleur au moment de la connexion en créant un ConnectionResult avec AcceptedResultBuilder.setSessionActivivty(PendingIntent). Une fois connecté, l'activité de la session peut être mise à jour avec MediaSession.setSessionActivity(ControllerInfo, PendingIntent).
    • Amélioration de la réplication des erreurs des appels à MediaLibrarySession.Callback. La réplication des erreurs peut désormais être configurée à l'aide de MediaLibrarySession.Builder.setLibraryErrorReplicationMode() pour choisir le type d'erreur ou désactiver la réplication des erreurs, qui est activée par défaut.
  • Interface utilisateur :
    • Ajout de la prise en charge de l'affichage d'images dans PlayerView lorsqu'il est connecté à un ExoPlayer (#1144).
    • Ajout de la personnalisation de diverses icônes dans PlayerControlView via des attributs XML pour autoriser différents drawables par instance PlayerView, plutôt que des forçages globaux (#1200).
    • Contournement d'un bug de plate-forme qui entraînait une vidéo étirée/recadrée lors de l'utilisation de SurfaceView dans un AndroidView Compose avec l'API 34 (#1237).
  • Téléchargements :
    • Assurez-vous que DownloadHelper ne fuit pas d'instances Renderer non publiées, ce qui peut entraîner le plantage d'une application avec IllegalStateException: Too many receivers, total of 1000, registered for pid (n° 1224).
  • Extension Cronet :
    • Correction de SocketTimeoutException dans CronetDataSource. Dans certaines versions de Chromet, la requête fournie par le rappel n'est pas toujours la même. Le rappel ne se termine pas et la requête expire (https://issuetracker.google.com/328442628).
  • Extension HLS :
    • Correction d'un bug dans lequel les exemples EMSG en attente d'une discontinuité étaient délégués dans HlsSampleStreamWrapper avec un décalage incorrect, ce qui entraînait un IndexOutOfBoundsException ou un IllegalArgumentException (#1002).
    • Correction d'un bug qui entraînait le rechargement continu des playlists non principales pour les flux LL-HLS (#1240).
    • Correction d'un bug qui entraînait l'affichage de Source Error et IllegalArgumentException lorsque l'activation de CMCD pour HLS avec des segments d'initialisation était effectuée.
    • Correction d'un bug qui empêchait la mise à jour des playlists en cours de lecture autres que la principale lors de la lecture en direct (#1240).
    • Correction d'un bug qui entraînait l'ArrayIndexOutOfBoundsException lorsque l'activation de CMCD pour les diffusions en direct HLS (n° 1395).
  • Extension DASH :
    • Correction d'un bug qui pouvait générer une exception IndexOutOfBoundsException lors de la préparation d'un flux en direct multipériode (#1329).
    • Ajout de la prise en charge des URL de licence dashif:Laurl (#1345).
  • Extension Cast :
    • Correction d'un bug qui convertissait le titre de l'album de l'MediaQueueItem en artiste dans l'élément multimédia Media3 (#1255).
  • Utilitaires de test :
    • Implémentez onInit() et onRelease() dans FakeRenderer.
    • Modifiez les méthodes TestPlayerRunHelper.runUntil()/playUntil() pour qu'elles échouent en cas d'erreurs non fatales (par exemple, celles signalées à AnalyticsListener.onVideoCodecError()). Utilisez la nouvelle chaîne de méthodes TestPlayerRunHelper.run(player).ignoringNonFatalErrors().untilXXX() pour désactiver ce comportement.
  • Application de démonstration :
    • Utilisez DefaultPreloadManager dans l'application de démonstration de messages courts.
    • Permet de définir le mode de répétition avec des arguments Intent à partir de la ligne de commande (numéro 1266).
    • Utilisez HttpEngineDataSource comme HttpDataSource lorsque l'appareil le prend en charge.
  • Suppression des symboles obsolètes :
    • Suppression de CronetDataSourceFactory. Utilisez plutôt CronetDataSource.Factory.
    • Suppression de certains constructeurs DataSpec. Utilisez DataSpec.Builder à la place.
    • Suppression de la méthode setContentTypePredicate(Predicate) de DefaultHttpDataSource, OkHttpDataSource et CronetDataSource. Utilisez plutôt la méthode équivalente sur chaque XXXDataSource.Factory.
    • Suppression des constructeurs OkHttpDataSource et OkHttpDataSourceFactory. Utilisez OkHttpDataSource.Factory à la place.
    • Supprimez PlayerMessage.setHandler(Handler). Utilisez plutôt setLooper(Looper).
    • Supprimez le champ Timeline.Window.isLive. Utilisez plutôt la méthode isLive().
    • Suppression des constructeurs DefaultHttpDataSource. Utilisez DefaultHttpDataSource.Factory à la place.
    • Suppression de DashMediaSource.DEFAULT_LIVE_PRESENTATION_DELAY_MS. Utilisez DashMediaSource.DEFAULT_FALLBACK_TARGET_LIVE_OFFSET_MS à la place.
    • Supprimez MediaCodecInfo.isSeamlessAdaptationSupported(Format, Format, boolean). Utilisez MediaCodecInfo.canReuseCodec(Format, Format) à la place.
    • Suppression des méthodes DrmSessionManager.DUMMY et getDummyDrmSessionManager(). Utilisez DrmSessionManager.DRM_UNSUPPORTED à la place.
    • Supprimez AnalyticsListener.onAudioInputFormatChanged(EventTime, Format), AnalyticsListener.onVideoInputFormatChanged(EventTime, Format), AudioRendererEventListener.onAudioInputFormatChanged(Format) et VideoRendererEventListener.onVideoInputFormatChanged(Format). Utilisez plutôt les surcharges qui acceptent un DecoderReuseEvaluation.
    • Suppression de l'IntDef RendererSupport.FormatSupport et des constantes FORMAT_HANDLED, FORMAT_EXCEEDS_CAPABILITIES, FORMAT_UNSUPPORTED_DRM, FORMAT_UNSUPPORTED_SUBTYPE et FORMAT_UNSUPPORTED_TYPE. Utilisez plutôt l'IntDef et les constantes équivalents dans androidx.media3.common.C (par exemple, C.FORMAT_HANDLED).
    • Supprimez l'interface Bundleable. Cela inclut la suppression de tous les champs de constante Bundleable.Creator<Foo> CREATOR. Les appelants doivent plutôt utiliser les méthodes Bundle toBundle() et static Foo fromBundle(Bundle) sur chaque type.

Version 1.4.0-rc01

10 juillet 2024

Utilisez la version stable 1.4.0.

Version 1.4.0-beta01

26 juin 2024

Utilisez la version stable 1.4.0.

Version 1.4.0-alpha02

7 juin 2024

Utilisez la version stable 1.4.0.

Version 1.4.0-alpha01

17 avril 2024

Utilisez la version stable 1.4.0.

Version 1.3.0

Version 1.3.1

11 avril 2024

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

  • Bibliothèque commune :
    • Ajoutez Format.labels pour autoriser des libellés localisés ou d'autres libellés alternatifs.
  • ExoPlayer :
    • Correction d'un problème qui empêchait PreloadMediaPeriod de conserver les flux lorsqu'il était préchargé à nouveau.
    • Appliquez le TrackSelectionResult correspondant approprié à la période de lecture lors de la sélection de la piste.
    • Démarrage des moteurs de rendu activés en amont uniquement après avoir avancé la période de lecture lors de la transition entre les éléments multimédias (#1017).
    • Ajout du type de retour manquant à la règle -keepclasseswithmembers de ProGuard pour DefaultVideoFrameProcessor.Factory.Builder.build() (#1187).
  • Transformateur :
    • Ajout d'une solution de contournement pour l'exception générée en raison du fait que MediaMuxer n'est pas compatible avec les codes temporels de présentation négatifs avant l'API 30.
  • Sélection de la piste :
    • DefaultTrackSelector: privilégiez les pistes vidéo avec un débit d'images "raisonnable" (>=10 images/s) à celles dont le débit d'images est inférieur ou non défini. Cela garantit que le lecteur sélectionne la piste vidéo "réelle" dans les fichiers MP4 extraits de photos animées pouvant contenir deux pistes HEVC, l'une ayant une résolution plus élevée, mais un nombre très faible de frames (#1051).
  • Extracteurs :
    • Correction d'un problème qui empêchait le remplissage de sauter lors de la lecture de blocs de taille impaire à partir de fichiers WAV (numéro 1117).
    • MP3: renseignez Format.averageBitrate à partir de cadres de métadonnées tels que XING et VBRI.
    • MPEG-TS: annulez une modification visant à s'assurer que le dernier frame est affiché en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (7909). En effet, ce changement entraîne de nouveaux problèmes avec les flux HLS I-frame uniquement (#1150) et les flux HLS H.262 (#1126).
  • Audio :
    • Autorisez la récupération du moteur de rendu en désactivant le transfert si l'initialisation de la piste audio échoue en mode transfert.
  • Vidéo :
    • Ajout d'une solution de contournement pour un problème d'appareil sur la Galaxy Tab S7 FE, Chromecast avec Google TV et le Lenovo M10 FHD Plus, qui entraîne la mise en surbrillance des flux H265 à 60 fps comme non compatibles
    • Ajout d'une solution de contournement qui garantit que le premier frame est toujours affiché lors du tunnelage, même si l'appareil ne le fait pas automatiquement, comme l'exige l'API (1169). (#966)
    • Correction d'un problème où la gestion des informations de couleur HDR provoque un dysfonctionnement du codec et empêche les changements de format adaptatifs pour les pistes vidéo SDR (#1158).
  • Texte :
    • WebVTT: empêche les repères directement consécutifs de créer des instances CuesWithTiming supplémentaires factices à partir de WebvttParser.parse (#1177).
  • DRM :
    • Contournement d'une NoSuchMethodError pouvant être générée par le framework MediaDrm au lieu de ResourceBusyException ou NotProvisionedException sur certains appareils Android 14 (#1145).
  • Effet :
    • Amélioration de la mappage des tons PQ vers SDR en convertissant les espaces colorimétriques.
  • Session :
    • Correction d'un problème qui entraînait un retour en arrière de la position actuelle lorsque la manette remplaçait l'élément actuel (#951).
    • Correction d'un problème où MediaMetadata avec un extras non nul n'est pas transmis entre les contrôleurs multimédias et les sessions (#1176).
  • Interface utilisateur :
    • Inclure le nom de la langue de la piste audio en cas de non-identification d'un nom à afficher par Locale (#988).
  • Extension DASH :
    • Remplissage de tous les éléments Label du fichier manifeste dans Format.labels (#1054).
  • Extension RTSP :
    • Ignorance des valeurs d'informations de session vides (i-tags) lors de l'analyse SDP (#1087).
  • Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • Désactivez l'extension MIDI en tant que dépendance locale par défaut, car elle nécessite la configuration d'un dépôt Maven supplémentaire. Les utilisateurs qui ont besoin de ce module à partir d'une dépendance locale peuvent le réactiver.

Version 1.3.0

6 mars 2024

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

  • Bibliothèque commune :
    • Implémentation de la prise en charge des URI de ressources brutes android.resource://package/[type/]namepackage est différent du package de l'application actuelle. Cette fonctionnalité a toujours été documentée comme fonctionnelle, mais elle n'a pas été implémentée correctement jusqu'à présent.
    • Normalisez les types MIME définis par le code de l'application ou lus à partir de supports multimédias pour qu'ils soient entièrement en minuscules.
    • Définissez des annonces avec un MediaItem complet au lieu d'un seul Uri dans AdPlaybackState.
    • Augmentez minSdk à 19 (Android KitKat). Cette approche est alignée sur toutes les autres bibliothèques AndroidX et est nécessaire pour passer aux dernières versions de nos dépendances AndroidX.
    • Renseignez à la fois artworkUri et artworkData dans MediaMetadata.Builder.populate(MediaMetadata) lorsqu'au moins l'un d'eux n'est pas nul (#964).
  • ExoPlayer :
    • Ajout de PreloadMediaSource et PreloadMediaPeriod, qui permettent aux applications de précharger une source multimédia de contenu à un point de départ spécifique avant la lecture. PreloadMediaSource se charge de préparer la source multimédia de contenu pour recevoir Timeline, de préparer et de mettre en cache la période à la position de début donnée, de sélectionner les pistes et de charger les données multimédias pour la période. Les applications contrôlent la progression du préchargement en implémentant PreloadMediaSource.PreloadControl et en définissant la source préchargée sur le lecteur pour la lecture.
    • Ajout de ExoPlayer.setImageOutput qui permet aux applications de définir ImageRenderer.ImageOutput.
    • DefaultRenderersFactory fournit désormais un ImageRenderer au lecteur par défaut avec ImageOutput et ImageDecoder.Factory.DEFAULT nuls.
    • Émission d'un événement Player.Listener.onPositionDiscontinuity lorsque le silence est ignoré (#765).
    • Ajout d'une prise en charge expérimentale de l'analyse des sous-titres lors de l'extraction. Vous pouvez activer cette fonctionnalité à l'aide de MediaSource.Factory.experimentalParseSubtitlesDuringExtraction().
    • Prise en charge des sources multimédias adaptatives avec PreloadMediaSource.
    • Implémentez HttpEngineDataSource, un HttpDataSource à l'aide de l'API HttpEngine.
    • Empêchez la sous-classification de CompositeSequenceableLoader. Ce composant a été rendu extensible, mais n'a jamais été sous-classé dans la bibliothèque. Les personnalisations peuvent être effectuées en encapsulant une instance à l'aide du modèle de décorateur et en implémentant un CompositeSequenceableLoaderFactory personnalisé.
    • Correction d'un problème qui entraînait l'effacement des métadonnées de cet élément lorsque la même heure était répétée (n° 1007).
    • Renommez les méthodes experimentalSetSubtitleParserFactory sur BundledChunkExtractor.Factory et DefaultHlsExtractorFactory en setSubtitleParserFactory et n'autorisez pas la transmission de null. Utilisez les nouvelles méthodes experimentalParseSubtitlesDuringExtraction(boolean) pour contrôler le comportement d'analyse.
    • Ajout de la prise en charge de la personnalisation de la SubtitleParser.Factory utilisée lors de l'extraction. Vous pouvez le faire avec MediaSource.Factory.setSubtitleParserFactory().
    • Ajoute un préfixe de source à tous les champs Format.id générés à partir de MergingMediaSource. Cela permet d'identifier la source qui a généré un Format (numéro 883).
    • Correction de l'expression régulière utilisée pour valider les noms de clés CMCD (Common Media Client Data) personnalisés en la modifiant pour qu'elle ne vérifie que les traits d'union (#1028).
    • Arrêtez le double codage des paramètres de requête CMCD (#1075).
  • Transformateur :
    • Ajout de la possibilité d'aplatir les vidéos au ralenti H.265/HEVC SEF.
    • Amélioration de la vitesse de transcodage, en particulier pour les modifications de type "Supprimer la vidéo".
    • Ajout d'une API pour s'assurer que le fichier de sortie commence sur un frame vidéo. Cela peut rendre la sortie des opérations de recadrage plus compatible avec les implémentations de lecteurs qui n'affichent pas le premier frame vidéo avant son code temporel de présentation (#829).
    • Ajout de la prise en charge de l'optimisation des opérations de recadrage MP4 d'un seul composant.
    • Ajout de la prise en charge pour vous assurer qu'un frame vidéo comporte le premier code temporel dans le fichier de sortie. Correction des fichiers de sortie commençant par un cadre noir sur les lecteurs basés sur iOS (829).
  • Sélection de la piste :
    • Ajoutez DefaultTrackSelector.selectImageTrack pour activer la sélection de la piste d'image.
    • Ajoutez TrackSelectionParameters.isPrioritizeImageOverVideoEnabled pour déterminer si une piste d'image doit être sélectionnée si une piste d'image et une piste vidéo sont disponibles. La valeur par défaut est false, ce qui signifie que la sélection d'une piste vidéo est prioritaire.
  • Extracteurs :
    • Ajout d'une analyse AV1C supplémentaire à l'extracteur MP4 pour récupérer les valeurs ColorInfo.colorSpace, ColorInfo.colorTransfer et ColorInfo.colorRange (#692).
    • MP3: recherchez des fichiers avec un en-tête Info (l'équivalent CBR de l'en-tête Xing) à l'aide du débit binaire constant (CBR). Auparavant, nous utilisions la table de recherche de l'en-tête Info, mais cela entraîne une recherche moins précise que si nous l'ignorons et supposons que le fichier est CBR.
    • MPEG2-TS: ajout de la prise en charge de DTS, DTS-LBR et DTS:X Profile2 (#275).
    • Extraction des types audio à partir des descripteurs TS et mappage sur des indicateurs de rôle, ce qui permet aux utilisateurs de faire des sélections de pistes audio plus éclairées (#973).
  • Audio :
    • Amélioration de l'algorithme de saut de silence avec une montée en puissance du volume fluide. Maintien d'un silence minimal et de durées de silence plus naturelles (numéro 7423).
    • Enregistrement plus déterministe du silence ignoré (#1035).
  • Vidéo :
    • Modifiez le constructeur MediaCodecVideoRenderer qui utilise un argument VideoFrameProcessor.Factory et remplacez-le par un constructeur qui utilise un argument VideoSinkProvider. Les applications qui souhaitent injecter un VideoFrameProcessor.Factory personnalisé peuvent instancier un CompositingVideoSinkProvider qui utilise le VideoFrameProcessor.Factory personnalisé et transmettre le fournisseur de sink vidéo à MediaCodecVideoRenderer.
  • Texte :
    • Correction de la sérialisation des repères bitmap pour résoudre l'erreur Tried to marshall a Parcel that contained Binder objects lors de l'utilisation de DefaultExtractorsFactory.setTextTrackTranscodingEnabled (#836).
    • CEA-708: ignorez la valeur rowLock. La spécification CEA-708-E S-2023 indique que rowLock et columnLock doivent être considérés comme vrais, quelles que soient les valeurs présentes dans le flux (la prise en charge de columnLock n'est pas implémentée, il est donc supposé qu'elle est toujours fausse).
  • Image :
    • Ajout de la prise en charge des miniatures DASH. Les images de la grille sont recadrées et des miniatures individuelles sont fournies à ImageOutput près de leurs heures de présentation.
  • DRM :
  • Extension IMA :
    • Correction du problème empêchant la lecture des annonces DASH et HLS sans l'extension de fichier appropriée.
  • Session :
    • Désactivation de la détection du double-clic pour les applications TV (#962)
    • Correction d'un problème qui empêchait la transmission de MediaItem.RequestMetadata avec des extras non nuls entre les contrôleurs multimédias et les sessions.
    • Ajout d'un constructeur à MediaLibrarySession.Builder qui n'accepte qu'un Context au lieu d'un MediaLibraryService.
  • Extension HLS :
    • Réduction de la visibilité de HlsMediaPeriod à "privée pour le paquet". Ce type ne doit pas dépendre directement de l'extérieur du package HLS.
    • Résolution plus efficace des recherches au début d'un segment (#1031).
  • Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • Décodeur MIDI: ignore les messages d'événement SysEx (#710).
  • Utilitaires de test :
    • Ne mettez pas la lecture en pause dans TestPlayerRunHelper.playUntilPosition. Le test maintient la lecture dans un état de lecture, mais suspend la progression jusqu'à ce qu'il puisse ajouter des assertions et d'autres actions.
  • Application de démonstration :
    • Ajoutez un module de démonstration de format court pour présenter l'utilisation de PreloadMediaSource avec le cas d'utilisation des contenus courts.

Version 1.3.0-rc01

22 février 2024

Utilisez la version stable 1.3.0.

Version 1.3.0-beta01

7 février 2024

Utilisez la version stable 1.3.0.

Version 1.3.0-alpha01

15 janvier 2024

Utilisez la version stable 1.3.0.

Version 1.2.0

Version 1.2.1

9 janvier 2024

  • ExoPlayer :
    • Correction du problème lors duquel les recherches manuelles en dehors de la plage LiveConfiguration.min/maxOffset continuaient d'ajuster le décalage sur min/maxOffset.
    • Correction du problème de mise en page des canaux OPUS et VORBIS incorrecte pour les canaux 3, 5, 6, 7 et 8 (#8396).
    • Correction d'un problème qui empêchait la diffusion en direct de démarrer à sa position par défaut après une recherche de zéro (#9347).
    • Correction du problème où de nouvelles instances de CmcdData.Factory recevaient des valeurs négatives pour bufferedDurationUs à partir de sources de blocs, ce qui entraînait une IllegalArgumentException (#888).
  • Transformateur :
    • Correction d'un problème qui entraînait l'émission d'une exception de l'encodeur au moment de la configuration en raison de la définition d'un taux de fonctionnement élevé.
  • Extracteurs :
    • Marquez les pistes HEVC secondaires (non lisibles) dans les photos animées JPEG comme ROLE_FLAG_ALTERNATE pour éviter qu'elles ne soient automatiquement sélectionnées pour la lecture en raison de leur résolution plus élevée.
    • Correction de la détection incorrecte des images clés pour les flux TS H264 (#864).
    • Correction de l'estimation de la durée des flux TS de plus de 47 721 secondes (#855).
  • Audio :
    • Correction de la gestion de l'EOS pour SilenceSkippingAudioProcessor lorsqu'il est appelé plusieurs fois (#712).
  • Vidéo :
    • Ajout d'un correctif pour un problème d'appareil sur la Galaxy Tab S7 FE, le Chromecast avec Google TV et le Lenovo M10 FHD Plus, qui entraîne la mise en surbrillance des flux AVC 60 FPS comme non compatibles (#693).
  • Métadonnées :
    • Correction d'un bug qui empêchait MediaMetadata d'être renseigné à partir de commentaires Vorbis avec des touches majuscules (#876).
    • Capturez OutOfMemoryError lors de l'analyse de très grands cadres ID3, ce qui signifie que la lecture peut se poursuivre sans les informations de balise au lieu de l'échec complet de la lecture.
  • DRM :
    • Extension du correctif pour l'URL de licence https://default.url ClearKey factice à l'API 33 et versions ultérieures (auparavant, le correctif ne s'appliquait qu'à l'API 33 exactement) (numéro 837).
    • Correction de ERROR_DRM_SESSION_NOT_OPENED lors du passage du contenu chiffré au contenu clair sans surface associée au lecteur. L'erreur est due à une utilisation incorrecte d'un décodeur sécurisé pour lire le contenu clair.
  • Session :
    • Placez les clés et valeurs personnalisées dans MediaMetadataCompat à MediaMetadata.extras et MediaMetadata.extras à MediaMetadataCompat (#756, #802).
    • Correction de la diffusion de notifyChildrenChanged pour les anciens contrôleurs (#644).
    • Correction d'un bug qui entraînait un plantage sur certains appareils lorsque l'on définissait une valeur négative pour un minuteur setWhen désactivé de la notification (numéro 903).
    • Correction de IllegalStateException lorsque le contrôleur de notification multimédia n'a pas terminé la connexion lorsque la première mise à jour de la notification est demandée (numéro 917).
  • Interface utilisateur :
    • Correction d'un problème pour lequel les boutons de lecture et de retour en arrière ne sont pas visibles lorsqu'ils sont utilisés avec Material Design dans un BottomSheetDialogFragment (#511).
    • Correction d'un problème qui entraînait un mauvais alignement des chiffres sur le bouton d'avance rapide de PlayerControlView (#547).
  • Extension DASH :
    • Analyse "f800" comme nombre de canaux de 5 pour Dolby dans le fichier manifeste DASH (#688).
  • Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • MIDI: correction du problème où la recherche avant ignore les événements de changement de programme (#704).
    • Migration vers FFmpeg 6.0 et mise à jour du NDK compatible vers r26b (#707, #867)
  • Extension Cast :
    • Nettoyez la création d'un Timeline pour éviter que l'application ne plante lorsque le chargement de contenu multimédia échoue sur l'appareil de diffusion (n° 708).

Version 1.2.0

15 novembre 2023

  • Bibliothèque commune :
    • Ajoutez un paramètre @Nullable Throwable aux méthodes de l'interface Log.Logger. Le paramètre message de ces méthodes ne contient plus aucune information sur le Throwable transmis aux méthodes Log.{d,i,w,e}(). Les implémentations devront donc ajouter manuellement ces informations si elles le souhaitent (éventuellement à l'aide de Logger.appendThrowableString(String, Throwable)).
    • Correction d'un problème de compatibilité Kotlin où les paramètres de type générique nullable et les types d'éléments de tableau nullable ne sont pas détectés comme nullable. Par exemple, les paramètres de méthode TrackSelectorResult et SimpleDecoder (#6792).
    • Modification du comportement de l'UI et des notifications par défaut dans Util.shouldShowPlayButton pour afficher un bouton "Lecture" lorsque la lecture est temporairement supprimée (par exemple, en raison d'une perte temporaire de la sélection audio). L'ancien comportement peut être conservé en utilisant PlayerView.setShowPlayButtonIfPlaybackIsSuppressed(false) ou MediaSession.Builder.setShowPlayButtonIfPlaybackIsSuppressed(false) (#11213).
    • Mise à niveau de androidx.annotation:annotation-experimental vers 1.3.1 pour corriger le problème https://issuetracker.google.com/251172715.
    • Déplacez ExoPlayer.setAudioAttributes vers l'interface Player.
  • ExoPlayer :
    • Correction des problèmes de recherche dans les flux AC4 causés par l'absence d'identification correcte des échantillons de décodage uniquement (#11000).
    • Ajout de la suppression de la lecture sur les périphériques de sortie audio inappropriés (par exemple, le haut-parleur intégré sur les appareils Wear OS) lorsque cette fonctionnalité est activée via ExoPlayer.Builder.setSuppressPlaybackOnUnsuitableOutput. La raison de la suppression de la lecture sera mise à jour en tant que Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT si la lecture est tentée alors qu'aucune sortie audio appropriée n'est disponible ou si toutes les sorties appropriées sont déconnectées pendant la lecture. La raison de la suppression sera supprimée lorsqu'une sortie appropriée sera connectée.
    • Ajoutez MediaSource.canUpdateMediaItem et MediaSource.updateMediaItem pour accepter les mises à jour MediaItem après la création via Player.replaceMediaItem(s).
    • Autorisez les mises à jour MediaItem pour toutes les classes MediaSource fournies par la bibliothèque via Player.replaceMediaItem(s) (#33, #9978).
    • MimeTypes.TEXT_EXOPLAYER_CUES a été renommé MimeTypes.APPLICATION_MEDIA3_CUES.
    • Ajoutez PngExtractor qui envoie et lit un fichier PNG entier dans TrackOutput en tant qu'échantillon.
    • Amélioration de la méthode SequenceableLoader.continueLoading(long) dans l'interface SequenceableLoader pour SequenceableLoader.continueLoading(LoadingInfo loadingInfo). LoadingInfo contient des paramètres supplémentaires, y compris playbackSpeed et lastRebufferRealtimeMs en plus de playbackPositionUs existant.
    • Améliorez la méthode ChunkSource.getNextChunk(long, long, List, ChunkHolder) dans l'interface ChunkSource vers ChunkSource.getNextChunk(LoadingInfo, long, List, ChunkHolder).
    • Ajout de champs supplémentaires à la journalisation des données client multimédias communes (CMCD) : famine de tampon (bs), échéance (dl), débit de lecture (pr) et démarrage (su) (numéro 8699).
    • Ajout de la profondeur de bits de la luma et de la chrominance à ColorInfo (491)
    • Ajout de champs supplémentaires à la journalisation des données client multimédias communes (CMCD) : requête d'objet suivante (nor) et requête de plage suivante (nrr) (#8699).
    • Ajout de la fonctionnalité permettant de transmettre des données CMCD (Common Media Client Data) à l'aide de paramètres de requête (numéro 553).
    • Correction de ConcurrentModificationException dans ExperimentalBandwidthMeter (#612).
    • Ajoutez le paramètre MediaPeriodId à CompositeMediaSource.getMediaTimeForChildMediaTime.
    • Prise en charge de ClippingMediaSource (et d'autres sources avec des décalages de période/fenêtre) dans ConcatenatingMediaSource2 (#11226).
    • Modifiez BaseRenderer.onStreamChanged() pour qu'il reçoive également un argument MediaPeriodId.
  • Transformateur :
    • Analysez les données de rotation EXIF pour les entrées d'images.
    • Suppression du type d'annotation TransformationRequest.HdrMode et des constantes associées. Utilisez plutôt Composition.HdrMode et les constantes associées.
    • Simplifiez OverlaySettings pour résoudre les problèmes de rotation.
    • Modification des paramètres frameRate et durationUs de SampleConsumer.queueInputBitmap en TimestampIterator.
  • Sélection de la piste :
    • Ajoutez DefaultTrackSelector.Parameters.allowAudioNonSeamlessAdaptiveness pour autoriser ou non explicitement l'adaptation non fluide. Le comportement par défaut reste celui de true.
  • Extracteurs :
    • MPEG-TS: assurez-vous que le dernier frame est affiché en transmettant la dernière unité d'accès d'un flux à la file d'attente d'échantillons (7909).
    • Correction d'une faute de frappe lors de la détermination de rotationDegrees. Remplacement de projectionPosePitch par projectionPoseRoll (numéro 461).
    • Supprimez l'hypothèse selon laquelle les instances Extractor peuvent être directement inspectées avec instanceof. Si vous souhaitez accéder au moment de l'exécution aux détails d'implémentation d'un Extractor, vous devez d'abord appeler Extractor.getUnderlyingInstance.
    • Ajout de BmpExtractor.
    • Ajout de WebpExtractor.
    • Ajout de HeifExtractor.
    • Ajout de la compatibilité avec QuickTime Classic à Mp4Extractor.
  • Audio :
    • Ajout de la compatibilité avec le PCM big-endian 24/32 bits dans MP4 et Matroska, et analyse de l'encodage PCM pour lpcm dans MP4.
    • Ajout de la prise en charge de l'extraction de l'audio Vorbis au format MP4.
    • Ajout de AudioSink.getFormatOffloadSupport(Format) qui récupère le niveau de compatibilité avec le transfert que le collecteur peut fournir pour le format via un DefaultAudioOffloadSupportProvider. Il renvoie le nouveau AudioOffloadSupport contenant isFormatSupported, isGaplessSupported et isSpeedChangeSupported.
    • Ajoutez AudioSink.setOffloadMode() via lequel la configuration de l'exportation sur le collecteur audio est configurée. La valeur par défaut est AudioSink.OFFLOAD_MODE_DISABLED.
    • Le transfert peut être activé via setAudioOffloadPreference dans TrackSelectionParameters. Si la préférence définie est d'activer le transfert, que l'appareil est compatible avec le format et que la sélection de piste est une seule piste audio, le transfert audio est activé.
    • Si audioOffloadModePreference est défini sur AUDIO_OFFLOAD_MODE_PREFERENCE_REQUIRED, DefaultTrackSelector ne sélectionnera qu'une piste audio et uniquement si le format de cette piste est compatible avec le transfert. Si aucune piste audio n'est compatible avec le transfert, aucune piste n'est sélectionnée.
    • Désactivation de la compatibilité sans coupure pour le transfert avant le niveau d'API 33 en raison d'un problème de position de lecture après la transition de piste.
    • Suppression du paramètre enableOffload de la signature de la méthode DefaultRenderersFactory.buildAudioSink.
    • Supprimez la méthode DefaultAudioSink.Builder.setOffloadMode.
    • Supprimez la valeur intdef DefaultAudioSink.OffloadMode.OFFLOAD_MODE_ENABLED_GAPLESS_DISABLED.
    • Prise en charge des métadonnées Opus sans coupure lors de la lecture en déchargement.
    • Autorisez la récupération du moteur de rendu en désactivant le transfert si l'écriture échoue lors de la première tentative (#627).
    • Activez la planification de l'externalisation par défaut pour la lecture en mode hors connexion audio uniquement.
    • Supprimez ExoPlayer.experimentalSetOffloadSchedulingEnabled et AudioOffloadListener.onExperimentalOffloadSchedulingEnabledChanged.
    • onExperimentalSleepingForOffloadChanged a été renommé onSleepingForOffloadChanged et onExperimentalOffloadedPlayback onOffloadedPlayback.
    • Déplacez les interfaces et définitions TrackSelectionParameters liées au mode de transfert audio vers une classe AudioOffloadPreferences interne.
    • Ajoutez des rappels onAudioTrackInitialized et onAudioTrackReleased à AnalyticsListener, AudioRendererEventListener et AudioSink.Listener.
    • Correction du problème de sous-débit du tampon audio DTS Express (#650).
    • Correction d'un bug où la vérification des fonctionnalités d'E-AC3-JOC génère une exception IllegalArgumentException (#677).
  • Vidéo :
    • Autorisez MediaCodecVideoRenderer à utiliser un VideoFrameProcessor.Factory personnalisé.
    • Correction d'un bug qui empêchait le rendu du premier frame si le flux audio commence par des codes temporels négatifs (#291).
  • Texte :
    • Supprimez ExoplayerCuesDecoder. Les pistes de texte avec sampleMimeType = application/x-media3-cues sont désormais gérées directement par TextRenderer sans nécessiter d'instance SubtitleDecoder.
  • Métadonnées :
    • MetadataDecoder.decode ne sera plus appelé pour les exemples "décodeur uniquement", car l'implémentation doit renvoyer la valeur "null" de toute façon.
  • Effet :
    • Ajoutez VideoFrameProcessor.queueInputBitmap(Bitmap, Iterator<Long>) pour mettre en file d'attente l'entrée de bitmap par code temporel.
    • Modifiez VideoFrameProcessor.registerInputStream() pour qu'il ne soit pas bloquant. Les applications doivent implémenter VideoFrameProcessor.Listener#onInputStreamRegistered().
    • Modification des paramètres frameRate et durationUs de VideoFrameProcessor.queueInputBitmap en TimestampIterator.
  • Extension IMA :
    • Correction d'un bug qui pouvait entraîner l'exception d'un flux en direct DASH multipériode qui n'était pas le premier élément d'une playlist (#571).
    • Libérer StreamManager avant d'appeler AdsLoader.destroy()
    • Passage du SDK IMA vers la version 3.31.0.
  • Session :
    • Définissez le comportement du service de premier plan des notifications sur FOREGROUND_SERVICE_IMMEDIATE dans DefaultMediaNotificationProvider (#167).
    • N'utilisez que android.media.session.MediaSession.setMediaButtonBroadcastReceiver() au-dessus de l'API 31 pour éviter les problèmes liés aux API obsolètes sur les appareils Samsung (numéro 167).
    • Utilisez le contrôleur de notification multimédia comme proxy pour définir les commandes disponibles et la mise en page personnalisée utilisée pour renseigner la notification et la session de la plate-forme.
    • Convertissez les événements de bouton multimédia reçus par MediaSessionService.onStartCommand() dans Media3 au lieu de les acheminer vers la session de la plate-forme, puis vers Media3. Ainsi, le contrôleur de l'appelant est toujours le contrôleur de notification multimédia, et les applications peuvent facilement reconnaître les appels provenant de la notification de la même manière à tous les niveaux d'API compatibles.
    • Correction d'un bug qui empêchait MediaController.getCurrentPosition() d'avancer lorsqu'il était connecté à une ancienne MediaSessionCompat.
    • Ajoutez MediaLibrarySession.getSubscribedControllers(mediaId) pour plus de commodité.
    • Ignorez MediaLibrarySession.Callback.onSubscribe() pour affirmer la disponibilité de l'ID parent auquel le contrôleur s'abonne. Si l'opération réussit, l'abonnement est accepté et notifyChildrenChanged() est appelé immédiatement pour en informer le navigateur (numéro 561).
    • Ajoutez un module de démonstration de session pour Automotive OS et activez la démonstration de session pour Android Auto.
    • Ne définissez pas la file d'attente de la session du framework lorsque COMMAND_GET_TIMELINE n'est pas disponible pour le contrôleur de notification multimédia. Avec Android Auto comme contrôleur client lisant à partir de la session du framework, le bouton queue de l'interface utilisateur d'Android Auto ne s'affiche pas (numéro 339).
    • Utilisation de DataSourceBitmapLoader par défaut au lieu de SimpleBitmapLoader (#271, #327).
    • Ajoutez MediaSession.Callback.onMediaButtonEvent(Intent), qui permet aux applications de remplacer la gestion des événements par défaut des boutons multimédias.
  • Interface utilisateur :
    • Ajoutez une implémentation Player.Listener pour les appareils Wear OS qui gère la suppression de la lecture en raison de Player.PLAYBACK_SUPPRESSION_REASON_UNSUITABLE_AUDIO_OUTPUT en lançant une boîte de dialogue système pour permettre à un utilisateur de connecter une sortie audio appropriée (par exemple, des écouteurs Bluetooth). L'écouteur reprendra automatiquement la lecture si un appareil approprié est connecté dans un délai configurable (par défaut, cinq minutes).
  • Téléchargements :
    • Déclarez le type de service de premier plan "dataSync" pour DownloadService pour la compatibilité avec Android 14. Lorsque vous utilisez ce service, l'application doit également ajouter dataSync en tant que foregroundServiceType dans le fichier manifeste et ajouter l'autorisation FOREGROUND_SERVICE_DATA_SYNC (numéro 11239).
  • Extension HLS :
    • Actualisation de la playlist en direct HLS avec un intervalle calculé à partir de l'heure de début de la dernière charge plutôt qu'à partir de l'heure de fin de la dernière charge (numéro 663).
  • Extension DASH :
    • Autorisez plusieurs fois le même identifiant DASH dans l'URL du modèle de segment.
    • Ajout d'une prise en charge expérimentale de l'analyse des sous-titres lors de l'extraction. Cela permet de mieux fusionner les sous-titres qui se chevauchent, y compris en résolvant le clignotement lors de la transition entre les segments de sous-titres. Vous pouvez l'activer à l'aide de DashMediaSource.Factory.experimentalParseSubtitlesDuringExtraction() (#288).
  • Extension RTSP :
    • Correction d'une condition de concurrence pouvant entraîner une erreur IndexOutOfBoundsException lors du retour à TCP ou un blocage de la lecture dans certaines situations.
    • Vérifiez l'état dans la configuration RTSP lorsque vous renvoyez l'état de chargement de RtspMediaPeriod (#577).
    • Les méthodes de requête Rtsp personnalisées sont ignorées dans l'en-tête public de la réponse Options (#613).
    • Utilisation de la valeur de délai avant expiration de la réponse de configuration RTSP dans l'intervalle de temps d'envoi des requêtes d'options RTSP de maintien de la connexion (#662).
  • Extensions du décodeur (FFmpeg, VP9, AV1, MIDI, etc.):
    • Publiez le module de décodeur MIDI, qui prend en charge la lecture de fichiers MIDI standards à l'aide de la bibliothèque Jsyn pour synthétiser l'audio.
    • Ajoutez DecoderOutputBuffer.shouldBeSkipped pour marquer directement les tampons de sortie qui n'ont pas besoin d'être présentés. Cette méthode est préférable à C.BUFFER_FLAG_DECODE_ONLY, qui sera abandonnée.
    • Ajoutez Decoder.setOutputStartTimeUs et SimpleDecoder.isAtLeastOutputStartTimeUs pour permettre aux décodeurs de supprimer les échantillons de décodage uniquement avant l'heure de début. Il est préférable d'utiliser cette méthode à la place de Buffer.isDecodeOnly, qui sera abandonnée.
    • Correction d'un bug de publication de l'artefact du décodeur MIDI dans le dépôt Maven. L'artefact est renommé media3-exoplayer-midi (numéro 734).
  • Extension Leanback :
    • Correction d'un bug où la désactivation d'une surface peut entraîner une exception ArithmeticException dans le code Leanback (#617).
  • Utilitaires de test :
    • Rendre TestExoPlayerBuilder et FakeClock compatibles avec les tests d'interface utilisateur Espresso et les tests d'interface utilisateur Compose. Cela corrige un bug qui entraînait la progression de la lecture de manière non déterministe lors des interactions avec les vues Espresso ou Compose.
  • Suppression des symboles obsolètes :
    • Supprimez TransformationRequest.Builder.setEnableRequestSdrToneMapping(boolean) et TransformationRequest.Builder.experimental_setEnableHdrEditing(boolean). Utilisez Composition.Builder.setHdrMode(int) et transmettez Composition à Transformer.start(Composition, String) à la place.
    • Supprimez la méthode DownloadNotificationHelper.buildProgressNotification obsolète, puis utilisez une méthode non obsolète qui accepte un paramètre notMetRequirements à la place.

Version 1.2.0-rc01

1er novembre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-beta01

19 octobre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-alpha02

29 septembre 2023

Utilisez la version stable 1.2.0.

Version 1.2.0-alpha01

17 août 2023

Utilisez la version stable 1.2.0.

Version 1.1.0

Version 1.1.1

16 août 2023

  • Bibliothèque commune :
    • Suppression de la dépendance multidex ajoutée accidentellement de tous les modules (numéro 499).
  • ExoPlayer :
    • Correction d'un problème dans PlaybackStatsListener où des PlaybackStats indésirables sont créés après l'effacement de la playlist.
    • Ajout de champs supplémentaires à la journalisation des données client multimédias communes (CMCD) : format de streaming (sf), type de flux (st), version (v), débit maximal (tb), durée de l'objet (d), débit mesuré (mtp) et type d'objet (ot) (numéro 8699).
  • Audio :
    • Correction d'un bug qui empêchait Player.getState() de passer à STATE_ENDED lors de la lecture de fichiers très courts (#538).
  • Décharge audio :
    • Ajoutez les pages d'en-tête d'ID Ogg et d'en-tête de commentaire au flux de données pour la lecture Opus hors charge conformément à la RFC 7845.
  • Vidéo :
    • H.265/HEVC: correction de l'analyse des informations sur les images de référence à court et long terme SPS.
  • Texte :
    • CEA-608: modification de la logique de troncation des repères pour ne prendre en compte que le texte visible. Auparavant, l'indentation et le décalage de tabulation étaient inclus lorsque la longueur de la cue était limitée à 32 caractères (ce qui était techniquement correct selon les spécifications) (numéro 11019).
  • Extension IMA :
    • Passage du SDK IMA vers la version 3.30.3.
  • Session :
    • Ajoutez une mise en page personnalisée à l'état du contrôleur et fournissez un getter pour y accéder. Lorsque la mise en page personnalisée change, MediaController.Listener.onCustomLayoutChanged est appelé. Les applications qui souhaitent envoyer différentes mises en page personnalisées à différents contrôleurs Media3 peuvent le faire dans MediaSession.Callback.onConnect à l'aide d'un AcceptedResultBuilder pour s'assurer que la mise en page personnalisée est disponible pour le contrôleur une fois la connexion établie.
    • Correction des cas où MediaLibraryServiceLegacyStub envoyait une erreur à un Result qui ne le prenait pas en charge, ce qui produisait un UnsupportedOperationException (numéro 78).
    • Correction de la façon dont PlayerWrapper crée un VolumeProviderCompat en déterminant volumeControlType à la fois via les anciennes commandes (COMMAND_ADJUST_DEVICE_VOLUME et COMMAND_SET_DEVICE_VOLUME) et les nouvelles commandes (COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS et COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS) (numéro 554).

Version 1.1.0

5 juillet 2023

  • Bibliothèque commune :
    • Ajouter un motif de suppression pour un itinéraire audio inapproprié et la lecture lorsque vous êtes prêt, modifier le motif de suppression pour une suppression trop longue. (#15).
    • Ajouter des commandes au lecteur :
      • COMMAND_GET_METADATA
      • COMMAND_SET_PLAYLIST_METADATA
      • COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS
      • COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS
    • Ajout de méthodes surchargées au lecteur qui permettent aux utilisateurs de spécifier des indicateurs de volume :
      • void setDeviceVolume(int, int)
      • void increaseDeviceVolume(int)
      • void decreaseDeviceVolume(int)
      • void setDeviceMuted(boolean, int)
    • Ajout de Builder pour DeviceInfo et abandon du constructeur existant.
    • Ajoutez DeviceInfo.routingControllerId pour spécifier l'ID du contrôleur de routage pour les lectures à distance.
    • Ajout de Player.replaceMediaItem(s) en tant que raccourci pour ajouter et supprimer des éléments à la même position (#8046).
  • ExoPlayer :
    • Autorisez ExoPlayer à contrôler les méthodes de contrôle du volume de l'appareil uniquement si elles sont activées explicitement. Utilisez ExoPlayer.Builder.setDeviceVolumeControlEnabled pour accéder aux éléments suivants :
      • getDeviceVolume()
      • isDeviceMuted()
      • setDeviceVolume(int) et setDeviceVolume(int, int)
      • increaseDeviceVolume(int) et increaseDeviceVolume(int, int)
      • decreaseDeviceVolume(int) et decreaseDeviceVolume(int, int)
    • Ajout de FilteringMediaSource qui permet de filtrer les types de pistes disponibles à partir d'un MediaSource.
    • Ajout de la prise en charge de l'inclusion des données client multimédias communes (CMCD) dans les requêtes sortantes des formats de streaming adaptatif DASH, HLS et SmoothStreaming. Les champs suivants, br, bl, cid, rtp et sid, ont été intégrés (numéro 8699). Structure et méthodes de l'API :
      • La journalisation CMCD est désactivée par défaut. Utilisez MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory) pour l'activer.
      • Toutes les clés sont activées par défaut. Remplacez CmcdConfiguration.RequestConfig.isKeyAllowed(String key) pour filtrer les clés consignées.
      • Forcer CmcdConfiguration.RequestConfig.getCustomData() pour activer la journalisation des touches personnalisée.
    • Ajout d'une action supplémentaire au fichier manifeste de la démonstration principale pour faciliter le démarrage de l'application de démonstration avec un fichier *.exolist.json personnalisé (n° 439).
    • Ajoutez ExoPlayer.setVideoEffects() pour utiliser Effect pendant la lecture vidéo.
    • Mettez à jour SampleQueue pour stocker sourceId en tant que long plutôt qu'en tant que int. Les signatures des méthodes publiques SampleQueue.sourceId et SampleQueue.peekSourceId sont modifiées.
    • Ajoutez des paramètres aux méthodes LoadControl shouldStartPlayback et onTracksSelected qui permettent d'associer ces méthodes au MediaPeriod approprié.
    • Modifiez la signature de ServerSideAdInsertionMediaSource.setAdPlaybackStates(Map<Object, AdPlaybackState>) en ajoutant un paramètre de chronologie contenant les périodes avec les UID utilisés comme clés dans la carte. Cela permet d'éviter les problèmes de simultanéité avec les diffusions en direct sur plusieurs périodes.
    • Abandon de EventDispatcher.withParameters(int windowIndex, @Nullable MediaPeriodId mediaPeriodId, long mediaTimeOffsetMs) et BaseMediaSource.createEventDispatcher(..., long mediaTimeOffsetMs). La variante des méthodes sans mediaTimeOffsetUs peut être appelée à la place. Notez que même pour les variantes obsolètes, le décalage n'est plus ajouté à startTimeUs et endTimeUs des objets MediaLoadData distribués par le distributeur.
    • Renommez ExoTrackSelection.blacklist en excludeTrack et isBlacklisted en isTrackExcluded.
    • Correction du comportement incohérent entre ExoPlayer.setMediaItem(s) et addMediaItem(s) lorsqu'ils sont appelés sur une playlist vide.
  • Transformateur :
    • Supprimez Transformer.Builder.setMediaSourceFactory(MediaSource.Factory). Utilisez ExoPlayerAssetLoader.Factory(MediaSource.Factory) et Transformer.Builder.setAssetLoaderFactory(AssetLoader.Factory) à la place.
    • Supprimez Transformer.startTransformation(MediaItem, ParcelFileDescriptor).
    • Correction d'un bug qui pouvait entraîner le blocage de la transformation (ce qui entraînait un délai avant expiration du muxeur) si la fin du flux vidéo était signalée au moment où un frame d'entrée était en attente de traitement.
    • Interrogez les codecs via MediaCodecList au lieu d'utiliser les utilitaires findDecoder/EncoderForFormat pour étendre la compatibilité.
    • Suppression de la configuration des images B dans DefaultEncoderFactory, car elle ne fonctionne pas sur certains appareils.
  • Sélection de la piste :
    • Ajout de DefaultTrackSelector.Parameters.allowInvalidateSelectionsForRendererCapabilitiesChange, qui est désactivé par défaut. Lorsqu'il est activé, DefaultTrackSelector déclenche une nouvelle sélection de piste lorsque les fonctionnalités du moteur de rendu ont changé.
  • Extracteurs :
    • Ogg: correction d'un bug lors de la recherche dans des fichiers de longue durée (#391).
    • FMP4: correction d'un problème où TimestampAdjuster initialise un décalage de code temporel incorrect avec l'heure d'échantillonnage des métadonnées de l'atome emsg (#356).
  • Audio :
    • Correction d'un bug qui entraînait l'échec de certaines lectures lorsque le tunnelage est activé et que AudioProcessors est actif, par exemple pour le recadrage sans coupure (#10847).
    • Encapsulez les trames Opus dans des paquets Ogg lors des lectures directes (décharge).
    • Extrapolez la position actuelle pendant le sommeil avec la planification de l'externalisation.
    • Ajoutez Renderer.release() et AudioSink.release() pour libérer les ressources à la fin du cycle de vie du lecteur.
    • Écoutez les modifications des fonctionnalités audio dans DefaultAudioSink. Ajoutez un paramètre obligatoire context dans le constructeur de DefaultAudioSink, avec lequel DefaultAudioSink s'enregistrera en tant qu'écouteur de AudioCapabilitiesReceiver et modifiera sa propriété audioCapabilities lorsqu'il sera informé d'un changement de fonctionnalités.
    • Propagez les modifications des fonctionnalités audio via un nouvel événement onAudioCapabilitiesChanged dans l'interface AudioSink.Listener et une nouvelle interface RendererCapabilities.Listener qui déclenche des événements onRendererCapabilitiesChanged.
    • Ajout de ChannelMixingAudioProcessor pour appliquer la mise à l'échelle/le mixage aux canaux audio.
    • Ajout d'une nouvelle valeur int DISCARD_REASON_AUDIO_BYPASS_POSSIBLE à DecoderDiscardReasons pour supprimer le décodeur audio lorsque le mode de contournement est possible après la modification des fonctionnalités audio.
    • Ajout de la prise en charge de la lecture directe pour DTS Express et DTS:X (#335).
  • Vidéo :
    • Forcer MediaCodecVideoRenderer à signaler un VideoSize avec une largeur et une hauteur de 0 lorsque le moteur de rendu est désactivé. Player.Listener.onVideoSizeChanged est appelé en conséquence lorsque Player.getVideoSize() change. Avec cette modification, la taille vidéo d'ExoPlayer avec MediaCodecVideoRenderer a une largeur et une hauteur de 0 lorsque Player.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.
  • DRM :
    • Réduction de la visibilité de plusieurs méthodes internes uniquement sur DefaultDrmSession qui ne doivent pas être appelées en dehors du package DRM :
      • void onMediaDrmEvent(int)
      • void provision()
      • void onProvisionCompleted()
      • onProvisionError(Exception, boolean)
  • Muxeur :
    • Ajout d'une bibliothèque de muxage qui peut être utilisée pour créer un fichier de conteneur MP4.
  • Extension IMA :
    • Activez les flux DASH en direct multipériodes pour l'insertion dynamique d'annonces. Veuillez noter que l'implémentation actuelle n'est pas encore compatible avec la recherche dans les diffusions en direct (#10912).
    • Correction d'un bug qui entraînait l'insertion d'un nouveau groupe d'annonces dans les diffusions en direct, car la position calculée du contenu dans les chronologies consécutives variait légèrement.
  • Session :
    • Ajoutez la méthode d'assistance MediaSession.getControllerForCurrentRequest pour obtenir des informations sur le contrôleur qui appelle actuellement une méthode Player.
    • Ajout de androidx.media3.session.MediaButtonReceiver pour permettre aux applications d'implémenter la reprise de la lecture avec des événements de bouton multimédia envoyés par, par exemple, un casque Bluetooth (#167).
    • Ajout d'une implémentation par défaut à MediaSession.Callback.onAddMediaItems pour permettre de transmettre les MediaItems demandés à Player s'ils disposent d'un LocalConfiguration (par exemple, un URI) (numéro 282).
    • Ajout des boutons de commande "Rechercher le précédent" et "Rechercher le suivant" dans la vue compacte des notifications multimédias par défaut pour Android 12 et versions antérieures (410).
    • Ajout d'une implémentation par défaut à MediaSession.Callback.onAddMediaItems pour permettre de transmettre les MediaItems demandés à Player s'ils disposent d'un LocalConfiguration (par exemple, un URI) (numéro 282).
    • Ajout des boutons de commande "Rechercher le précédent" et "Rechercher le suivant" dans la vue compacte des notifications multimédias par défaut pour Android 12 et versions antérieures (410).
  • Interface utilisateur :
    • Ajoutez les méthodes Util shouldShowPlayButton et handlePlayPauseButtonAction pour écrire des éléments d'interface utilisateur personnalisés avec un bouton de lecture/pause.
  • Extension RTSP :
    • Pour MPEG4-LATM, utilisez la valeur par défaut de profile-level-id si elle est absente dans le message SDP de réponse Describe (#302).
    • Utilisez l'URI de base pour la résolution du chemin relatif à partir de la session RTSP si elle est présente dans l'en-tête de réponse DESCRIBE (#11160).
  • Extension DASH :
    • Supprimez le décalage temporel multimédia de MediaLoadData.startTimeMs et MediaLoadData.endTimeMs pour les flux DASH multipériodiques.
    • Correction d'un bug qui entraînait la génération d'une exception IndexOutOfBoundsException lors de la préparation à nouveau d'une source multipériode de contenu multimédia Dash en direct (#10838).
  • Extension HLS :
    • Ajoutez HlsMediaSource.Factory.setTimestampAdjusterInitializationTimeoutMs(long) pour définir un délai avant expiration pour que le thread de chargement attende l'initialisation de TimestampAdjuster. Si l'initialisation ne se termine pas avant le délai avant expiration, une exception PlaybackException est générée pour éviter que la lecture ne se bloque indéfiniment. Le délai avant expiration est défini sur zéro par défaut (#323).
  • Utilitaires de test :
    • Vérifiez si le schéma d'URI n'est pas sensible à la casse dans DataSourceContractTest.
  • Suppression des symboles obsolètes :
    • Suppression des constructeurs DefaultAudioSink. Utilisez plutôt DefaultAudioSink.Builder.
    • Supprimez HlsMasterPlaylist et utilisez HlsMultivariantPlaylist à la place.
    • Supprimez Player.stop(boolean). Utilisez plutôt Player.stop() et Player.clearMediaItems() (si reset est true).
    • Suppression de deux constructeurs SimpleCache obsolètes, utilisation d'un constructeur non obsolète qui utilise un DatabaseProvider à la place pour de meilleures performances.
    • Suppression du constructeur DefaultBandwidthMeter. Utilisez plutôt DefaultBandwidthMeter.Builder.
    • Suppression des constructeurs DefaultDrmSessionManager. Utilisez plutôt DefaultDrmSessionManager.Builder.
    • Suppression de deux constructeurs HttpDataSource.InvalidResponseCodeException obsolètes, utilisation d'un constructeur non obsolète qui accepte des champs supplémentaires(cause, responseBody) pour améliorer la journalisation des erreurs.
    • Supprimez DownloadHelper.forProgressive, DownloadHelper.forHls, DownloadHelper.forDash et DownloadHelper.forSmoothStreaming, et utilisez DownloadHelper.forMediaItem à la place.
    • Supprimez le constructeur DownloadService obsolète, utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètre channelDescriptionResourceId.
    • Suppression des constantes de chaîne obsolètes pour les jeux de caractères (ASCII_NAME, UTF8_NAME, ISO88591_NAME, UTF16_NAME et UTF16LE_NAME). Utilisez plutôt les jeux de caractères Kotlin du package kotlin.text, java.nio.charset.StandardCharsets ou com.google.common.base.Charsets.
    • Supprimez le constructeur WorkManagerScheduler obsolète, puis utilisez un constructeur non obsolète qui inclut la possibilité de fournir un paramètre Context à la place.
    • Supprimez les méthodes obsolètes createVideoSampleFormat, createAudioSampleFormat, createContainerFormat et createSampleFormat, qui étaient utilisées pour instancier la classe Format. Utilisez plutôt Format.Builder pour créer des instances de Format.
    • Suppression des méthodes obsolètes copyWithMaxInputSize, copyWithSubsampleOffsetUs, copyWithLabel, copyWithManifestFormatInfo, copyWithGaplessInfo, copyWithFrameRate, copyWithDrmInitData, copyWithMetadata, copyWithBitrate et copyWithVideoSize. Utilisez plutôt les méthodes Format.buildUpon() et setter.
    • Supprimez ExoPlayer.retry() obsolète et utilisez prepare() à la place.
    • Suppression du constructeur DefaultTrackSelector obsolète à zéro argument. Utilisez plutôt DefaultTrackSelector(Context).
    • Suppression du constructeur OfflineLicenseHelper obsolète. Utilisez plutôt OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Suppression du constructeur DownloadManager obsolète. Utilisez plutôt le constructeur qui accepte un Executor.
    • Suppression des constructeurs Cue obsolètes. Utilisez plutôt Cue.Builder.
    • Suppression du constructeur OfflineLicenseHelper obsolète. Utilisez plutôt OfflineLicenseHelper(DefaultDrmSessionManager, DrmSessionEventListener.EventDispatcher).
    • Suppression de quatre méthodes AnalyticsListener obsolètes :
      • onDecoderEnabled, utilisez plutôt onAudioEnabled et/ou onVideoEnabled.
      • onDecoderInitialized, utilisez plutôt onAudioDecoderInitialized et/ou onVideoDecoderInitialized.
      • onDecoderInputFormatChanged, utilisez plutôt onAudioInputFormatChanged et/ou onVideoInputFormatChanged.
      • onDecoderDisabled, utilisez plutôt onAudioDisabled et/ou onVideoDisabled.
    • Supprimez les éléments Player.Listener.onSeekProcessed et AnalyticsListener.onSeekProcessed obsolètes, et utilisez plutôt onPositionDiscontinuity avec DISCONTINUITY_REASON_SEEK.
    • Supprimez ExoPlayer.setHandleWakeLock(boolean) et utilisez setWakeMode(int) à la place.
    • Supprimez DefaultLoadControl.Builder.createDefaultLoadControl() obsolète et utilisez build() à la place.
    • Supprimez MediaItem.PlaybackProperties obsolète et utilisez MediaItem.LocalConfiguration à la place. Le champ obsolète MediaItem.playbackProperties est désormais de type MediaItem.LocalConfiguration.

Version 1.1.0-rc01

21 juin 2023

Utilisez la version stable 1.1.0.

Version 1.1.0-beta01

7 juin 2023

Utilisez la version stable 1.1.0.

Version 1.1.0-alpha01

10 mai 2023

Utilisez la version stable 1.1.0.

Version 1.0.0

Version 1.0.2

18 mai 2023

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

Cette version correspond à la version 2.18.7 d'ExoPlayer.

Cette version contient les modifications suivantes depuis la version 1.0.1:

  • Bibliothèque principale :
    • Ajoutez Buffer.isLastSample() qui indique si Buffer contient l'indicateur C.BUFFER_FLAG_LAST_SAMPLE.
    • Correction d'un problème qui pouvait empêcher l'affichage du dernier frame si le dernier échantillon avec des frames était retiré de la file d'attente sans lire l'échantillon "fin de flux". (#11079)
  • Extracteurs :
    • Correction de l'analyse des SPS H.265 dans les fichiers MPEG-TS en réutilisant la logique d'analyse déjà utilisée par les extracteurs RTSP et MP4 (#303).
  • Texte :
    • SSA: les fichiers UTF-16 sont acceptés s'ils commencent par un ordre d'octet (numéro 319).
  • Session :
    • Correction d'un problème où MediaController ne met pas à jour ses commandes disponibles lorsqu'il est connecté à un ancien MediaSessionCompat qui met à jour ses actions.
    • Correction d'un bug qui empêchait MediaLibraryService de renvoyer la valeur null pour un appel de l'UI système vers Callback.onGetLibraryRoot avec params.isRecent == true sur l'API 30 (numéro 355).
    • Correction de la fuite de mémoire de MediaSessionService ou MediaLibraryService (#346).
    • Correction d'un bug qui pouvait entraîner l'affichage d'une erreur IllegalStateException par un MediaController en cas de mise à jour combinée de Timeline et de position dans un MediaSession.

Version 1.0.1

18 avril 2023

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

Cette version correspond à la version 2.18.6 d'ExoPlayer.

  • Bibliothèque principale :
    • Réinitialisation du forçage de la diffusion en direct cible lors de la recherche de la position par défaut (#11051).
    • Correction d'un bug qui pouvait entraîner le blocage de la lecture en raison de flux d'échantillons vides dans le contenu multimédia.
  • Session :
    • Correction d'un bug qui entraînait une exception dans MediaController lorsque plusieurs éléments de file d'attente identiques étaient publiés par une ancienne MediaSessionCompat (290).
    • Ajout du transfert manquant de MediaSession.broadcastCustomCommand vers l'ancienne MediaControllerCompat.Callback.onSessionEvent (#293).
    • Correction d'un bug qui empêchait l'appel de MediaSession.setPlayer de mettre à jour les commandes disponibles.
    • Correction d'un problème qui entraînait l'ignorement des instances TrackSelectionOverride envoyées à partir d'un MediaController si elles faisaient référence à un groupe avec Format.metadata (n° 296).
    • Correction d'un problème où Player.COMMAND_GET_CURRENT_MEDIA_ITEM doit être disponible pour accéder aux métadonnées via l'ancienne MediaSessionCompat.
    • Correction d'un problème où les instances MediaSession sur un thread en arrière-plan provoquent des plantages lorsqu'elles sont utilisées dans MediaSessionService (#318).
    • Correction d'un problème où un récepteur de bouton multimédia était déclaré par la bibliothèque sans que l'application ne l'ait prévu (#314).
  • DASH :
    • Correction de la gestion des chronologies de segments vides (#11014).
  • RTSP :
    • Réessayer avec TCP si la configuration RTSP avec UDP échoue avec l'erreur RTSP 461 UnsupportedTransport (#11069).

Version 1.0.0

22 mars 2023

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

Cette version correspond à la version 2.18.5 d'ExoPlayer.

Aucune modification n'a été apportée depuis la version 1.0.0-rc02.

Version 1.0.0-rc02

2 mars 2023

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

Cette version correspond à la version 2.18.4 d'ExoPlayer.

  • Bibliothèque principale :
    • Correction de la détection du type de réseau sur l'API 33 (10970).
    • Correction de NullPointerException lors de l'appel de ExoPlayer.isTunnelingEnabled (#10977).
  • Téléchargements :
    • Rendre la différence maximale de l'heure de début de deux segments à fusionner configurable dans SegmentDownloader et les sous-classes (numéro 248).
  • Audio :
    • Correction de la lecture MP3 sans coupure sur les appareils Samsung (#8594).
    • Correction d'un bug où les vitesses de lecture définies immédiatement après la désactivation de l'audio peuvent être remplacées par un changement de vitesse précédent (#10882).
  • Vidéo :
    • Mappez le format HEVC HDR10 sur HEVCProfileMain10HDR10 au lieu de HEVCProfileMain10.
    • Ajout d'un correctif pour un problème d'appareil sur Chromecast avec Google TV et Lenovo M10 FHD Plus, qui entraîne la mise en surbrillance des flux AVC 60 FPS comme non compatibles (numéro 10898).
    • Correction des problèmes de performances de libération des images lors de la lecture de contenus multimédias avec une fréquence d'images beaucoup plus élevée que la fréquence d'actualisation de l'écran.
  • Google Cast :
    • Correction de l'STATE_IDLE temporaire lors de la transition entre les éléments multimédias (#245).
  • RTSP :
    • Attrapez l'exception IllegalArgumentException générée lors de l'analyse des messages de réponse Describe RTSP non valides (#10971).
  • Session :
    • Correction d'un bug qui empêchait le bouton de lecture/pause de la notification de s'actualiser avec l'état du lecteur (#192).
  • Extension IMA :
    • Correction d'un bug qui empêchait le démarrage des flux DAI sans annonces, car le premier événement LOADED (et le seul en l'absence d'annonces) n'était pas reçu.

Version 1.0.0-rc01

16 février 2023

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

Cette version correspond à la version 2.18.3 d'ExoPlayer.

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

Version 1.0.0-beta03

22 novembre 2022

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

Cette version correspond à la version 2.18.2 d'ExoPlayer.

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

Version 1.0.0-beta02

21 juillet 2022

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

Cette version correspond à la version 2.18.1 d'ExoPlayer.

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

Version 1.0.0-beta01

16 juin 2022

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

Cela correspond à la version 2.18.0 d'ExoPlayer.

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

Version 1.0.0-alpha03

14 mars 2022

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

Cela correspond à la version 2.17.1 d'ExoPlayer.

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

Version 1.0.0-alpha02

2 mars 2022

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

Cela correspond à la version 2.17.0 d'ExoPlayer.

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

Version 1.0.0-alpha01

27 octobre 2021

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

Nouvelles fonctionnalités

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

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

Pour en savoir plus, consultez le projet GitHub Media3.

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