প্রিলোড ম্যানেজার ধারণা

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

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

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

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

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

শ্রম বিভাজন

যদি আপনি DefaultPreloadManager ব্যবহার করেন, তাহলে কিছু কাজ আপনার কোড দ্বারা সম্পন্ন হবে, এবং কিছু কাজ প্রিলোড ম্যানেজার দ্বারা।

আপনার অ্যাপটিকে নিম্নলিখিত কাজগুলি করতে হবে:

  • প্রিলোড ম্যানেজার তৈরি করতে আপনি যে DefaultPreloadManager.Builder অবজেক্ট ব্যবহার করেন, সেই একই অবজেক্ট ব্যবহার করে অ্যাপের ExoPlayer অবজেক্ট তৈরি করুন। ExoPlayer তৈরি করতে DefaultPreloadManager.Builder.buildExoPlayer() কল করুন।
  • প্রিলোড ম্যানেজারকে প্রতিটি মিডিয়া আইটেম সম্পর্কে বলুন যা ট্র্যাক করা উচিত । এটি ক্যারোজেলের সমস্ত সামগ্রী নাও হতে পারে; পরিবর্তে, আপনি কেবল প্রথম কয়েকটি আইটেম চালানোর কথা বলতে পারেন। ব্যবহারকারী যখন ক্যারোজেলের মধ্য দিয়ে নেভিগেট করেন, তখন আপনি প্রিলোড ম্যানেজারের পুল থেকে মিডিয়া আইটেমগুলি যোগ করতে এবং সরাতে পারেন।
  • ক্যারোজেলের কন্টেন্ট পরিবর্তন হলে, অথবা ব্যবহারকারী কোন আইটেমটি চালাচ্ছেন তা পরিবর্তন করলে প্রিলোড ম্যানেজারের অগ্রাধিকারগুলি বাতিল করুন । এটি প্রিলোড ম্যানেজারকে প্রতিটি মিডিয়া আইটেমের অগ্রাধিকার পুনরায় নির্ধারণ করতে এবং প্রয়োজনে কন্টেন্ট লোড করতে বলে। আপনি প্রথমে মিডিয়া আইটেম যোগ করার পরে এবং ব্যবহারকারী যখন এক আইটেম থেকে অন্য আইটেমে চলে যান, অথবা যখন আপনি ক্যারোজেলে আইটেম যোগ করেন বা অপসারণ করেন তখন আপনি প্রিলোড ম্যানেজারটি বাতিল করবেন।
  • প্রিলোড ম্যানেজারের প্রশ্নের উত্তর দিন , প্রতিটি আইটেমের জন্য কতটি কন্টেন্ট প্রিলোড করতে হবে তা ম্যানেজারকে বলুন।
  • ব্যবহারকারী যখন কোনও আইটেম চালাতে শুরু করেন তখন প্রিলোড ম্যানেজার থেকে মিডিয়া আনুন । প্রিলোড ম্যানেজার আপনার অ্যাপটিকে সেই সামগ্রীর জন্য একটি MediaSource দেয়।

  • প্রিলোড ম্যানেজারের কাজ শেষ হলে, এর রিসোর্সগুলো খালি করে এটি ছেড়ে দিন

প্রিলোড ম্যানেজার নিম্নলিখিত কাজগুলি করে:

  • এটি আপনার অ্যাপে যোগ করা সমস্ত মিডিয়া আইটেমের ট্র্যাক রাখে।
  • প্রতিবার যখন এর অগ্রাধিকার বাতিল করা হয়, তখন এটি আপনার অ্যাপ দ্বারা বাস্তবায়িত একটি TargetPreloadStatusControl কল করে আপনার অ্যাপকে জিজ্ঞাসা করে। প্রতিটি মিডিয়া আইটেমের কতটা লোড করতে হবে তা জানতে এটি কল করে।
  • অ্যাপটি জিজ্ঞাসা করার পর, এটি প্রতিটি মিডিয়া আইটেমের যথাযথ পরিমাণ প্রিলোড করে। প্রিলোড ম্যানেজার কোন ক্রমে আইটেমটি লোড করতে হবে তা নির্ধারণ করে। এটি ব্যবহারকারী যে আইটেমটি খেলছেন তার সবচেয়ে কাছাকাছি থাকা আইটেমগুলিকে অগ্রাধিকার দেয়।
  • যখন অ্যাপটি কন্টেন্টের অনুরোধ করে, তখন প্রিলোড ম্যানেজার একটি MediaSource ইতিমধ্যেই লোড করা যেকোনো কন্টেন্ট সরবরাহ করে।

প্রিলোড ম্যানেজার ওয়ার্কফ্লো

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

এই সমস্ত পদক্ষেপগুলি পরবর্তী পৃষ্ঠাগুলিতে বিস্তারিতভাবে আলোচনা করা হয়েছে।

  1. অ্যাপটি একটি টার্গেট প্রিলোড স্ট্যাটাস কন্ট্রোল তৈরি করে। প্রিলোড ম্যানেজার প্রতিটি মিডিয়া আইটেমের কতটা লোড করতে হবে তা জানতে এই কন্ট্রোলটি জিজ্ঞাসা করে।
  2. অ্যাপটি একটি DefaultPreloadManager.Builder তৈরি করে এবং টার্গেট প্রিলোড স্ট্যাটাস কন্ট্রোল পাস করে। এরপর অ্যাপটি প্রিলোড ম্যানেজার তৈরি করতে বিল্ডার ব্যবহার করে
  3. অ্যাপটি প্রিলোড ম্যানেজারে মিডিয়া আইটেম যোগ করে । অ্যাপটি প্রতিটি আইটেমের জন্য একটি সূচক প্রদান করে, যা ক্যারোজেলে আইটেমের অবস্থান নির্দিষ্ট করে।
  4. সমস্ত মিডিয়া যোগ করার পরে, অ্যাপটি invalidate() কল করে প্রিলোড ম্যানেজারকে প্রতিটি আইটেমের জন্য অগ্রাধিকার সেট করতে এবং তারপর সেগুলি প্রিলোড করতে বলে।
  5. প্রতিটি মিডিয়া আইটেমের জন্য, প্রিলোড ম্যানেজার টার্গেট প্রিলোড কন্ট্রোলকে কল করে জিজ্ঞাসা করে যে আইটেমটির কত অংশ লোড করা উচিত। টার্গেট প্রিলোড কন্ট্রোল বলতে পারে একটি নির্দিষ্ট সময়কালের কন্টেন্ট লোড করতে, কেবল আইটেমের মেটাডেটা আনতে, অথবা এই সময়ে সেই আইটেমের কোনওটি না আনতে। প্রিলোড ম্যানেজার এই তথ্য পাওয়ার পর, এটি মিডিয়া কন্টেন্ট লোড করা শুরু করে।
  6. যখন ব্যবহারকারী কন্টেন্ট প্লে করা শুরু করে, তখন অ্যাপটি প্রিলোড ম্যানেজারকে কল করে সেই মিডিয়া আইটেমের জন্য একটি MediaSource অনুরোধ করে। অ্যাপটি setCurrentPlayingIndex() কল করে প্রিলোড ম্যানেজারকে জানায় কোন মিডিয়া আইটেম প্লে করা হচ্ছে।
  7. যদি ব্যবহারকারী অন্য কোনও মিডিয়া আইটেমে চলে যায়, তাহলে অ্যাপটি প্রিলোড ম্যানেজারের কাছ থেকে সেই আইটেমটি অনুরোধ করে এবং বর্তমান প্লেয়িং ইনডেক্সও আপডেট করে। এরপর এটি আবার invalidate() কল করে প্রিলোড ম্যানেজারকে এখন কী প্লে হচ্ছে তার উপর ভিত্তি করে তার অগ্রাধিকার আপডেট করতে বলে।
  8. যদি অ্যাপটি ক্যারোজেলে মিডিয়া আইটেম যোগ করে বা সরিয়ে দেয়, তাহলে এটি প্রিলোড ম্যানেজারেও সেই আইটেমগুলি যোগ করে বা সরিয়ে দেয় এবং এটি করা হয়ে গেলে invalidate() কল করে।
  9. যখনই প্রিলোড ম্যানেজারের অগ্রাধিকার বাতিল করা হয়, তখন প্রতিটি আইটেমের কতটা লোড করতে হবে তা জানতে এটি আবার লক্ষ্য প্রিলোড নিয়ন্ত্রণকে কল করে।
  10. যখন অ্যাপটি ক্যারোজেল বন্ধ করে দেয়, তখন এটি তার রিসোর্স খালি করার জন্য প্রিলোড ম্যানেজারটি প্রকাশ করে