CompositionPlayer-এর মাধ্যমে এডিট প্রিভিউ করা

Jetpack Media3 লাইব্রেরি CompositionPlayer API প্রদান করে, এটি রিয়েল-টাইমে ভিডিও এডিট প্রিভিউ করার জন্য একটি শক্তিশালী Player ইমপ্লিমেন্টেশন। আপনার অ্যাপ যদি ব্যবহারকারীদের ভিডিও এডিট করতে দেয়, যেমন এফেক্ট প্রয়োগ করা, ট্রিম করা বা একাধিক ইনপুট মিডিয়া আইটেম কম্পোজিট করা, তাহলে CompositionPlayer আপনাকে আউটপুটের সঠিক প্রিভিউ দেখাতে সাহায্য করে। যেসব ক্ষেত্রে আপনাকে প্রয়োগ করা এডিট সেভ করতে হবে না অথবা এক্সপোর্ট করার জন্য চূড়ান্ত ভিডিওতে এডিট কমিট করার আগে এডিটগুলি উদ্দেশ্য অনুযায়ী কনফিগার করা হয়েছে কিনা তা যাচাই করতে হবে, সেইসব ক্ষেত্রে এটি খুব গুরুত্বপূর্ণ হতে পারে।

CompositionPlayer কী?

CompositionPlayer হল প্লেয়ার ইন্টারফেসের একটি বিশেষ প্রয়োগ, যা বিশেষভাবে Composition অবজেক্ট চালানোর জন্য ডিজাইন করা হয়েছে। Composition সংজ্ঞায়িত করে ভিডিও ক্লিপ ও অডিও ট্র্যাকের মতো ইনপুট মিডিয়া অ্যাসেট কীভাবে সাজানো হয় এবং সেগুলিতে কী কী অডিও ও ভিডিও এফেক্ট প্রয়োগ করা হয়। Composition API সম্পর্কে আরও জানতে, মিডিয়া আইটেমের Composition নির্ধারণ করুন দেখুন।

CompositionPlayer-এর মূল উদ্দেশ্য হল, রিয়েল-টাইমে, নির্দিষ্ট করা সব এডিট সহ এই Composition রেন্ডার করা, যাতে ব্যবহারকারীরা সম্ভাব্য সময় ও সম্পদ-সাপেক্ষ এক্সপোর্ট প্রসেস শুরু করার আগে ঠিকভাবে দেখতে পান যে তাদের এডিট কেমন দেখতে লাগবে। একই Composition অবজেক্টটি তারপরে এক্সপোর্ট করার জন্য Transformer ইনস্ট্যান্সের সাথে ব্যবহার করা যেতে পারে, যা আপনি Composition এক্সপোর্ট করা থেকে আরও জানতে পারবেন।

CompositionPlayer বনাম ExoPlayer

CompositionPlayer ও ExoPlayer দুটিই Media3-এর মধ্যে Player ইমপ্লিমেন্টেশন হলেও, সেগুলি আলাদা আলাদা ব্যবহারের ক্ষেত্রে অপ্টিমাইজ করা হয়:

ফিচার

CompositionPlayer

ExoPlayer

ইনপুট মিডিয়া

একটি কম্পোজিশন অবজেক্ট নেয়, যার মধ্যে আইটেম-পিছু এফেক্ট সহ একাধিক EditedMediaItem ইনস্ট্যান্স থাকতে পারে।

একটি MediaItem বা MediaItem ইনস্ট্যান্সের প্লেলিস্ট নেয়।

টাইমলাইন

টাইমলাইন ও সময়সীমা সম্পূর্ণ কম্পোজিশনের উপর ভিত্তি করে নির্ধারণ করা হয়।

টাইমলাইন ও সময়সীমা অ্যাক্টিভভাবে চালানো MediaItem-এর সাথে সম্পর্কিত।

এফেক্ট

কম্পোজিশনের মধ্যে এফেক্ট সংজ্ঞায়িত করা হয় এবং কোনও একটি EditedMediaItem বা সম্পূর্ণ কম্পোজিশনে প্রয়োগ করা যেতে পারে।

setVideoEffects()-এর মাধ্যমে ExoPlayer ইনস্ট্যান্সে এফেক্ট সেট করা হয় এবং প্লেলিস্টের প্রতিটি আইটেমে আলাদা আলাদা করে এফেক্ট প্রয়োগ করা হয়।

মোটকথা, CompositionPlayer হল সবচেয়ে সহায়ক যখন আপনাকে মিডিয়া ও এফেক্টের জটিল Composition রেন্ডার করতে হয়, সাধারণত এডিটিংয়ের ক্ষেত্রে। অডিও বা ভিডিও কন্টেন্টের সাধারণ-উদ্দেশ্যমূলক প্লেব্যাকের জন্য ExoPlayer ব্যবহার করুন অথবা setVideoEffects()-এর মাধ্যমে সিঙ্গেল-অ্যাসেট এডিট প্রিভিউ করুন।

প্রিভিউয়ের জন্য CompositionPlayer

আপনার অ্যাপে CompositionPlayer ইন্টিগ্রেট করার জন্য কয়েকটি গুরুত্বপূর্ণ ধাপ রয়েছে। প্রথমে, Builder প্যাটার্ন ব্যবহার করে CompositionPlayer ইনস্ট্যানশিয়েট করুন, তারপর Composition সেট করুন যা চালানো হবে:

val compositionPlayer = CompositionPlayer.Builder(context).build()
compositionPlayer.setComposition(composition)
compositionPlayer.prepare()
compositionPlayer.play()

Composition কীভাবে তৈরি করবেনComposition সেই বিষয়ে নির্দেশিকা পেতে, Composition তৈরি করুন বিভাগ দেখুন।

মনে রাখবেন, CompositionPlayer যেহেতু Player ইন্টারফেস প্রয়োগ করে, তাই আপনি তারপরে স্ট্যান্ডার্ড Player পদ্ধতির মাধ্যমে টার্গেট আউটপুট সেট করতে এবং প্লেয়ার কন্ট্রোল করতে পারবেন।

সমস্যা ম্যানেজ করা

প্লেব্যাক ইভেন্ট ও সমস্যার ব্যাপারে প্রতিক্রিয়া জানাতে, আপনার CompositionPlayer-এর সাথে Player.Listener ইনস্ট্যান্স অ্যাটাচ করুন। এছাড়াও, onPlayerError() কলব্যাক Composition বা VideoGraph.Factory-এর মতো এডিটিং-নির্দিষ্ট কম্পোনেন্ট থেকে হওয়া যেকোনও সমস্যা তুলে ধরবে। আরও বিবরণের জন্য প্লেয়ার ইভেন্ট ডকুমেন্টেশন পড়ুন।

গুরুত্বপূর্ণ বিষয়

CompositionPlayer ব্যবহার করার সময় মনে রাখার মতো কিছু ফিচার ও সীমাবদ্ধতা:

  • CompositionPlayer Player ইন্টারফেসের উপর ভিত্তি করে তৈরি হলেও, এর কিছু ব্যবহার ExoPlayer-এর থেকে আলাদা, কারণ এটি প্লেব্যাকের জন্য Composition-এর উপর নির্ভর করে। যেমন, CompositionPlayer শুধুমাত্র রিপিট মোডকে REPEAT_MODE_OFF বা REPEAT_MODE_ALL হিসেবে সেট করার ক্ষেত্রে কাজ করে।
  • ডিফল্ট হিসেবে, CompositionPlayer একটি SingleInputVideoGraph.Factory ব্যবহার করে, কিন্তু আপনার কম্পোজিশনে ছবি বা ভিডিও আইটেম সহ একাধিক সিকোয়েন্স ব্যবহার করা হলে, আপনার CompositionPlayer ইনস্ট্যান্স তৈরি করার সময় setVideoGraphFactory() ব্যবহার করা উচিত, যাতে এর পরিবর্তে একটি MultipleInputVideoGraph.Factory ব্যবহার করা যায়। কোনও SingleInputVideoGraph.Factory যথেষ্ট যদি শুধুমাত্র একটি সিকোয়েন্সে ছবি বা ভিডিও আইটেম থাকে এবং বাকিগুলিতে শুধুমাত্র অডিও থাকে।
  • আপনার কম্পোজিশনে থাকা সব মিডিয়া আইটেমের একটি নির্দিষ্ট সময়সীমা সেট করা থাকতে হবে, ছবি হলে MediaItem.Builder.setImageDurationMs() এবং অডিও বা ভিডিও হলে EditedMediaItem.Builder.setDurationUs() ব্যবহার করে এটি করতে হবে।

নিচে উল্লেখ করা ব্যবহারের ক্ষেত্রে কাজ করে:

  • সিঙ্গেল-অ্যাসেট প্রিভিউ।
  • সিঙ্গেল-সিকোয়েন্স (অর্থাৎ, ক্রমিক মিডিয়া আইটেম) প্রিভিউ।
  • সিঙ্গেল ভিডিও সিকোয়েন্স + সিঙ্গেল অডিও সিকোয়েন্স (যেমন, ব্যাকগ্রাউন্ড অডিও) প্রিভিউ।

নিচে উল্লেখ করা ব্যবহারের ক্ষেত্রগুলি বর্তমানে ডেভেলপ করা হচ্ছে:

  • মাল্টি-অ্যাসেট প্রিভিউ, যার মধ্যে পিকচার-ইন-পিকচার, পাশাপাশি এবং গ্রিডের মতো লেআউট অন্তর্ভুক্ত, যেখানে একাধিক ভিডিও সিকোয়েন্স জড়িত।
  • অন্য গ্রাফিক্স ইঞ্জিন দিয়ে এডিটিং পাইপলাইন কাস্টমাইজ করা।

ফিচার সংক্রান্ত অনুরোধ

CompositionPlayer-এর জন্য আপনার কোনও ফিচারের অনুরোধ বা মতামত থাকলে, Media3 GitHub রিপোজিটরিতে একটি সমস্যা জমা দিন।