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ı yapıldığında aynı nesnesini tanımlayın.

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 bakmanız gerekiyorsa buna TrackSelections#getFormat üzerinden erişilebilir. Player#getMediaMetadata, bu kaynakların her ikisinden de doldurulur.

Oynatmadan

Oynatma gerekmiyorsa Meta verileri ayıklamak için MetadataRetriever oyuncu oluşturup hazırlayın.

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

Ayrıca, ofsetler ve görüntüler gibi hareketli fotoğraf meta verilerini de dosyanın video bölümlerinin uzunluklarını etkilemez.

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

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