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

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

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

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

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

এটি করতে, 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 তৈরি করতে এটি ব্যবহার করুন। পুরনো বিল্ডার আবার ব্যবহার করার চেষ্টা করবেন না।