সাধারণ ব্যবহারের ক্ষেত্রে, ExoPlayer শুরু করতে নিম্নলিখিত ধাপগুলো অনুসরণ করতে হয়:
- আপনার প্রজেক্টে ExoPlayer-কে একটি ডিপেন্ডেন্সি হিসেবে যুক্ত করুন।
- একটি
ExoPlayerইনস্ট্যান্স তৈরি করুন। - প্লেয়ারটিকে একটি ভিউয়ের সাথে সংযুক্ত করুন (ভিডিও আউটপুট এবং ব্যবহারকারীর ইনপুটের জন্য)।
- প্লে করার জন্য একটি
MediaItemদিয়ে প্লেয়ারটিকে প্রস্তুত করুন। - কাজ শেষ হলে প্লেয়ারটিকে ছেড়ে দিন।
এই ধাপগুলো নিচে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে। একটি সম্পূর্ণ উদাহরণের জন্য, মূল ডেমো অ্যাপের PlayerActivity দেখুন।
ExoPlayer-কে একটি নির্ভরতা হিসেবে যোগ করুন
ExoPlayer মডিউল যোগ করুন
AndroidX Media3 ব্যবহার শুরু করার সবচেয়ে সহজ উপায় হলো আপনার অ্যাপ মডিউলের build.gradle ফাইলে প্রয়োজনীয় লাইব্রেরিগুলোর গ্রেডল ডিপেন্ডেন্সি যোগ করা।
উদাহরণস্বরূপ, DASH প্লেব্যাক সাপোর্ট এবং UI কম্পোনেন্ট সহ ExoPlayer-কে ব্যবহার করতে, আপনি মডিউলগুলিতে এইভাবে ডিপেন্ডেন্সি যোগ করতে পারেন:
কোটলিন
implementation("androidx.media3:media3-exoplayer:1.10.0")
implementation("androidx.media3:media3-exoplayer-dash:1.10.0")
implementation("androidx.media3:media3-ui:1.10.0")
implementation("androidx.media3:media3-ui-compose-material3:1.10.0")
গ্রুভি
implementation "androidx.media3:media3-exoplayer:1.10.0"
implementation "androidx.media3:media3-exoplayer-dash:1.10.0"
implementation "androidx.media3:media3-ui:1.10.0"
implementation("androidx.media3:media3-ui-compose-material3:1.10.0")
যেখানে ১.১০.০ হলো আপনার পছন্দের সংস্করণ (সর্বশেষ সংস্করণটি রিলিজ নোট দেখে পাওয়া যাবে)। সমস্ত মডিউল অবশ্যই একই সংস্করণের হতে হবে।
AndroidX Media3-এর লাইব্রেরি মডিউল রয়েছে, যেগুলো অতিরিক্ত কার্যকারিতা প্রদানের জন্য বাহ্যিক লাইব্রেরির উপর নির্ভর করে। এর মধ্যে কিছু Maven রিপোজিটরি থেকে পাওয়া যায়, অপরদিকে অন্যগুলো ম্যানুয়ালি বিল্ড করতে হয়। বিস্তারিত জানতে libraries ডিরেক্টরি ব্রাউজ করুন এবং প্রতিটি README দেখুন।
উপলব্ধ লাইব্রেরি মডিউলগুলো সম্পর্কে আরও তথ্য গুগল ম্যাভেন অ্যান্ড্রয়েডএক্স মিডিয়া পেজে পাওয়া যাবে।
জাভা ৮ সমর্থন চালু করুন
যদি আগে থেকে চালু করা না থাকে, তাহলে ExoPlayer-এর উপর নির্ভরশীল সমস্ত build.gradle ফাইলের android সেকশনে নিম্নলিখিত লাইনগুলো যোগ করে অন্তত Java 8 সাপোর্ট চালু করতে হবে:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
প্লেয়ার তৈরি করুন
আপনি ExoPlayer.Builder ব্যবহার করে একটি ExoPlayer ইনস্ট্যান্স তৈরি করতে পারেন, যা বিভিন্ন ধরনের কাস্টমাইজেশন বিকল্প প্রদান করে। নিচের কোডটি একটি ইনস্ট্যান্স তৈরির সবচেয়ে সহজ উদাহরণ।
কোটলিন
val player = ExoPlayer.Builder(context).build()
জাভা
ExoPlayer player = new ExoPlayer.Builder(context).build();
থ্রেডিং সম্পর্কে একটি নোট
ExoPlayer ইনস্ট্যান্সগুলো অবশ্যই একটিমাত্র অ্যাপ্লিকেশন থ্রেড থেকে অ্যাক্সেস করতে হবে। অধিকাংশ ক্ষেত্রেই, এটি অ্যাপ্লিকেশনটির প্রধান থ্রেড হওয়া উচিত। ExoPlayer-এর UI কম্পোনেন্ট বা IMA এক্সটেনশন ব্যবহার করার সময় অ্যাপ্লিকেশনটির প্রধান থ্রেড ব্যবহার করা একটি আবশ্যিক শর্ত।
প্লেয়ার তৈরি করার সময় একটি Looper পাস করার মাধ্যমে, কোন থ্রেড থেকে একটি ExoPlayer ইনস্ট্যান্স অ্যাক্সেস করতে হবে তা স্পষ্টভাবে নির্দিষ্ট করা যায়। যদি কোনো Looper নির্দিষ্ট করা না থাকে, তাহলে যে থ্রেডে প্লেয়ারটি তৈরি করা হয়েছে তার Looper ব্যবহৃত হয়, অথবা যদি সেই থ্রেডের কোনো Looper না থাকে, তাহলে অ্যাপ্লিকেশনটির প্রধান থ্রেডের Looper ব্যবহৃত হয়। সব ক্ষেত্রেই, Player.getApplicationLooper ব্যবহার করে যে থ্রেড থেকে প্লেয়ারটি অ্যাক্সেস করতে হবে তার Looper কোয়েরি করা যায়।
ExoPlayer-এর থ্রেডিং মডেল সম্পর্কে আরও তথ্যের জন্য, ExoPlayer Javadoc-এর "থ্রেডিং মডেল" বিভাগটি দেখুন।
প্লেয়ারটিকে একটি ভিউয়ের সাথে সংযুক্ত করুন
media3-ui লাইব্রেরিটি মিডিয়া প্লেব্যাকের জন্য বিভিন্ন ধরনের পূর্ব-নির্মিত UI কম্পোনেন্ট প্রদান করে। এগুলোর মধ্যে রয়েছে PlayerView , যা একটি PlayerControlView , একটি SubtitleView , এবং একটি Surface এনক্যাপসুলেট করে, যার উপর ভিডিও রেন্ডার করা হয়। আপনার অ্যাপ্লিকেশনের লেআউট xml-এ একটি PlayerView অন্তর্ভুক্ত করা যেতে পারে। উদাহরণস্বরূপ, প্লেয়ারটিকে ভিউয়ের সাথে বাইন্ড করতে:
কোটলিন
// Bind the player to the view. playerView.player = player
জাভা
// Bind the player to the view. playerView.setPlayer(player);
Media3-এর আগে থেকে তৈরি UI কম্পোনেন্টগুলোর ব্যবহার ঐচ্ছিক। যেসব ভিডিও অ্যাপ তাদের নিজস্ব UI প্রয়োগ করে, তাদের জন্য Player-এর setVideoSurfaceView , setVideoTextureView , setVideoSurfaceHolder , এবং setVideoSurface মেথডগুলো যথাক্রমে টার্গেট SurfaceView , TextureView , SurfaceHolder বা Surface সেট করতে পারে। প্লেব্যাকের সময় যে ক্যাপশনগুলো রেন্ডার করা হবে, সেগুলো গ্রহণ করার জন্য Listener.onCues কলব্যাক ব্যবহার করা যেতে পারে এবং ডিকোড করা ছবিগুলো গ্রহণ করার জন্য setImageOutput ব্যবহার করা যেতে পারে।
আরও আরামদায়ক ইউজার এক্সপেরিয়েন্সের জন্য, keepScreenOn অ্যাট্রিবিউটটি যোগ করার কথা বিবেচনা করতে পারেন। ডিভাইসটিকে সজাগ রাখে এমন অন্যান্য অ্যাকশনগুলো আপনি ব্যাকগ্রাউন্ড ওয়ার্ক পেজগুলোতে খতিয়ে দেখতে পারেন।
android:keepScreenOn="true"
আপনার অ্যাপ যদি তার UI-এর জন্য Jetpack Compose ব্যবহার করে, তাহলে আপনি media3-ui-compose-material3 লাইব্রেরি থেকে Player Composable ব্যবহার করতে পারেন। এই Player ভিডিও প্রদর্শন করে এবং প্লেব্যাক কন্ট্রোল স্লটগুলোর জন্য আগে থেকেই মান পূরণ করা থাকে। একটি androidx.media3.common.Player Composable-এর সাথে একটি androidx.media3.ui.compose.material3.Player অবজেক্ট সংযুক্ত করতে, শুধু এটিকে একটি আর্গুমেন্ট হিসেবে পাস করুন:
// Bind the player to the composable. Player(player = player)
Media3 UI কম্পোনেন্টগুলোর ব্যবহার এবং সেগুলোর কাস্টমাইজেশন সম্পর্কে আরও জানতে UI পেজটি পড়ুন।
প্লেলিস্টে গান যোগ করা এবং প্লেয়ার প্রস্তুত করা
ExoPlayer-এ প্রতিটি মিডিয়া একটি MediaItem দ্বারা উপস্থাপিত হয়। কোনো মিডিয়া প্লে করার জন্য, আপনাকে একটি সংশ্লিষ্ট MediaItem তৈরি করতে হবে, সেটিকে প্লেয়ারে যোগ করতে হবে, প্লেয়ারটি প্রস্তুত করতে হবে এবং প্লেব্যাক শুরু করার জন্য play কল করতে হবে।
কোটলিন
// Build the media item. val mediaItem = MediaItem.fromUri(videoUri) // Set the media item to be played. player.setMediaItem(mediaItem) // Prepare the player. player.prepare() // Start the playback. player.play()
জাভা
// Build the media item. MediaItem mediaItem = MediaItem.fromUri(videoUri); // Set the media item to be played. player.setMediaItem(mediaItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
ExoPlayer সরাসরি প্লেলিস্ট সমর্থন করে, ফলে একের পর এক চালানোর জন্য প্লেয়ারটিতে একাধিক মিডিয়া আইটেম প্রস্তুত করা সম্ভব:
কোটলিন
// Build the media items. val firstItem = MediaItem.fromUri(firstVideoUri) val secondItem = MediaItem.fromUri(secondVideoUri) // Add the media items to be played. player.addMediaItem(firstItem) player.addMediaItem(secondItem) // Prepare the player. player.prepare() // Start the playback. player.play()
জাভা
// Build the media items. MediaItem firstItem = MediaItem.fromUri(firstVideoUri); MediaItem secondItem = MediaItem.fromUri(secondVideoUri); // Add the media items to be played. player.addMediaItem(firstItem); player.addMediaItem(secondItem); // Prepare the player. player.prepare(); // Start the playback. player.play();
প্লেয়ারকে পুনরায় প্রস্তুত করার প্রয়োজন ছাড়াই প্লেব্যাক চলাকালীন প্লেলিস্ট আপডেট করা যায়। প্লেলিস্টে উপাদান যোগ করা এবং তা পরিবর্তন করার বিষয়ে আরও জানতে প্লেলিস্টস পৃষ্ঠাটি পড়ুন। মিডিয়া আইটেম তৈরি করার সময় উপলব্ধ বিভিন্ন বিকল্প, যেমন ক্লিপিং এবং সাবটাইটেল ফাইল সংযুক্ত করা, সম্পর্কে আরও জানতে মিডিয়া আইটেমস পৃষ্ঠাটি পড়ুন।
খেলোয়াড়কে নিয়ন্ত্রণ করুন
প্লেয়ারটি প্রস্তুত হয়ে গেলে, প্লেয়ারের মেথডগুলো কল করার মাধ্যমে প্লেব্যাক নিয়ন্ত্রণ করা যায়। নিচে সর্বাধিক ব্যবহৃত কয়েকটি মেথড দেওয়া হলো:
-
playএবংpause, প্লেব্যাক শুরু এবং পজ করুন। -
seekToমিডিয়ার মধ্যে অনুসন্ধান করার সুযোগ দেয়। -
hasPrevious,hasNext,previousএবংnextপ্লেলিস্টের মধ্যে নেভিগেট করার সুযোগ দেয়। -
setRepeatModeনিয়ন্ত্রণ করে মিডিয়া লুপ হবে কি না এবং কীভাবে হবে। -
setShuffleModeEnabledপ্লেলিস্টের শাফলিং নিয়ন্ত্রণ করে। -
setPlaybackParametersপ্লেব্যাকের গতি এবং অডিওর পিচ সামঞ্জস্য করে।
যদি প্লেয়ারটি কোনো PlayerView বা PlayerControlView সাথে আবদ্ধ থাকে, তাহলে ব্যবহারকারীর এই কম্পোনেন্টগুলোর সাথে মিথস্ক্রিয়ার ফলে প্লেয়ারের সংশ্লিষ্ট মেথডগুলো কল করা হবে।
প্লেয়ারটি ছেড়ে দিন
যখন প্লেয়ারটির আর প্রয়োজন হয় না, তখন এটিকে রিলিজ করা জরুরি, যাতে ভিডিও ডিকোডারের মতো সীমিত রিসোর্সগুলো অন্যান্য অ্যাপ্লিকেশনের ব্যবহারের জন্য মুক্ত হয়। ExoPlayer.release কল করার মাধ্যমে এটি করা যায়।