मेटाडेटा फिर से लिया जा रहा है

वीडियो चलाने के दौरान

मीडिया चलाते समय, उसके मेटाडेटा को कई तरीकों से वापस पाया जा सकता है. सबसे आसान तरीका यह है कि Player.Listener#onMediaMetadataChanged इवेंट को सुनें. इससे इस्तेमाल के लिए, MediaMetadata ऑब्जेक्ट मिलेगा. इसमें title और albumArtist जैसे फ़ील्ड होते हैं. अगर Player#getMediaMetadata को कॉल किया जाता है, तो यह एक जैसा दिखेगा ऑब्जेक्ट है.

Kotlin

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

Java

@Override
public void onMediaMetadataChanged(MediaMetadata mediaMetadata) {
  if (mediaMetadata.title != null) {
    handleTitle(mediaMetadata.title);
  }
}

अगर आपके ऐप्लिकेशन को किसी खास Metadata.Entry ऑब्जेक्ट का ऐक्सेस चाहिए, तो उसे Player.Listener#onMetadata को सुनना चाहिए. ऐसा, वीडियो चलाने के दौरान डिलीवर किए गए डाइनैमिक मेटाडेटा के लिए किया जाना चाहिए. इसके अलावा, अगर स्टैटिक मेटाडेटा को देखने की ज़रूरत है, तो TrackSelections#getFormat से इसे ऐक्सेस किया जा सकता है. Player#getMediaMetadata, इन दोनों सोर्स से पॉप्युलेट होता है.

बिना प्लेबैक के

अगर आपको प्लेबैक की ज़रूरत नहीं है, तो बेहतर होगा कि आप MetadataRetriever निकालें, क्योंकि इससे मेटाडेटा को खिलाड़ी बनाना और तैयार करना.

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

मोशन फ़ोटो

मोशन फ़ोटो का मेटाडेटा निकाला जा सकता है. इसमें ऑफ़सेट और फ़ाइल की इमेज और वीडियो वाले हिस्सों की लंबाई.

मोशन फ़ोटो के लिए, MetadataRetriever के साथ मिले TrackGroupArray में एक Format के साथ TrackGroup होता है. इसमें 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);
    }
  }
}