সহজ ব্যবহারের ক্ষেত্রে, ExoPlayer-এর সাথে শুরু করার মধ্যে নিম্নলিখিত ধাপগুলি
বাস্তবায়ন করা অন্তর্ভুক্ত:
- আপনার প্রোজেক্টে ExoPlayer-কে ডিপেন্ডেন্সি হিসেবে যোগ করুন।
ExoPlayerইনস্ট্যান্স তৈরি করুন।- প্লেয়ারটিকে একটি ভিউয়ের সাথে অ্যাটাচ করুন (ভিডিও আউটপুট ও ব্যবহারকারীর ইনপুটের জন্য)।
- খেলার জন্য
MediaItemদিয়ে প্লেয়ার প্রস্তুত করুন। - হয়ে গেলে প্লেয়ারটি রিলিজ করুন।
এইসব ধাপের বিবরণ নিচে আরও বিস্তারিতভাবে দেওয়া হল। সম্পূর্ণ উদাহরণের জন্য, মূল ডেমো অ্যাপে
PlayerActivity দেখুন।
ডিপেন্ডেন্সি হিসেবে ExoPlayer যোগ করুন
ExoPlayer মডিউল যোগ করা
AndroidX Media3 ব্যবহার শুরু করার সবচেয়ে সহজ উপায় হল, আপনার অ্যাপ
মডিউলের build.gradle ফাইলে আপনার প্রয়োজনীয় লাইব্রেরিতে gradle
ডিপেন্ডেন্সি যোগ করা।
যেমন, DASH প্লেব্যাক সাপোর্ট ও UI কম্পোনেন্ট সহ ExoPlayer-এর উপর নির্ভর করতে আপনি এই ধরনের মডিউলে নির্ভরতা যোগ করতে পারেন:
Kotlin
implementation("androidx.media3:media3-exoplayer:1.11.1")
implementation("androidx.media3:media3-exoplayer-dash:1.11.1")
implementation("androidx.media3:media3-ui:1.11.1")
implementation("androidx.media3:media3-ui-compose-material3:1.11.1")
গ্ৰুভি
implementation "androidx.media3:media3-exoplayer:1.11.1"
implementation "androidx.media3:media3-exoplayer-dash:1.11.1"
implementation "androidx.media3:media3-ui:1.11.1"
implementation("androidx.media3:media3-ui-compose-material3:1.11.1")
যেখানে 1.11.1 হল আপনার পছন্দের ভার্সন (লেটেস্ট ভার্সন পেতে রিলিজ নোট দেখুন)। সব মডিউল একই ভার্সনের হতে হবে।
AndroidX Media3-তে লাইব্রেরি মডিউল আছে যা অতিরিক্ত কার্যকারিতা প্রদান করতে এক্সটার্নাল লাইব্রেরির উপর নির্ভর করে। কিছু Maven রিপোজিটরি থেকে পাওয়া যায়, তবে অন্যগুলি ম্যানুয়ালি তৈরি করতে হবে। লাইব্রেরি ডিরেক্টরি ব্রাউজ করুন এবং বিবরণের জন্য আলাদা আলাদা README দেখুন।
উপলভ্য লাইব্রেরি মডিউল সম্পর্কে আরও তথ্য Google Maven AndroidX মিডিয়া পৃষ্ঠায় পাওয়া যাবে।
Java 8 সহায়তা চালু করুন
আগে থেকে চালু করা না থাকলে, ExoPlayer-এর উপর নির্ভর করে এমন সব
build.gradle ফাইলে আপনাকে অন্তত Java 8 সাপোর্ট চালু করতে হবে। এর জন্য
android বিভাগে নিম্নলিখিত কোড যোগ করুন:
compileOptions {
targetCompatibility JavaVersion.VERSION_1_8
}
প্লেয়ার তৈরি করা
আপনি ExoPlayer.Builder ব্যবহার করে ExoPlayer ইনস্ট্যান্স তৈরি করতে পারবেন, যা
কাস্টমাইজেশনের বিভিন্ন বিকল্প প্রদান করে। নিচের কোডটি হল কোনও ইনস্ট্যান্স তৈরি করার
সবচেয়ে সহজ উদাহরণ।
Kotlin
val player = ExoPlayer.Builder(context).build()
জাভা
ExoPlayer player = new ExoPlayer.Builder(context).build();
থ্রেডিং সম্পর্কে একটি নোট
ExoPlayer ইনস্ট্যান্স একটি অ্যাপ্লিকেশন থ্রেড থেকে অ্যাক্সেস করতে হবে। বেশিরভাগ ক্ষেত্রের জন্য, এটিই হওয়া উচিত অ্যাপ্লিকেশনের মূল থ্রেড। ExoPlayer-এর UI কম্পোনেন্ট বা IMA এক্সটেনশন ব্যবহার করার সময় অ্যাপ্লিকেশনের মূল থ্রেড ব্যবহার করা প্রয়োজন।
ExoPlayer ইনস্ট্যান্স যে থ্রেডে অ্যাক্সেস করতে হবে তা প্লেয়ার তৈরি করার সময় Looper পাস করে স্পষ্টভাবে
নির্দিষ্ট করা যেতে পারে। কোনও Looper উল্লেখ করা না থাকলে,
প্লেয়ার যে থ্রেডে তৈরি করা হয়েছে সেটির Looper ব্যবহার করা হয় অথবা সেই থ্রেডে Looper না থাকলে,
অ্যাপ্লিকেশনের মূল থ্রেডের Looper ব্যবহার করা হয়। সব ক্ষেত্রেই, প্লেয়ারকে অ্যাক্সেস করতে হবে এমন থ্রেডের Looper
কোডটি
Player.getApplicationLooper ব্যবহার করে কোয়েরি করা যেতে পারে।
ExoPlayer-এর থ্রেডিং মডেল সম্পর্কে আরও জানতে, ExoPlayer Javadoc-এর "থ্রেডিং মডেল" বিভাগ দেখুন।
কোনও ভিউতে প্লেয়ার অ্যাটাচ করা
media3-ui লাইব্রেরি মিডিয়া
প্লেব্যাকের জন্য আগে থেকে তৈরি করা UI কম্পোনেন্টের একটি রেঞ্জ প্রদান করে। এর মধ্যে PlayerView অন্তর্ভুক্ত, যা PlayerControlView,
SubtitleView এবং Surface-কে এনক্যাপসুলেট করে, যার উপরে ভিডিও রেন্ডার করা হয়। আপনার অ্যাপ্লিকেশনের লেআউট xml-এ PlayerView
অন্তর্ভুক্ত করা যেতে পারে। যেমন, ভিউয়ের সাথে প্লেয়ারকে
বাইন্ড করতে:
Kotlin
// Bind the player to the view. playerView.player = player
জাভা
// Bind the player to the view. playerView.setPlayer(player);
Media3-এর আগে থেকে তৈরি UI কম্পোনেন্ট ব্যবহার করা ঐচ্ছিক। যেসব ভিডিও অ্যাপ
নিজস্ব UI প্রয়োগ করে, সেগুলির জন্য প্লেয়ারের 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 অবজেক্টকে কোনও
androidx.media3.ui.compose.material3.Player কম্পোজ করার উপযুক্ত আইটেমের সাথে অ্যাটাচ করতে, এটিকে শুধু একটি
আর্গুমেন্ট হিসেবে পাস করুন:
// Bind the player to the composable. Player(player = player)
Media3 UI কম্পোনেন্ট ব্যবহার করা এবং UI পৃষ্ঠায় সেগুলি কাস্টমাইজ করা সম্পর্কে আরও জানুন।
প্লেলিস্টে কন্টেন্ট যোগ করা এবং প্লেয়ার প্রস্তুত করা
ExoPlayer-এ, প্রতিটি মিডিয়া আইটেমকে MediaItem দিয়ে দেখানো হয়। কোনও
মিডিয়া চালাতে, আপনাকে সংশ্লিষ্ট MediaItem তৈরি করতে হবে, সেটি
প্লেয়ারে যোগ করতে হবে, প্লেয়ার প্রস্তুত করতে হবে এবং প্লেব্যাক শুরু করতে play কল করতে হবে:
Kotlin
// 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 সরাসরি প্লেলিস্ট সাপোর্ট করে, তাই প্লেয়ারকে একের পর এক চালানোর জন্য একাধিক মিডিয়া আইটেম দিয়ে প্রস্তুত করা সম্ভব:
Kotlin
// 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-এ কল করে এটি
করা যেতে পারে।