সাধারণ ব্যবহারের ক্ষেত্রে, ExoPlayer
দিয়ে শুরু করার জন্য নিম্নলিখিত পদক্ষেপগুলি বাস্তবায়ন করা হয়:
- আপনার প্রকল্পে নির্ভরতা হিসাবে ExoPlayer যোগ করুন।
- একটি
ExoPlayer
উদাহরণ তৈরি করুন। - প্লেয়ারকে একটি ভিউতে সংযুক্ত করুন (ভিডিও আউটপুট এবং ব্যবহারকারীর ইনপুটের জন্য)।
- প্লেয়ারকে একটি
MediaItem
দিয়ে খেলতে প্রস্তুত করুন। - হয়ে গেলে প্লেয়ারটিকে ছেড়ে দিন।
এই পদক্ষেপগুলি নীচে আরও বিশদে বর্ণনা করা হয়েছে। একটি সম্পূর্ণ উদাহরণের জন্য, প্রধান ডেমো অ্যাপে PlayerActivity
পড়ুন।
নির্ভরতা হিসাবে ExoPlayer যোগ করুন
ExoPlayer মডিউল যোগ করুন
AndroidX Media3 ব্যবহার শুরু করার সবচেয়ে সহজ উপায় হল আপনার অ্যাপ মডিউলের build.gradle
ফাইলে আপনার প্রয়োজনীয় লাইব্রেরিতে gradle নির্ভরতা যোগ করা।
উদাহরণস্বরূপ, DASH প্লেব্যাক সমর্থন এবং UI উপাদানগুলির সাথে ExoPlayer এর উপর নির্ভর করতে আপনি এই মত মডিউলগুলিতে নির্ভরতা যুক্ত করতে পারেন:
কোটলিন
implementation("androidx.media3:media3-exoplayer:1.5.0") implementation("androidx.media3:media3-exoplayer-dash:1.5.0") implementation("androidx.media3:media3-ui:1.5.0")
গ্রোভি
implementation "androidx.media3:media3-exoplayer:1.5.0" implementation "androidx.media3:media3-exoplayer-dash:1.5.0" implementation "androidx.media3:media3-ui:1.5.0"
যেখানে 1.5.0 আপনার পছন্দের সংস্করণ (সর্বশেষ সংস্করণটি রিলিজ নোটের সাথে পরামর্শ করে পাওয়া যাবে)। সমস্ত মডিউল একই সংস্করণ হতে হবে।
AndroidX Media3 এর লাইব্রেরি মডিউল রয়েছে যা অতিরিক্ত কার্যকারিতা প্রদানের জন্য বহিরাগত লাইব্রেরির উপর নির্ভর করে। কিছু ম্যাভেন রিপোজিটরি থেকে পাওয়া যায়, অন্যগুলো ম্যানুয়ালি তৈরি করা আবশ্যক। লাইব্রেরি ডিরেক্টরি ব্রাউজ করুন এবং বিস্তারিত জানার জন্য পৃথক README দেখুন।
উপলব্ধ লাইব্রেরি মডিউল সম্পর্কে আরও তথ্য Google Maven AndroidX Media পৃষ্ঠায় পাওয়া যাবে।
জাভা 8 সমর্থন চালু করুন
যদি ইতিমধ্যে সক্ষম না করা থাকে, তাহলে আপনাকে android
বিভাগে নিম্নলিখিত যোগ করে ExoPlayer-এর উপর নির্ভরশীল সমস্ত build.gradle
ফাইলে 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 এক্সটেনশন ব্যবহার করার সময় অ্যাপ্লিকেশনের প্রধান থ্রেড ব্যবহার করা একটি প্রয়োজনীয়তা।
যে থ্রেডটিতে একটি ExoPlayer ইনস্ট্যান্স অ্যাক্সেস করতে হবে তা প্লেয়ার তৈরি করার সময় একটি Looper
পাস করে স্পষ্টভাবে নির্দিষ্ট করা যেতে পারে। যদি কোনও Looper
নির্দিষ্ট করা না থাকে, তাহলে প্লেয়ারটি যে থ্রেডটিতে তৈরি করা হয়েছে তার Looper
ব্যবহার করা হয়, অথবা যদি সেই থ্রেডটিতে একটি Looper
না থাকে তবে অ্যাপ্লিকেশনটির প্রধান থ্রেডের Looper
ব্যবহার করা হয়। সব ক্ষেত্রে, যে থ্রেড থেকে প্লেয়ারকে অ্যাক্সেস করতে হবে তার Looper
Player.getApplicationLooper
ব্যবহার করে জিজ্ঞাসা করা যেতে পারে।
ExoPlayer এর থ্রেডিং মডেল সম্পর্কে আরও তথ্যের জন্য, ExoPlayer Javadoc-এর "থ্রেডিং মডেল" বিভাগটি দেখুন।
একটি দৃশ্যে প্লেয়ার সংযুক্ত করুন
ExoPlayer লাইব্রেরি মিডিয়া প্লেব্যাকের জন্য পূর্ব-নির্মিত UI উপাদানগুলির একটি পরিসীমা প্রদান করে। এর মধ্যে রয়েছে PlayerView
, যা একটি PlayerControlView
, একটি SubtitleView
এবং একটি Surface
এনক্যাপসুলেট করে যেখানে ভিডিও রেন্ডার করা হয়৷ একটি PlayerView
আপনার অ্যাপ্লিকেশনের লেআউট xml-এ অন্তর্ভুক্ত করা যেতে পারে। উদাহরণস্বরূপ, প্লেয়ারকে ভিউতে আবদ্ধ করতে:
কোটলিন
// Bind the player to the view. playerView.player = player
জাভা
// Bind the player to the view. playerView.setPlayer(player);
আপনি একটি স্বতন্ত্র উপাদান হিসাবে PlayerControlView
ব্যবহার করতে পারেন, যা শুধুমাত্র অডিও ব্যবহারের ক্ষেত্রে উপযোগী।
ExoPlayer এর পূর্ব-নির্মিত UI উপাদানগুলির ব্যবহার ঐচ্ছিক। ভিডিও অ্যাপ্লিকেশানগুলির জন্য যেগুলি তাদের নিজস্ব UI প্রয়োগ করে, লক্ষ্য SurfaceView
, TextureView
, SurfaceHolder
বা Surface
যথাক্রমে ExoPlayer-এর setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
, এবং setVideoSurface
পদ্ধতিগুলি ব্যবহার করে সেট করা যেতে পারে৷ ExoPlayer এর addTextOutput
পদ্ধতিটি ক্যাপশনগুলি পেতে ব্যবহার করা যেতে পারে যা প্লেব্যাকের সময় রেন্ডার করা উচিত।
প্লেলিস্ট পপুলেট এবং প্লেয়ার প্রস্তুত
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
কল করে এটি করা যেতে পারে।
সাধারণ ব্যবহারের ক্ষেত্রে, ExoPlayer
দিয়ে শুরু করার জন্য নিম্নলিখিত পদক্ষেপগুলি বাস্তবায়ন করা হয়:
- আপনার প্রকল্পে নির্ভরতা হিসাবে ExoPlayer যোগ করুন।
- একটি
ExoPlayer
উদাহরণ তৈরি করুন। - প্লেয়ারকে একটি ভিউতে সংযুক্ত করুন (ভিডিও আউটপুট এবং ব্যবহারকারীর ইনপুটের জন্য)।
- প্লেয়ারকে একটি
MediaItem
দিয়ে খেলতে প্রস্তুত করুন। - হয়ে গেলে প্লেয়ারটিকে ছেড়ে দিন।
এই পদক্ষেপগুলি নীচে আরও বিশদে বর্ণনা করা হয়েছে। একটি সম্পূর্ণ উদাহরণের জন্য, প্রধান ডেমো অ্যাপে PlayerActivity
পড়ুন।
নির্ভরতা হিসাবে ExoPlayer যোগ করুন
ExoPlayer মডিউল যোগ করুন
AndroidX Media3 ব্যবহার শুরু করার সবচেয়ে সহজ উপায় হল আপনার অ্যাপ মডিউলের build.gradle
ফাইলে আপনার প্রয়োজনীয় লাইব্রেরিতে gradle নির্ভরতা যোগ করা।
উদাহরণস্বরূপ, DASH প্লেব্যাক সমর্থন এবং UI উপাদানগুলির সাথে ExoPlayer এর উপর নির্ভর করতে আপনি এই মত মডিউলগুলিতে নির্ভরতা যুক্ত করতে পারেন:
কোটলিন
implementation("androidx.media3:media3-exoplayer:1.5.0") implementation("androidx.media3:media3-exoplayer-dash:1.5.0") implementation("androidx.media3:media3-ui:1.5.0")
গ্রোভি
implementation "androidx.media3:media3-exoplayer:1.5.0" implementation "androidx.media3:media3-exoplayer-dash:1.5.0" implementation "androidx.media3:media3-ui:1.5.0"
যেখানে 1.5.0 আপনার পছন্দের সংস্করণ (সর্বশেষ সংস্করণটি রিলিজ নোটের সাথে পরামর্শ করে পাওয়া যাবে)। সমস্ত মডিউল একই সংস্করণ হতে হবে।
AndroidX Media3 এর লাইব্রেরি মডিউল রয়েছে যা অতিরিক্ত কার্যকারিতা প্রদানের জন্য বহিরাগত লাইব্রেরির উপর নির্ভর করে। কিছু ম্যাভেন রিপোজিটরি থেকে পাওয়া যায়, অন্যগুলো ম্যানুয়ালি তৈরি করা আবশ্যক। লাইব্রেরি ডিরেক্টরি ব্রাউজ করুন এবং বিস্তারিত জানার জন্য পৃথক README দেখুন।
উপলব্ধ লাইব্রেরি মডিউল সম্পর্কে আরও তথ্য Google Maven AndroidX Media পৃষ্ঠায় পাওয়া যাবে।
জাভা 8 সমর্থন চালু করুন
যদি ইতিমধ্যে সক্ষম না করা থাকে, তাহলে আপনাকে android
বিভাগে নিম্নলিখিত যোগ করে ExoPlayer-এর উপর নির্ভরশীল সমস্ত build.gradle
ফাইলে 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 এক্সটেনশন ব্যবহার করার সময় অ্যাপ্লিকেশনের প্রধান থ্রেড ব্যবহার করা একটি প্রয়োজনীয়তা।
যে থ্রেডটিতে একটি ExoPlayer ইনস্ট্যান্স অ্যাক্সেস করতে হবে তা প্লেয়ার তৈরি করার সময় একটি Looper
পাস করে স্পষ্টভাবে নির্দিষ্ট করা যেতে পারে। যদি কোনও Looper
নির্দিষ্ট করা না থাকে, তাহলে প্লেয়ারটি যে থ্রেডটিতে তৈরি করা হয়েছে তার Looper
ব্যবহার করা হয়, অথবা যদি সেই থ্রেডটিতে একটি Looper
না থাকে তবে অ্যাপ্লিকেশনটির প্রধান থ্রেডের Looper
ব্যবহার করা হয়। সব ক্ষেত্রে, যে থ্রেড থেকে প্লেয়ারকে অ্যাক্সেস করতে হবে তার Looper
Player.getApplicationLooper
ব্যবহার করে জিজ্ঞাসা করা যেতে পারে।
ExoPlayer এর থ্রেডিং মডেল সম্পর্কে আরও তথ্যের জন্য, ExoPlayer Javadoc-এর "থ্রেডিং মডেল" বিভাগটি দেখুন।
একটি দৃশ্যে প্লেয়ার সংযুক্ত করুন
ExoPlayer লাইব্রেরি মিডিয়া প্লেব্যাকের জন্য পূর্ব-নির্মিত UI উপাদানগুলির একটি পরিসীমা প্রদান করে। এর মধ্যে রয়েছে PlayerView
, যা একটি PlayerControlView
, একটি SubtitleView
এবং একটি Surface
এনক্যাপসুলেট করে যেখানে ভিডিও রেন্ডার করা হয়৷ একটি PlayerView
আপনার অ্যাপ্লিকেশনের লেআউট xml-এ অন্তর্ভুক্ত করা যেতে পারে। উদাহরণস্বরূপ, প্লেয়ারকে ভিউতে আবদ্ধ করতে:
কোটলিন
// Bind the player to the view. playerView.player = player
জাভা
// Bind the player to the view. playerView.setPlayer(player);
আপনি একটি স্বতন্ত্র উপাদান হিসাবে PlayerControlView
ব্যবহার করতে পারেন, যা শুধুমাত্র অডিও ব্যবহারের ক্ষেত্রে উপযোগী।
ExoPlayer এর পূর্ব-নির্মিত UI উপাদানগুলির ব্যবহার ঐচ্ছিক। ভিডিও অ্যাপ্লিকেশানগুলির জন্য যেগুলি তাদের নিজস্ব UI প্রয়োগ করে, লক্ষ্য SurfaceView
, TextureView
, SurfaceHolder
বা Surface
যথাক্রমে ExoPlayer-এর setVideoSurfaceView
, setVideoTextureView
, setVideoSurfaceHolder
, এবং setVideoSurface
পদ্ধতিগুলি ব্যবহার করে সেট করা যেতে পারে৷ ExoPlayer এর addTextOutput
পদ্ধতিটি ক্যাপশনগুলি পেতে ব্যবহার করা যেতে পারে যা প্লেব্যাকের সময় রেন্ডার করা উচিত।
প্লেলিস্ট পপুলেট এবং প্লেয়ার প্রস্তুত
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
কল করে এটি করা যেতে পারে।