MetadataRetriever প্লেব্যাক না করেই MediaItem
থেকে তথ্য (যেমন, সময়সীমা, ভিডিও
রেজোলিউশন, কোডেক, উপলভ্য ট্র্যাক ও স্যাম্পেল রেট) পায়।
সাধারণ ব্যবহারের মধ্যে এগুলি অন্তর্ভুক্ত:
- মোশন ফটো মেটাডেটা পাওয়া: এর মধ্যে রয়েছে ফাইলের ইমেজ ও ভিডিও অংশের অফসেট ও দৈর্ঘ্য।
- মিডিয়া লাইব্রেরি তৈরি করা: Android Auto-এর মতো ক্লায়েন্টদের সম্পূর্ণ মিডিয়া
ক্যাটালগ পরিবেশন করতে, রিচ
MediaItemবিবরণ (যেমন, সময়সীমা ও শীর্ষক) সহMediaLibraryServiceপূরণ করা। - UI বিবরণ প্রিফেচ করা: প্লেব্যাক শুরু হওয়ার আগে UI প্রস্তুত করতে ভিডিও রেজোলিউশন বা সময়সীমার মতো তথ্য ফেচ করা।
- মিডিয়া ফাইল যাচাই করা: কোনও ফাইল প্রসেস করার আগে তাতে প্রয়োজনীয় অডিও বা ভিডিও ট্র্যাক বা নির্দিষ্ট মেটাডেটা আছে কিনা তা চেক করা।
এক নজরে
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) { handleFailure(e) } }
জাভা
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<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); } }, directExecutor()); } }