Selama pemutaran
Metadata media dapat diambil selama pemutaran dengan beberapa cara. Yang
paling mudah adalah memproses peristiwa
Player.Listener#onMediaMetadataChanged
; cara ini akan memberikan
objek MediaMetadata
untuk digunakan, yang memiliki kolom seperti title
dan
albumArtist
. Atau, memanggil Player#getMediaMetadata
akan menampilkan objek
yang sama.
Kotlin
override fun onMediaMetadataChanged(mediaMetadata: MediaMetadata) { mediaMetadata.title?.let(::handleTitle) }
Java
@Override public void onMediaMetadataChanged(MediaMetadata mediaMetadata) { if (mediaMetadata.title != null) { handleTitle(mediaMetadata.title); } }
Jika aplikasi Anda memerlukan akses ke objek Metadata.Entry
tertentu, aplikasi
harus memproses Player.Listener#onMetadata
(untuk metadata dinamis yang dikirim
selama pemutaran). Atau, jika perlu melihat metadata statis,
metadata dapat diakses melalui TrackSelections#getFormat
.
Player#getMediaMetadata
diisi dari kedua sumber ini.
Tanpa pemutaran
Jika pemutaran tidak diperlukan, akan lebih efisien menggunakan
MetadataRetriever
untuk mengekstrak metadata karena Anda tidak perlu
membuat dan menyiapkan pemutar.
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);
Foto motion
Anda juga dapat mengekstrak metadata foto motion, yang berisi offset dan panjang gambar dan video, misalnya. Format berikut ini didukung:
- Foto motion JPEG yang direkam oleh aplikasi kamera Google Pixel dan Samsung. Format
ini dapat diputar oleh ExoPlayer, dan metadata terkait karenanya dapat
diambil dengan pemutar atau menggunakan
MetadataRetriever
. - Foto motion HEIC yang direkam oleh aplikasi kamera Google Pixel dan Samsung. Format
ini saat ini tidak dapat diputar oleh ExoPlayer, dan metadata terkait
oleh karena itu harus diambil menggunakan
MetadataRetriever
.
Untuk foto motion, TrackGroupArray
yang diperoleh dengan MetadataRetriever
berisi TrackGroup
dengan satu Format
yang menyertakan
entri metadata MotionPhotoMetadata
.
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); } } }