Meta verileri alma

Oynatma sırasında

Medyanın meta verileri, oynatma sırasında birkaç şekilde alınabilir. İlgili içeriği oluşturmak için kullanılan en kolay seçenek olan Player.Listener#onMediaMetadataChanged etkinlik; bu sorgu, title ve gibi alanları içeren MediaMetadata nesnesi albumArtist. Alternatif olarak, Player#getMediaMetadata çağrısı da aynı nesneyi döndürür.

KotlinJava
override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) {
  mediaMetadata
.title?.let(::handleTitle)
}
@Override
public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
 
if (mediaMetadata.title != null) {
    handleTitle
(mediaMetadata.title);
 
}
}

Uygulamanızın belirli Metadata.Entry nesnelerine erişmesi gerekiyorsa Player.Listener#onMetadata dinlemeli (yayınlanan dinamik meta veriler için) oynatma sırasında). Alternatif olarak, statik meta verilere bakılması gerekiyorsa TrackSelections#getFormat üzerinden bu verilere erişilebilir. Player#getMediaMetadata, bu kaynakların her ikisiyle de doldurulur.

Oynatmadan

Oynatma gerekmiyorsa meta verileri ayıklamak için MetadataRetriever kullanmak daha verimlidir. Bu yöntem, oynatıcı oluşturma ve hazırlama ihtiyacını ortadan kaldırır.

KotlinJava
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
)
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
);

Hareketli fotoğraflar

Dosyanın resim ve video bölümlerinin ofsetleri ve uzunlukları da dahil olmak üzere hareketli fotoğraf meta verilerini de ayıklayabilirsiniz.

Hareketli fotoğraflar için MetadataRetriever ile elde edilen TrackGroupArray, MotionPhotoMetadata meta veri girişini içeren tek bir Format içeren bir TrackGroup içerir.

KotlinJava
0.until(trackGroups.length)
 
.asSequence()
 
.mapNotNull { trackGroups[it].getFormat(0).metadata }
 
.filter { metadata -> metadata.length() == 1 }
 
.map { metadata -> metadata[0] }
 
.filterIsInstance<MotionPhotoMetadata>()
 
.forEach(::handleMotionPhotoMetadata)
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);
   
}
 
}
}