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

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

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

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

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

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

val initialMediaItems = pullMediaItemsFromService(/* count= */ 20)
for (index in 0 until initialMediaItems.size) {
    preloadManager.add(initialMediaItems.get(index), /* rankingData= */ index)
}
// items aren't actually loaded yet! need to call invalidate() after this

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

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

প্রিলোড ম্যানেজারে অগ্রাধিকারগুলি বাতিল করুন

প্রিলোড ম্যানেজারকে কন্টেন্ট প্রিলোড করা শুরু করতে ট্রিগার করতে, আপনাকে invalidate() কল করে প্রিলোড ম্যানেজারকে জানাতে হবে যে আইটেমগুলির অগ্রাধিকারগুলি পুরানো। নিম্নলিখিত পরিস্থিতিতে আপনার এটি করা উচিত:

  • যখন আপনি প্রিলোড ম্যানেজারে নতুন মিডিয়া আইটেম যোগ করেন, অথবা মিডিয়া আইটেমগুলি সরিয়ে ফেলেন। যদি আপনি একাধিক আইটেম যোগ করেন বা সরিয়ে ফেলেন, তাহলে আপনার সবগুলো যোগ করা উচিত, তারপর invalidate() কল করুন।
  • যখন ব্যবহারকারী এক মিডিয়া আইটেম থেকে অন্য মিডিয়া আইটেমে স্যুইচ করে। এই ক্ষেত্রে, Fetch and play content তে বর্ণিত invalidate() কল করার আগে আপনার বর্তমান প্লেয়িং ইনডেক্স আপডেট করা উচিত।

যখন আপনি প্রিলোড ম্যানেজারটি বাতিল করেন, তখন এটি আপনার তৈরি করা TargetPreloadStatusControl কল করে প্রতিটি আইটেম থেকে কতটা কন্টেন্ট লোড করা উচিত তা জানতে। তারপর এটি প্রতিটি আইটেমের জন্য কন্টেন্ট উচ্চ থেকে নিম্ন পর্যন্ত তাদের অগ্রাধিকারের ক্রম অনুসারে লোড করে।

preloadManager.invalidate()

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

  • invalidate() কল করলে প্রিলোড ম্যানেজার প্রতিটি মিডিয়া আইটেমের অগ্রাধিকার পুনর্মূল্যায়ন করতে বাধ্য হয় যা সে জানে। এই কারণে, যদি আপনি প্রিলোড ম্যানেজারে অনেক পরিবর্তন করেন, তাহলে invalidate() কল করার আগে আপনার পরিবর্তনগুলি সম্পন্ন করা উচিত।

মিডিয়া আনুন এবং চালান

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

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

// When the media item is displaying at the center of the screen
player.play()
preloadManager.setCurrentPlayingIndex(currentIndex)

// Need to call invalidate() to update the priorities
preloadManager.invalidate()

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

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

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

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

preloadManager.remove(mediaItem)

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

প্রিলোড ম্যানেজারটি কাজ শেষ হলে ছেড়ে দিন।

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

preloadManager.release()

preloadManager.release()

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

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