Während der Wiedergabe
Die Metadaten der Medien können während der Wiedergabe auf verschiedene Arten abgerufen werden. Am einfachsten ist es, auf das Ereignis Player.Listener#onMediaMetadataChanged
zu warten. Dadurch wird ein MediaMetadata
-Objekt mit Feldern wie title
und albumArtist
zur Verfügung gestellt. Wenn Sie Player#getMediaMetadata
aufrufen, wird dasselbe Ergebnis
-Objekt enthält.
Kotlin
override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) { mediaMetadata.title?.let(::handleTitle) }
Java
@Override public void onMediaMetadataChanged(MediaMetadata mediaMetadata) { if (mediaMetadata.title != null) { handleTitle(mediaMetadata.title); } }
Wenn Ihre App Zugriff auf bestimmte Metadata.Entry
-Objekte benötigt,
sollte Player.Listener#onMetadata
überwachen (für übermittelte dynamische Metadaten
während der Wiedergabe. Wenn Sie sich statische Metadaten ansehen möchten, können Sie diese über die TrackSelections#getFormat
aufrufen.
Player#getMediaMetadata
wird aus diesen beiden Quellen ausgefüllt.
Ohne Wiedergabe
Wenn keine Wiedergabe erforderlich ist, ist es effizienter, die Metadaten mit MetadataRetriever
zu extrahieren, da kein Player erstellt und vorbereitet werden muss.
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);
Fotos mit Bewegtbild
Es ist auch möglich, Metadaten von Fotos mit Bewegtbild zu extrahieren, einschließlich der Offset- und Längenwerte der Bild- und Videoteile der Datei.
Bei Fotos mit Bewegtbild die TrackGroupArray
, die mit dem MetadataRetriever
abgerufen wurden
enthält eine TrackGroup
mit einer einzelnen Format
, die ein
MotionPhotoMetadata
-Metadateneintrag.
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); } } }