वीडियो चलाने के दौरान
वीडियो चलाने के दौरान, मीडिया का मेटाडेटा कई तरीकों से वापस लाया जा सकता है. कॉन्टेंट बनाने
सबसे आसान तरीका है कि आप
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
में एक TrackGroup
है, जिसमें एक Format
के अंदर
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); } } }