Oynatma sırasında
Medyanın meta verileri, oynatma sırasında birden çok şekilde alınabilir. En basit yöntem, Player.Listener#onMediaMetadataChanged
etkinliğini dinlemektir. Bu işlem, title
ve albumArtist
gibi alanları olan bir MediaMetadata
nesnesi sağlar. 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
dinlemesi gerekir (oynatma sırasında gönderilen dinamik meta veriler için). Alternatif olarak, statik meta verilere bakmanız gerekiyorsa buna TrackSelections#getFormat
üzerinden de erişilebilir.
Player#getMediaMetadata
bu kaynakların her ikisinden de doldurulur.
Oynatmadan
Oynatma gerekmiyorsa bir oynatıcı oluşturup hazırlamak zorunda kalmayacağınız için meta verileri çıkarmak için MetadataRetriever
'ı kullanmak daha verimli olur.
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
Örneğin, resim ile video ofseti ve uzunluğunu içeren bir hareketli fotoğrafın meta verilerini çıkarmak da mümkündür. Aşağıdaki biçimler desteklenir:
- Google Pixel ve Samsung kamera uygulamaları tarafından kaydedilen JPEG hareketli fotoğraflar. Bu biçim ExoPlayer tarafından oynatılabilir ve ilişkili meta veriler, bir oynatıcıyla veya
MetadataRetriever
kullanılarak alınabilir. - Google Pixel ve Samsung kamera uygulamaları tarafından kaydedilen HEIC hareketli fotoğraflar. Bu biçim şu anda ExoPlayer tarafından oynatılamamaktadır ve ilişkili meta verilerin
MetadataRetriever
kullanılarak alınması gerekir.
Hareketli fotoğraflarda, MetadataRetriever
ile elde edilen TrackGroupArray
, MotionPhotoMetadata
meta veri girişini içeren 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); } } }