মেটাডেটা পুনরুদ্ধার করুন

MetadataRetriever প্লেব্যাক ছাড়াই একটি MediaItem থেকে তথ্য (যেমন সময়কাল, ভিডিও রেজোলিউশন, কোডেক, উপলব্ধ ট্র্যাক এবং নমুনা হার) পুনরুদ্ধার করে।

সাধারণ ব্যবহারের ক্ষেত্রে অন্তর্ভুক্ত:

  • মোশন ফটো মেটাডেটা পুনরুদ্ধার করা : ফাইলের ছবি এবং ভিডিও অংশগুলির অফসেট এবং দৈর্ঘ্য সহ।
  • একটি মিডিয়া লাইব্রেরি তৈরি করা : অ্যান্ড্রয়েড অটোর মতো ক্লায়েন্টদের কাছে একটি সম্পূর্ণ মিডিয়া ক্যাটালগ পরিবেশন করার জন্য সমৃদ্ধ MediaItem বিবরণ (যেমন সময়কাল এবং শিরোনাম) সহ একটি MediaLibraryService সার্ভিস তৈরি করা।
  • UI এর বিবরণ প্রিফেচিং : প্লেব্যাক শুরু হওয়ার আগে UI প্রস্তুত করার জন্য ভিডিও রেজোলিউশন বা সময়কালের মতো তথ্য আনা।
  • মিডিয়া ফাইল যাচাইকরণ : কোনও ফাইল প্রক্রিয়াকরণের আগে প্রয়োজনীয় অডিও বা ভিডিও ট্র্যাক বা নির্দিষ্ট মেটাডেটা আছে কিনা তা পরীক্ষা করা।

সংক্ষিপ্ত বিবরণ

MetadataRetriever ব্যবহার একটি দুই-পদক্ষেপ প্রক্রিয়া:

  1. Retriever তৈরি করুন : MetadataRetriever.Builder ব্যবহার করে একটি ইনস্ট্যান্স তৈরি করুন। আপনি যে Context এবং MediaItem টি পরিদর্শন করতে চান তা বিল্ডারকে দিন। উন্নত ব্যবহারের ক্ষেত্রে, যেমন কাস্টম নেটওয়ার্কিং বা ক্যাশিং, আপনি একটি কাস্টম MediaSource.Factory ও সরবরাহ করতে পারেন।
  2. মেটাডেটা পুনরুদ্ধার করুন : প্রয়োজনীয় তথ্য সংগ্রহের জন্য retrieveDurationUs() , retrieveTimeline() , অথবা retrieveTrackGroups() এর মতো পদ্ধতিগুলিতে কল করুন। এই পদ্ধতিগুলি অ্যাসিঙ্ক্রোনাস , একটি ListenableFuture প্রদান করে যাতে নেটওয়ার্ক বা I/O ক্রিয়াকলাপগুলি মূল থ্রেডকে ব্লক না করে।

কোটলিন

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

জাভা

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