MetadataRetriever, MediaItem से जानकारी (जैसे कि अवधि, वीडियो रिज़ॉल्यूशन, कोडेक, उपलब्ध ट्रैक, और सैंपलिंग रेट) को बिना प्लेबैक के वापस लाता है.
इसके सामान्य इस्तेमाल के उदाहरणों में ये शामिल हैं:
- मोशन फ़ोटो का मेटाडेटा वापस पाना: इसमें फ़ाइल के इमेज और वीडियो वाले हिस्सों के ऑफ़सेट और लंबाई शामिल हैं.
- मीडिया लाइब्रेरी बनाना:
MediaLibraryServiceमेंMediaItemजैसी ज़्यादा जानकारी (जैसे कि अवधि और टाइटल) जोड़ना, ताकि Android Auto जैसे क्लाइंट को पूरा मीडिया कैटलॉग दिखाया जा सके. - यूज़र इंटरफ़ेस (यूआई) की जानकारी को पहले से फ़ेच करना: वीडियो चलाने से पहले यूज़र इंटरफ़ेस (यूआई) को तैयार करने के लिए, वीडियो के रिज़ॉल्यूशन या अवधि जैसी जानकारी फ़ेच करना.
- मीडिया फ़ाइलों की पुष्टि करना: किसी फ़ाइल को प्रोसेस करने से पहले, यह देखना कि उसमें ज़रूरी ऑडियो या वीडियो ट्रैक या खास मेटाडेटा मौजूद है या नहीं.
खास जानकारी
MetadataRetriever का इस्तेमाल करने के लिए, यह तरीका अपनाएं:
- डेटा वापस पाने की सुविधा बनाना:
MetadataRetriever.Builderका इस्तेमाल करके एक इंस्टेंस बनाएं. बिल्डर कोContextऔर वहMediaItemपास करें जिसकी आपको जांच करनी है. कस्टम नेटवर्किंग या कैश मेमोरी जैसी बेहतर सुविधाओं के लिए, कस्टमMediaSource.Factoryभी दिया जा सकता है. - मेटाडेटा वापस पाना: ज़रूरी जानकारी पाने के लिए,
retrieveDurationUs(),retrieveTimeline()याretrieveTrackGroups()जैसे तरीकों का इस्तेमाल करें. ये तरीके एसिंक्रोनस होते हैं. येListenableFutureदिखाते हैं, ताकि नेटवर्क या I/O कार्रवाइयां मुख्य थ्रेड को ब्लॉक न करें.
Kotlin
suspend fun retrieveMetadata(context: Context, mediaItem: MediaItem) {
try {
// 1. Build the retriever.
// `MetadataRetriever` implements `AutoCloseable`, so wrap it in
// a Kotlin `.use` block, which calls `close()` automatically.
MetadataRetriever.Builder(context, mediaItem).build().use { retriever ->
// 2. Retrieve metadata asynchronously.
val trackGroups = retriever.retrieveTrackGroups().await()
val timeline = retriever.retrieveTimeline().await()
val durationUs = retriever.retrieveDurationUs().await()
handleMetadata(trackGroups, timeline, durationUs)
}
} catch (e: Exception) {
throw RuntimeException(e)
}
}
Java
public void retrieveMetadata(Context context, MediaItem mediaItem) {
// 1. Build the retriever.
// `MetadataRetriever` implements `AutoCloseable`, so use try-with-resources
// so that the resources are automatically released.
try (MetadataRetriever retriever = new MetadataRetriever.Builder(context, mediaItem).build()) {
// 2. Retrieve metadata asynchronously.
ListenableFuture<TrackGroupArray> trackGroupsFuture = retriever.retrieveTrackGroups();
ListenableFuture<Timeline> timelineFuture = retriever.retrieveTimeline();
ListenableFuture<Long> durationUsFuture = retriever.retrieveDurationUs();
ListenableFuture<List<Object>> allFutures = Futures.allAsList(trackGroupsFuture, timelineFuture, durationUsFuture);
Futures.addCallback(allFutures, new FutureCallback<>() {
@Override
public void onSuccess(List<Object> result) {
handleMetadata(
Futures.getUnchecked(trackGroupsFuture),
Futures.getUnchecked(timelineFuture),
Futures.getUnchecked(durationUsFuture)
);
}
@Override
public void onFailure(@NonNull Throwable t) {
handleFailure(t);
}
}, MoreExecutors.directExecutor());
}
}