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.

Kotlin

override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) {
  mediaMetadata.title?.let(::handleTitle)
}

Java

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

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

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.

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