শুরু করা

সহজ ব্যবহারের ক্ষেত্রে, ExoPlayer ব্যবহার শুরু করার জন্য নিম্নলিখিত ধাপগুলি অনুসরণ করতে হবে:

  1. আপনার প্রোজেক্টে ExoPlayer-কে ডিপেন্ডেন্সি হিসেবে যোগ করুন।
  2. ExoPlayer ইনস্ট্যান্স তৈরি করুন।
  3. প্লেয়ারকে একটি ভিউয়ের সাথে অ্যাটাচ করুন (ভিডিও আউটপুট ও ব্যবহারকারীর ইনপুটের জন্য)।
  4. MediaItem-এর মাধ্যমে প্লেয়ারকে চালানোর জন্য প্রস্তুত করুন।
  5. হয়ে গেলে প্লেয়ার ছেড়ে দিন।

এইসব ধাপ নিচে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে। সম্পূর্ণ উদাহরণের জন্য, মূল ডেমো অ্যাপ-এ PlayerActivity দেখুন।

ExoPlayer-কে ডিপেন্ডেন্সি হিসেবে যোগ করা

ExoPlayer মডিউল যোগ করা

AndroidX Media3 ব্যবহার শুরু করার সবচেয়ে সহজ উপায় হল আপনার অ্যাপ মডিউলের build.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 Media পৃষ্ঠায় পাওয়া যাবে।

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 ব্যবহার করা হয়। সব ক্ষেত্রে, Player.getApplicationLooper ব্যবহার করে থ্রেডের Looper কোয়েরি করা যেতে পারে যেখান থেকে প্লেয়ারকে অ্যাক্সেস করতে হবে।

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 প্রয়োগ করে, সেগুলির ক্ষেত্রে টার্গেট SurfaceView, TextureView, SurfaceHolder বা Surface যথাক্রমে প্লেয়ারের setVideoSurfaceView, setVideoTextureView, setVideoSurfaceHolder এবং setVideoSurface পদ্ধতি ব্যবহার করে সেট করা যেতে পারে। প্লেব্যাকের সময় রেন্ডার করা উচিত এমন ক্যাপশন পেতে Listener.onCues কলব্যাক ব্যবহার করা যেতে পারে এবং ডিকোড করা ছবি পেতে setImageOutput ব্যবহার করা যেতে পারে।

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

android:keepScreenOn="true"

আপনার অ্যাপ UI-এর জন্য Jetpack Compose ব্যবহার করলে, আপনি media3-ui-compose-material3 লাইব্রেরি থেকে Player Composable ব্যবহার করতে পারবেন। Player ভিডিও দেখায় এবং প্লেব্যাক কন্ট্রোল স্লটের জন্য অটো-ফিল করা ভ্যালু অন্তর্ভুক্ত করে। androidx.media3.ui.compose.material3.Player Composable-এ androidx.media3.common.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-এ কল করে এটি করা যেতে পারে।