Jetpack Media3 লাইব্রেরি CompositionPlayer API প্রদান করে, যা রিয়েল টাইমে ভিডিও এডিট প্রিভিউ করার জন্য একটি শক্তিশালী Player ইমপ্লিমেন্টেশন। যদি আপনার অ্যাপ ব্যবহারকারীদের ভিডিও এডিট করার সুযোগ দেয়, যেমন ইফেক্ট প্রয়োগ করা, ট্রিম করা বা একাধিক ইনপুট মিডিয়া আইটেম কম্পোজিট করা, তাহলে CompositionPlayer আপনাকে আউটপুটের একটি সঠিক প্রিভিউ দেখাতে সাহায্য করে। এটি সেইসব ক্ষেত্রে মূল্যবান হতে পারে যেখানে আপনার প্রয়োগ করা এডিটগুলো সেভ করার প্রয়োজন নেই, অথবা এক্সপোর্টের জন্য চূড়ান্ত ভিডিওতে এডিটগুলো প্রয়োগ করার আগে সেগুলো উদ্দেশ্য অনুযায়ী কনফিগার করা হয়েছে কিনা তা যাচাই করার জন্য।
CompositionPlayer বলতে কী বোঝায়?
CompositionPlayer হলো Player ইন্টারফেসের একটি বিশেষায়িত বাস্তবায়ন, যা বিশেষভাবে Composition অবজেক্ট প্লে করার জন্য ডিজাইন করা হয়েছে। একটি Composition নির্ধারণ করে যে ভিডিও ক্লিপ এবং অডিও ট্র্যাকের মতো ইনপুট মিডিয়া অ্যাসেটগুলো কীভাবে সাজানো হবে এবং সেগুলোর উপর কী কী অডিও ও ভিডিও ইফেক্ট প্রয়োগ করা হবে। Composition API সম্পর্কে আরও জানতে, “মিডিয়া আইটেমের একটি Composition সংজ্ঞায়িত করুন” দেখুন।
CompositionPlayer এর প্রধান উদ্দেশ্য হলো এই Composition , সমস্ত নির্দিষ্ট সম্পাদনা সহ, রিয়েল-টাইমে রেন্ডার করা, যাতে ব্যবহারকারীরা সম্ভাব্য সময় ও সম্পদ-ব্যয়কারী এক্সপোর্ট প্রক্রিয়ায় যাওয়ার আগেই তাদের সম্পাদনাগুলো ঠিক কেমন দেখাবে তা দেখতে পারেন। এরপর একই Composition অবজেক্টটি এক্সপোর্টের জন্য একটি Transformer ইনস্ট্যান্সের সাথে ব্যবহার করা যেতে পারে, যা সম্পর্কে আপনি "Exporting a Composition অংশে আরও জানতে পারবেন।
CompositionPlayer বনাম ExoPlayer
যদিও CompositionPlayer এবং ExoPlayer উভয়ই Media3-এর Player ইমপ্লিমেন্টেশন, তবুও এগুলো ভিন্ন ভিন্ন ব্যবহারের জন্য অপ্টিমাইজ করা হয়েছে:
বৈশিষ্ট্য | কম্পোজিশনপ্লেয়ার | এক্সোপ্লেয়ার |
ইনপুট মিডিয়া | একটিমাত্র Composition অবজেক্ট গ্রহণ করে, যা প্রতিটি আইটেমের জন্য আলাদা ইফেক্টসহ একাধিক EditedMediaItem ইনস্ট্যান্স নিয়ে গঠিত হতে পারে। | একটি একক MediaItem অথবা MediaItem ইনস্ট্যান্সের একটি প্লেলিস্ট গ্রহণ করে। |
সময়রেখা | সময়সীমা ও সময়কাল সম্পূর্ণ রচনাটির ওপর ভিত্তি করে নির্ধারিত হয়। | টাইমলাইন এবং সময়কাল সক্রিয়ভাবে প্লে হওয়া মিডিয়াআইটেমটির সাথে সঙ্গতিপূর্ণ। |
প্রভাব | ইফেক্টগুলো কম্পোজিশনের মধ্যেই সংজ্ঞায়িত করা হয় এবং সেগুলো কোনো একটি নির্দিষ্ট EditedMediaItem-এ অথবা সম্পূর্ণ কম্পোজিশনটিতে প্রয়োগ করা যেতে পারে। | setVideoEffects() ফাংশন ব্যবহার করে সরাসরি ExoPlayer ইনস্ট্যান্সটিতেই ইফেক্টগুলো সেট করা হয় এবং প্লেলিস্টের প্রতিটি আইটেমে প্রতিটি ইফেক্ট আলাদাভাবে প্রয়োগ করা হয়। |
মূলত, মিডিয়া ও ইফেক্টের একটি জটিল Composition রেন্ডার করার প্রয়োজন হলে, বিশেষত এডিটিংয়ের ক্ষেত্রে, CompositionPlayer সবচেয়ে বেশি সহায়ক হয়। অডিও বা ভিডিও কন্টেন্টের সাধারণ প্লেব্যাকের জন্য, অথবা setVideoEffects() ব্যবহার করে একক অ্যাসেটের এডিট প্রিভিউ করার জন্য ExoPlayer ব্যবহার করুন।
প্রিভিউয়ের জন্য CompositionPlayer
আপনার অ্যাপে CompositionPlayer যুক্ত করার জন্য কয়েকটি গুরুত্বপূর্ণ ধাপ অনুসরণ করতে হয়। প্রথমত, Builder প্যাটার্ন ব্যবহার করে একটি CompositionPlayer ইনস্ট্যানশিয়েট করুন, তারপর যে Composition প্লে করা হবে তা সেট করুন:
val compositionPlayer = CompositionPlayer.Builder(context).build() compositionPlayer.setComposition(composition) compositionPlayer.prepare() compositionPlayer.play()
কীভাবে একটি Composition তৈরি করতে হয়, সে বিষয়ে নির্দেশনার জন্য ‘ক্রিয়েট এ Composition অংশটি দেখুন।
উল্লেখ্য যে, যেহেতু CompositionPlayer Player ইন্টারফেসটি ইমপ্লিমেন্ট করে, তাই আপনি স্ট্যান্ডার্ড Player মেথডগুলোর মাধ্যমে টার্গেট আউটপুট সেট করতে এবং প্লেয়ারটিকে নিয়ন্ত্রণ করতে পারবেন।
ত্রুটি পরিচালনা
প্লেব্যাক ইভেন্ট এবং ত্রুটির প্রতিক্রিয়া জানাতে আপনার CompositionPlayer সাথে একটি Player.Listener ইনস্ট্যান্স সংযুক্ত করুন। onPlayerError() কলব্যাকটি Composition বা VideoGraph.Factory এর মতো এডিটিং-নির্দিষ্ট কম্পোনেন্টগুলো থেকে উদ্ভূত যেকোনো সমস্যাও তুলে ধরবে। আরও বিস্তারিত জানতে প্লেয়ার ইভেন্ট ডকুমেন্টেশন পড়ুন।
গুরুত্বপূর্ণ বিবেচ্য বিষয়
CompositionPlayer ব্যবহার করার সময় মনে রাখার মতো কিছু বৈশিষ্ট্য ও সীমাবদ্ধতা:
- যদিও
CompositionPlayerPlayerইন্টারফেসের উপর ভিত্তি করে তৈরি, এর কিছু আচরণExoPlayerথেকে ভিন্ন, কারণ প্লেব্যাকের জন্য এটি একটিCompositionউপর নির্ভর করে। উদাহরণস্বরূপ,CompositionPlayerশুধুমাত্র রিপিট মোডকেREPEAT_MODE_OFFবাREPEAT_MODE_ALLএ সেট করা সমর্থন করে। - ডিফল্টরূপে,
CompositionPlayerএকটিSingleInputVideoGraph.Factoryব্যবহার করে, কিন্তু যদি আপনার Composition-এ ছবি বা ভিডিও আইটেমসহ একাধিক সিকোয়েন্স থাকে, তাহলে আপনারCompositionPlayerইনস্ট্যান্স তৈরি করার সময়setVideoGraphFactory()ব্যবহার করে এর পরিবর্তে একটিMultipleInputVideoGraph.Factoryব্যবহার করা উচিত। যদি শুধুমাত্র একটি সিকোয়েন্সে ছবি বা ভিডিও আইটেম থাকে এবং বাকিগুলো শুধু অডিও-ভিত্তিক হয়, তাহলে একটিSingleInputVideoGraph.Factoryই যথেষ্ট। - আপনার কম্পোজিশনের সমস্ত মিডিয়া আইটেমের একটি সময়কাল স্পষ্টভাবে সেট করা উচিত; ছবির জন্য
MediaItem.Builder.setImageDurationMs()ব্যবহার করে, অথবা অডিও বা ভিডিওর জন্যEditedMediaItem.Builder.setDurationUs()ব্যবহার করে।
নিম্নলিখিত ব্যবহারের ক্ষেত্রগুলি সমর্থিত:
- একক-সম্পদ প্রিভিউ।
- একক-ক্রমের (অর্থাৎ, ক্রমানুসারে সাজানো মিডিয়া আইটেমগুলোর) প্রিভিউ।
- একক ভিডিও সিকোয়েন্স ও একক অডিও সিকোয়েন্সের (যেমন, ব্যাকগ্রাউন্ড অডিও) প্রিভিউ।
নিম্নলিখিত ব্যবহারের ক্ষেত্রগুলি সক্রিয়ভাবে বিকাশের অধীনে রয়েছে:
- মাল্টি-অ্যাসেট প্রিভিউ, যার মধ্যে পিকচার-ইন-পিকচার, সাইড-বাই-সাইড এবং গ্রিডের মতো লেআউট অন্তর্ভুক্ত, যেখানে একাধিক ভিডিও সিকোয়েন্স জড়িত থাকে।
- ভিন্ন গ্রাফিক্স ইঞ্জিন ব্যবহার করে এডিটিং পাইপলাইন কাস্টমাইজ করা।
বৈশিষ্ট্য অনুরোধ
CompositionPlayer জন্য আপনার কোনো ফিচার অনুরোধ বা মতামত থাকলে, Media3 গিটহাব রিপোজিটরিতে একটি ইস্যু ফাইল করুন।