वीडियो चलाने के दौरान
वीडियो चलाने के दौरान, मीडिया का मेटाडेटा कई तरीकों से वापस लाया जा सकता है. कॉन्टेंट बनाने
सबसे आसान तरीका है कि आप
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
suspend fun retrievingMetadataRetrieveMetadataWithoutPlayback( context: Context, mediaItem: MediaItem, ) { try { MetadataRetriever.Builder(context, mediaItem).build().use { metadataRetriever -> val trackGroups = metadataRetriever.retrieveTrackGroups().await() val timeline = metadataRetriever.retrieveTimeline().await() val durationUs = metadataRetriever.retrieveDurationUs().await() handleMetadata(trackGroups, timeline, durationUs) } } catch (e: IOException) { handleFailure(e) } }
Java
try (MetadataRetriever metadataRetriever = new MetadataRetriever.Builder(context, mediaItem).build()) { ListenableFuture<TrackGroupArray> trackGroupsFuture = metadataRetriever.retrieveTrackGroups(); ListenableFuture<Timeline> timelineFuture = metadataRetriever.retrieveTimeline(); ListenableFuture<Long> durationUsFuture = metadataRetriever.retrieveDurationUs(); ListenableFuture<List<Object>> allFutures = Futures.allAsList(trackGroupsFuture, timelineFuture, durationUsFuture); Futures.addCallback( allFutures, new FutureCallback<List<Object>>() { @Override public void onSuccess(List<Object> result) { handleMetadata( Futures.getUnchecked(trackGroupsFuture), Futures.getUnchecked(timelineFuture), Futures.getUnchecked(durationUsFuture)); } @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); } } }