ভিডিও ফ্রেম বের করুন

FrameExtractor ক্লাসটি MediaItem থেকে ডিকোড করা ফ্রেমগুলি বের করার একটি কার্যকর উপায় প্রদান করে।

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

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

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

FrameExtractor ব্যবহার একটি দুই ধাপের প্রক্রিয়া:

  1. এক্সট্র্যাক্টর তৈরি করুন : FrameExtractor.Builder ব্যবহার করে একটি ইনস্ট্যান্স তৈরি করুন। আপনি যে Context এবং MediaItem পরীক্ষা করতে চান তা বিল্ডারকে দিন। উন্নত সেটিংসের জন্য আপনি Builder কনফিগারেশন পদ্ধতিগুলিও চেইন করতে পারেন।
  2. ফ্রেম এক্সট্র্যাক্ট করুন : একটি নির্দিষ্ট টাইমস্ট্যাম্পে একটি ফ্রেম এক্সট্র্যাক্ট করতে getFrame() কল করুন অথবা একটি প্রতিনিধিত্বমূলক থাম্বনেইল অনুরোধ করতে getThumbnail() কল করুন। এই পদ্ধতিগুলি অ্যাসিঙ্ক্রোনাস এবং একটি ListenableFuture প্রদান করে। অতএব, জটিল ডিকোডিং কাজ মূল থ্রেডকে ব্লক করে না।

কোটলিন

suspend fun extractFrame(context: Context, mediaItem: MediaItem) {
    try {
        // 1. Build the frame extractor.
        // `FrameExtractor` implements `AutoCloseable`, so wrap it in
        // a Kotlin `.use` block, which calls `close()` automatically.
        FrameExtractor.Builder(context, mediaItem).build().use { extractor ->
            // 2. Extract frames asynchronously.
            val frame = extractor.getFrame(5000L).await()
            val thumbnail = extractor.thumbnail.await()
            handleFrame(frame, thumbnail)
        }
    } catch (e: Exception) {
        Log.e(TAG, "Exception: $e")
    }
}

জাভা

public void extractFrame(Context context, MediaItem mediaItem) {
    // 1. Build the frame extractor.
    // `FrameExtractor` implements `AutoCloseable`, so use try-with-resources
    // so that the resources are automatically released.
    try (FrameExtractor frameExtractor = new FrameExtractor.Builder(context, mediaItem).build()) {
        // 2. Extract frames asynchronously.
        ListenableFuture<FrameExtractor.Frame> frameFuture = frameExtractor.getFrame(5000L);
        ListenableFuture<FrameExtractor.Frame> thumbnailFuture = frameExtractor.getThumbnail();

        ListenableFuture<List<Object>> allFutures = Futures.allAsList(frameFuture, thumbnailFuture);
        Futures.addCallback(allFutures, new FutureCallback<>() {
            @Override
            public void onSuccess(List<Object> result) {
                handleFrame(Futures.getUnchecked(frameFuture), Futures.getUnchecked(thumbnailFuture));
            }

            @Override
            public void onFailure(@NonNull Throwable t) {
                handleFailure(t);
            }
        }, MoreExecutors.directExecutor());
    }
}