কন্টেন্ট ম্যানেজ ও চালানো

ভিডিও কন্টেন্ট ম্যানেজ করার জন্য কীভাবে প্রি-লোড ম্যানেজার ব্যবহার করতে হয় তা এই পৃষ্ঠায় বর্ণনা করা হয়েছে। প্রিলোড ম্যানেজার ব্যবহার করে, আপনি ব্যবহারকারীকে আরও ভালো অভিজ্ঞতা দিতে পারেন; যখন ব্যবহারকারী একটি মিডিয়া আইটেম থেকে অন্য আইটেমে পরিবর্তন করেন, তখন প্লেব্যাক আরও দ্রুত শুরু হয় কারণ ম্যানেজার ইতিমধ্যেই কিছু কন্টেন্ট লোড করে নিয়েছে।

এই পৃষ্ঠায় নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত রয়েছে:

প্রিলোড ম্যানেজারে মিডিয়া আইটেম যোগ করা

প্রিলোড ম্যানেজার যে প্রতিটি মিডিয়া আইটেম ট্র্যাক করবে সেই সম্পর্কে আপনাকে জানাতে হবে। যেমন, আপনার অ্যাপে যদি ভিডিওর ক্যারোজেল থাকে, তাহলে আপনি সেগুলি প্রিলোড ম্যানেজারে যোগ করবেন। আপনার ব্যবহারের কেস অনুযায়ী, আপনি সব ভিডিও যোগ করতে পারেন অথবা যে ভিডিওটি বর্তমানে চলছে তার কাছাকাছি থাকা সব ভিডিও যোগ করতে পারেন। এছাড়াও, আপনি পরে প্রিলোড ম্যানেজারে নতুন আইটেম যোগ করতে পারবেন।

এটি করতে, addMediaItems-এর মতো ব্যাচ যোগ করার পদ্ধতি ব্যবহার করুন। অথবা, আপনি আলাদা আলাদা করে মিডিয়া আইটেম যোগ করতে add (বা addMediaSource) নম্বরে কল করতে পারেন। তবে, আলাদা আলাদাভাবে মিডিয়া আইটেম যোগ করলে প্রিলোডিং অটোমেটিক ট্রিগার হয় না। আলাদা আলাদা মেথড ব্যবহার করার সময়, আইটেম যোগ করা হয়ে গেলে আপনাকে অবশ্যই invalidate কল করতে হবে যাতে প্রিলোড ম্যানেজারকে অগ্রাধিকার আপডেট করতে এবং প্রিলোড করা শুরু করতে বলা যায়।

val initialMediaItems = pullMediaItemsFromService(count = 20)
val rankingDataList = initialMediaItems.indices.toList()
preloadManager.addMediaItems(initialMediaItems, rankingDataList)

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • আপনি তৈরি করার পরে কীভাবে ব্যাচ মোডে প্রি-লোড ম্যানেজারকে প্রাথমিকভাবে পপুলেট করতে হয় তা এই স্নিপেট থেকে জানতে পারবেন। আগে থেকে থাকা, পপুলেট করা প্রি-লোড ম্যানেজারে আইটেম যোগ করতে, আপনি addMediaItems নম্বরে কল করতে পারেন।
  • এই স্নিপেটে, pullMediaItemsFromService() হল চালানোর জন্য কন্টেন্টের তালিকা ফেচ করার অ্যাপের লজিক। কোডটি ২০টি আইটেম পর্যন্ত একটি তালিকা পেতে সেই পদ্ধতিকে কল করে।
  • preloadManager হল তৈরি করুন DefaultPreloadManager-এ তৈরি করা DefaultPreloadManager।
  • rankingData হল একটি ভ্যালু যা প্রতিটি মিডিয়া আইটেমের অগ্রাধিকার নির্ধারণ করতে প্রিলোড ম্যানেজার ব্যবহার করে। DefaultPreloadManager-এর জন্য, rankingData হল একটি পূর্ণসংখ্যা যা ক্যারোজেলের মধ্যে আইটেমের পজিশন দেখায়। প্রিলোড ম্যানেজার নির্ধারণ করে যে বর্তমানে চলছে এমন আইটেম থেকে প্রতিটি আইটেম কতটা দূরে আছে সেই অনুযায়ী অগ্রাধিকার নির্ধারণ করা হয়।

মিডিয়া নিয়ে আসা ও চালানো

ব্যবহারকারী নতুন মিডিয়া আইটেমে গেলে, আপনাকে প্রি-লোড ম্যানেজার থেকে মিডিয়া আইটেম পেতে হবে। প্রিলোড ম্যানেজার কোনও কন্টেন্ট লোড করে থাকলে, আপনি প্রিলোড ম্যানেজার ব্যবহার না করলে কন্টেন্টটি যত দ্রুত প্লে হত তার চেয়ে দ্রুত প্লে হবে। প্রিলোড ম্যানেজার যদি এখনও সেই আইটেম থেকে কন্টেন্ট লোড না করে থাকে, তাহলে কন্টেন্ট সাধারণভাবে চলবে।

এছাড়াও, আপনাকে প্রি-লোড ম্যানেজারে বর্তমান প্লেয়িং ইন্ডেক্স আপডেট করতে হবে। এর জন্য setCurrentPlayingIndex কল করতে হবে। এটি প্রি-লোড ম্যানেজারকে ভবিষ্যতে প্রি-লোডিং অপারেশন সম্পর্কিত অগ্রাধিকার নির্ধারণ করতে সাহায্য করে।

// When a media item is about to be displayed on the screen
val mediaSource = preloadManager.getMediaSource(mediaItem)
if (mediaSource != null) {
  player.setMediaSource(mediaSource)
} else {
  // If the mediaSource is null, its mediaItem hasn't been added to the preload
  // manager yet. Send it directly to the player when it's about to play.
  player.setMediaItem(mediaItem)
}
player.prepare()

// When the media item is being displayed at the center of the screen ("in focus")
player.play()
// Update the current playing index to let the preload manager know where the user
// is in the carousel/pagination/list.
preloadManager.setCurrentPlayingIndex(currentIndex)

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • player হল Media3 ExoPlayer যা অ্যাপটি কন্টেন্ট চালানোর জন্য ব্যবহার করছে। প্রিলোড ম্যানেজার তৈরি করার জন্য আপনি যে বিল্ডার ব্যবহার করেছেন, সেটিতে কল করে আপনাকে অবশ্যই DefaultPreloadManager.Builder.buildExoPlayer() সেই প্লেয়ার তৈরি করতে হবে।
  • ব্যবহারকারী নতুন মিডিয়া আইটেমে পরিবর্তন করলে, অ্যাপ getMediaSource() কল করে প্রি-লোড ম্যানেজার থেকে মিডিয়া সোর্স পায়। এটি অবশ্যই এমন একটি mediaItem যা আপনি আগেই প্রি-লোড ম্যানেজার-এ যোগ করেছেন। প্রিলোড ম্যানেজার যদি আগে থেকেই কন্টেন্ট লোড করা শুরু না করে থাকে, তাহলে কোনও সমস্যা নেই; সেই ক্ষেত্রে, এটি প্রিলোড করা ডেটা নেই এমন একটি MediaSource রিটার্ন করে। যেমন, ব্যবহারকারী হঠাৎ করে ক্যারোজেলের অনেকখানি এগিয়ে গেলে এটি হতে পারে।
  • ব্যবহারকারী নতুন মিডিয়া আইটেম চালানোর পরে, setCurrentPlayingIndex-এ কল করে প্রিলোড ম্যানেজারকে বলুন যে ক্যারোজেলের কোথায় নতুন আইটেমটি আছে। প্রিলোড ম্যানেজারের পরবর্তী আইটেম লোড করার ক্ষেত্রে অগ্রাধিকার দেওয়ার জন্য এই তথ্য প্রয়োজন।

প্রিলোড ম্যানেজার থেকে আইটেম সরানো

প্রিলোড ম্যানেজারকে আরও কার্যকর করতে, প্রিলোড ম্যানেজারকে আর ট্র্যাক করতে হবে না এমন আইটেম সরিয়ে দিন। এছাড়াও, আপনি এমন আইটেম সরিয়ে দিতে পারেন যেগুলি এখনও ক্যারোজেল থেকে সরানো হয়নি, কিন্তু ব্যবহারকারীর বর্তমান পজিশন থেকে অনেক দূরে আছে। যেমন, আপনি হয়ত সিদ্ধান্ত নিতে পারেন যে কোনও আইটেম ব্যবহারকারী যা দেখছেন তার থেকে ১৫টির বেশি আইটেম দূরে থাকলে, সেটি প্রিলোড করার প্রয়োজন নেই। সেই ক্ষেত্রে, আইটেমগুলি অনেক দূরে চলে গেলে আপনি সেগুলি সরিয়ে দেবেন। ব্যবহারকারী যদি সরিয়ে দেওয়া আইটেমের দিকে ফিরে যান, আপনি সবসময় সেগুলি আবার যোগ করতে পারবেন।

সরিয়ে দেওয়ার জন্য আপনার কাছে মিডিয়া আইটেমের তালিকা থাকলে, আপনি removeMediaItems ব্যবহার করতে পারবেন। অথবা, আপনি আলাদা আলাদাভাবে মিডিয়া আইটেম সরাতে remove (বা removeMediaSource) নম্বরে কল করতে পারেন।

preloadManager.removeMediaItems(mediaItemsToRemove)

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • আপনি যদি প্রি-লোড ম্যানেজার থেকে সব আইটেম সরাতে চান, তাহলে remove()-এর পরিবর্তে reset() কল করতে পারেন। আপনার ক্যারোজেলের সব আইটেম পরিবর্তন করার প্রয়োজন হলে এই পদ্ধতিটি উপযোগী। সেই ক্ষেত্রে, আইটেম সরিয়ে দেওয়ার পরে, আপনাকে প্রিলোড ম্যানেজারে নতুন আইটেম যোগ করতে হবে।

প্রিলোড ম্যানেজার ব্যবহার করা হয়ে গেলে সেটি রিলিজ করুন

প্রিলোড ম্যানেজার আর প্রয়োজন না হলে, এর রিসোর্স খালি করতে আপনাকে সেটি রিলিজ করতে হবে। বিশেষ করে, আপনার অ্যাক্টিভিটি ধ্বংস হয়ে গেলে এটি রিলিজ করতে ভুলবেন না।

preloadManager.release()

কোড সম্পর্কে গুরুত্বপূর্ণ পয়েন্ট

  • আপনি অবজেক্ট রিলিজ করার পরে সেটির কোনও মেথড কল করতে পারবেন না।
  • আপনাকে আরেকটি প্রি-লোড ম্যানেজার তৈরি করতে হলে, একটি নতুন DefaultPreloadManager.Builder তৈরি করুন এবং এটি ব্যবহার করে DefaultPreloadManager তৈরি করুন। পুরনো বিল্ডার আবার ব্যবহার করার চেষ্টা করবেন না।