বিষয়বস্তু পরিচালনা এবং খেলা

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

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

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

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

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

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

কোড সম্পর্কে মূল বিষয়গুলো

  • এই কোড স্নিপেটটি দেখায় কিভাবে প্রিলোড ম্যানেজার তৈরি করার পর ব্যাচ মোডে প্রাথমিকভাবে তাতে ডেটা যোগ করতে হয়। আগে থেকে ডেটা দিয়ে পূর্ণ থাকা কোনো প্রিলোড ম্যানেজারে আইটেম যোগ করার জন্য আপনি addMediaItems কল করতে পারেন।
  • এই কোড অংশে, pullMediaItemsFromService() হলো অ্যাপটির সেই লজিক যা প্লে করার জন্য কন্টেন্টের তালিকা নিয়ে আসে। কোডটি সর্বোচ্চ ২০টি আইটেমের একটি তালিকা আনার জন্য এই মেথডটিকে কল করে।
  • `create a DefaultPreloadManager অংশে তৈরি করা DefaultPreloadManager টিই হলো ` preloadManager
  • 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 তৈরি করুন। পুরোনো বিল্ডারটি পুনরায় ব্যবহার করার চেষ্টা করবেন না।