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

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

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

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

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

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

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() হল অ্যাপের লজিক যা প্লে করার জন্য সামগ্রীর তালিকা আনতে পারে৷ কোডটি 20টি আইটেমের তালিকা আনতে সেই পদ্ধতিটিকে কল করে।
  • preloadManager হল DefaultPreloadManager তৈরি করুন একটি DefaultPreloadManager তৈরি করুন । কোডটি ম্যানেজারের add() পদ্ধতিকে ক্যারোজেলে প্রতিটি আইটেম যোগ করার জন্য কল করে।
  • rankingData হল একটি মান যা প্রিলোড ম্যানেজার প্রতিটি মিডিয়া আইটেমের অগ্রাধিকার নির্ধারণ করতে ব্যবহার করে। DefaultPreloadManager জন্য, rankingData হল একটি পূর্ণসংখ্যা যা ক্যারোজেলে আইটেমের অবস্থানকে প্রতিনিধিত্ব করে। প্রিলোড ম্যানেজার বর্তমানে যে আইটেমটি চলছে তার থেকে প্রতিটি আইটেম কত দূরে তা দ্বারা অগ্রাধিকার নির্ধারণ করে।

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

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

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

আপনি যখন প্রিলোড ম্যানেজারটিকে বাতিল করেন, তখন এটি প্রতিটি আইটেম থেকে কতগুলি সামগ্রী লোড করা উচিত তা খুঁজে বের করতে আপনার তৈরি করা 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)
}
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()

কোড সম্পর্কে মূল পয়েন্ট

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