Meta verileri alma

Oynatma sırasında

Medya meta verileri, oynatma sırasında çeşitli şekillerde alınabilir. En basit yöntem, Player.Listener#onMediaMetadataChanged etkinliğini dinlemektir. Bu işlem, title ve albumArtist gibi alanlara sahip bir MediaMetadata nesnesi sağlar. Alternatif olarak, Player#getMediaMetadata çağrıldığında da aynı nesne döndürülü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 politikasını (oynatma sırasında iletilen dinamik meta veriler için) dinlemelidir. Alternatif olarak, statik meta verilere bakmanız gerekiyorsa buna TrackSelections#getFormat üzerinden erişilebilir. Player#getMediaMetadata, bu kaynakların her ikisinden de doldurulur.

Oynatmasız

Oynatma gerekmiyorsa oynatıcı oluşturup hazırlamak zorunda kalmayacağınız için meta verileri çıkarmak için MetadataRetriever aracını kullanmak daha verimlidir.

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 dosyanın ofsetleri ve uzunlukları ile dosyanın video bölümleri dahil olmak üzere hareketli fotoğraf meta verilerini çıkarmak da mümkündür. Aşağıdaki hareketli fotoğraf kapsayıcı biçimleri desteklenir:

  • Bazı Android kamera uygulamaları tarafından kaydedilen JPEG hareketli fotoğraflar. Bu dosyaların video kısmı ExoPlayer tarafından oynatılabilir. İlişkili meta veriler de oynatıcı tarafından sunulur ve MetadataRetriever kullanılarak alınabilir.
  • Bazı Android kamera uygulamaları tarafından kaydedilen HEIC hareketli fotoğraflar. Bu dosyaların video kısmı ExoPlayer tarafından oynatılamaz, ancak ilişkili meta veriler MetadataRetriever kullanılarak alınabilir.

Hareketli fotoğraflarda MetadataRetriever ile elde edilen TrackGroupArray, MotionPhotoMetadata meta veri girişine sahip tek bir Format içeren 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);
    }
  }
}