Pendant la lecture
Les métadonnées du contenu multimédia peuvent être récupérées pendant la lecture de différentes manières. La méthode la plus simple consiste à écouter l'événement Player.Listener#onMediaMetadataChanged
. Vous obtiendrez ainsi un objet MediaMetadata
à utiliser, qui comporte des champs tels que title
et albumArtist
. L'appel de Player#getMediaMetadata
renvoie le même résultat
.
Kotlin
override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) { mediaMetadata.title?.let(::handleTitle) }
Java
@Override public void onMediaMetadataChanged(MediaMetadata mediaMetadata) { if (mediaMetadata.title != null) { handleTitle(mediaMetadata.title); } }
Si votre application a besoin d'accéder à des objets Metadata.Entry
spécifiques, elle
doit écouter Player.Listener#onMetadata
(pour les métadonnées dynamiques transmises
pendant la lecture). Si vous devez consulter des métadonnées statiques, vous pouvez y accéder via TrackSelections#getFormat
.
Player#getMediaMetadata
est renseigné à partir de ces deux sources.
Sans lecture
Si la lecture n'est pas nécessaire, il est plus efficace d'utiliser la
MetadataRetriever
pour extraire les métadonnées, car cela évite d'avoir à
pour créer et préparer un lecteur.
Kotlin
val trackGroupsFuture = MetadataRetriever.retrieveMetadata(context, mediaItem) Futures.addCallback( trackGroupsFuture, object : FutureCallback<TrackGroupArray?> { override fun onSuccess(trackGroups: TrackGroupArray?) { if (trackGroups != null) handleMetadata(trackGroups) } override fun onFailure(t: Throwable) { handleFailure(t) } }, executor )
Java
ListenableFuture<TrackGroupArray> trackGroupsFuture = MetadataRetriever.retrieveMetadata(context, mediaItem); Futures.addCallback( trackGroupsFuture, new FutureCallback<TrackGroupArray>() { @Override public void onSuccess(TrackGroupArray trackGroups) { handleMetadata(trackGroups); } @Override public void onFailure(Throwable t) { handleFailure(t); } }, executor);
Photos animées
Il est également possible d'extraire les métadonnées des photos animées, y compris les décalages et les longueurs des parties image et vidéo du fichier.
Pour les photos animées, le TrackGroupArray
obtenu avec l'MetadataRetriever
contient un TrackGroup
avec un seul Format
entourant un
Entrée de métadonnées MotionPhotoMetadata
.
Kotlin
0.until(trackGroups.length) .asSequence() .mapNotNull { trackGroups[it].getFormat(0).metadata } .filter { metadata -> metadata.length() == 1 } .map { metadata -> metadata[0] } .filterIsInstance<MotionPhotoMetadata>() .forEach(::handleMotionPhotoMetadata)
Java
for (int i = 0; i < trackGroups.length; i++) { TrackGroup trackGroup = trackGroups.get(i); Metadata metadata = trackGroup.getFormat(0).metadata; if (metadata != null && metadata.length() == 1) { Metadata.Entry metadataEntry = metadata.get(0); if (metadataEntry instanceof MotionPhotoMetadata) { MotionPhotoMetadata motionPhotoMetadata = (MotionPhotoMetadata) metadataEntry; handleMotionPhotoMetadata(motionPhotoMetadata); } } }