প্রিলোড ম্যানেজার ব্যবহারকারীদের কাছে দ্রুত কন্টেন্ট পৌঁছে দিয়ে এবং এক আইটেম থেকে অন্য আইটেমে যাওয়ার সময় অপেক্ষার সময় কমিয়ে তাদের আরও ভালো অভিজ্ঞতা দিতে সাহায্য করে। এটি আপনাকে প্রতিটি আইটেমের জন্য প্রিলোডিংয়ের সময়কাল এবং ক্রম নির্ধারণ করার সুযোগও দেয়।
সোশ্যাল মিডিয়ায় একটি সাধারণ দৃশ্য হলো, কোনো অ্যাপ ব্যবহারকারীকে বিভিন্ন মিডিয়া পছন্দের একটি তালিকা বা ক্যারোসেল দেখায়। উদাহরণস্বরূপ, একটি অ্যাপ ছোট ছোট ভিডিওর একটি ক্যারোসেল দেখাতে পারে। একটি ভিডিও শেষ হলে, অ্যাপটি পরেরটিতে চলে যায়। এবং ব্যবহারকারী যদি তার দেখা ভিডিওটি পছন্দ না করেন, তবে তিনি সোয়াইপ করে পরের বা আগের ভিডিওতে চলে যেতে পারেন।
আপনি যদি ভিডিও কন্টেন্ট আগে থেকে লোড না করেন, তবে এটি ব্যবহারকারীর জন্য একটি হতাশাজনক অভিজ্ঞতা হতে পারে। ব্যবহারকারী একটি মিডিয়া দেখা শেষ করার পর পরবর্তী মিডিয়া লোড হওয়ার জন্য অপেক্ষা করতে হয়।
অন্যদিকে, যদি আপনি অতিরিক্ত পরিমাণে কন্টেন্ট প্রি-লোড করেন, তাহলে এমন কন্টেন্ট লোড করতে শক্তি এবং নেটওয়ার্ক ব্যান্ডউইথ অপচয় হয় যা ব্যবহারকারী হয়তো কখনোই চালাবেন না।
DefaultPreloadManager আপনার অ্যাপকে এই বিষয়গুলোর মধ্যে ভারসাম্য বজায় রাখতে সাহায্য করে। প্রিলোড ম্যানেজার আপনার অ্যাপের সাথে মিলে প্রতিটি মিডিয়া আইটেমের গুরুত্ব নির্ধারণ করে এবং সেই অনুযায়ী সঠিক পরিমাণ আইটেম আগে থেকেই লোড করে রাখে।
শ্রম বিভাজন
আপনি যদি DefaultPreloadManager ব্যবহার করেন, তাহলে কিছু কাজ আপনার কোড দ্বারা এবং কিছু কাজ প্রিলোড ম্যানেজার দ্বারা সম্পন্ন হয়।
আপনার অ্যাপকে নিম্নলিখিত কাজগুলো করতে হবে:
- প্রিলোড ম্যানেজার তৈরি করতে আপনি যে
DefaultPreloadManager.Builderঅবজেক্টটি ব্যবহার করেন, সেটি ব্যবহার করেই অ্যাপেরExoPlayerঅবজেক্টগুলো তৈরি করুন। একটিExoPlayerতৈরি করতেDefaultPreloadManager.Builder.buildExoPlayer()কল করুন। - প্রিলোড ম্যানেজারকে প্রতিটি মিডিয়া আইটেম সম্পর্কে জানান যা এটি ট্র্যাক করবে । এটি ক্যারোসেলের সমস্ত কন্টেন্ট নাও হতে পারে; এর পরিবর্তে, আপনি কেবল প্লে করার জন্য প্রথম কয়েকটি আইটেম সম্পর্কে জানাতে পারেন। ব্যবহারকারী যখন ক্যারোসেলে নেভিগেট করবে, তখন আপনি প্রিলোড ম্যানেজারের পুল থেকে মিডিয়া আইটেম যোগ এবং অপসারণ করতে পারবেন।
- ক্যারোসেলের কন্টেন্ট পরিবর্তিত হলে, অথবা ব্যবহারকারী যে আইটেমটি প্লে করছেন তা পরিবর্তন করলে, প্রিলোড ম্যানেজারে থাকা প্রায়োরিটিগুলো বাতিল করুন । এটি প্রিলোড ম্যানেজারকে প্রতিটি মিডিয়া আইটেমের প্রায়োরিটি পুনরায় নির্ধারণ করতে এবং প্রয়োজনে কন্টেন্ট লোড করতে নির্দেশ দেয়। আপনি প্রথমবার মিডিয়া আইটেম যোগ করার পর, এবং ব্যবহারকারী যখন একটি আইটেম থেকে অন্যটিতে যান, অথবা যখন আপনি ক্যারোসেলে আইটেম যোগ বা অপসারণ করেন, তখন প্রিলোড ম্যানেজারটি বাতিল করবেন।
- প্রিলোড ম্যানেজারের জিজ্ঞাসার উত্তর দিন এবং প্রতিটি আইটেমের জন্য কী পরিমাণ কন্টেন্ট প্রিলোড করতে হবে তা ম্যানেজারকে জানান।
ব্যবহারকারী যখন কোনো আইটেম চালানো শুরু করেন, তখন প্রিলোড ম্যানেজার থেকে মিডিয়া নিয়ে আসুন । প্রিলোড ম্যানেজার আপনার অ্যাপকে সেই কন্টেন্টের জন্য একটি
MediaSourceপ্রদান করে।আপনার কাজ শেষ হলে প্রিলোড ম্যানেজারটি রিলিজ করে দিন , এতে এর রিসোর্সগুলো মুক্ত হয়ে যাবে।
প্রিলোড ম্যানেজার নিম্নলিখিত কাজগুলো করে:
- এটি আপনার অ্যাপে যোগ করা সমস্ত মিডিয়া আইটেমের হিসাব রাখে।
- প্রতিবার এর অগ্রাধিকারগুলো বাতিল হয়ে গেলে, এটি আপনার অ্যাপ দ্বারা বাস্তবায়িত একটি
TargetPreloadStatusControlকল করে আপনার অ্যাপকে জিজ্ঞাসা করে। প্রতিটি মিডিয়া আইটেম কী পরিমাণে লোড করতে হবে তা জানার জন্যই এটি এই কলটি করে। - অ্যাপে তথ্য চাওয়ার পর, এটি প্রতিটি মিডিয়া আইটেমের যথাযথ পরিমাণ প্রি-লোড করে। প্রি-লোড ম্যানেজার আইটেমগুলো কোন ক্রমে লোড হবে তা নির্ধারণ করে। এটি ব্যবহারকারীর চালানো আইটেমের সবচেয়ে কাছের আইটেমগুলোকে অগ্রাধিকার দেয়।
- অ্যাপটি যখন কন্টেন্টের জন্য অনুরোধ করে, তখন প্রিলোড ম্যানেজার আগে থেকে লোড করা কন্টেন্টসহ একটি
MediaSourceপ্রদান করে।
প্রিলোড ম্যানেজার ওয়ার্কফ্লো
এই বিভাগে প্রিলোড ম্যানেজার ব্যবহারকারী একটি অ্যাপের সাধারণ কার্যপ্রবাহ বর্ণনা করা হয়েছে। এই উদাহরণে, আমরা ধরে নিচ্ছি যে অ্যাপটি ছোট ছোট ভিডিওর একটি ক্যারোসেল প্রদর্শন করে। নির্বাচিত ভিডিওটি স্বয়ংক্রিয়ভাবে চলতে শুরু করে, কিন্তু ব্যবহারকারী ক্যারোসেলটি যেকোনো দিকে স্ক্রল করতে পারেন, যা চলতে থাকা ভিডিওটি থামিয়ে দেয় এবং স্ক্রল করে অন্য ভিডিওটি চালু করে।
এই সমস্ত ধাপগুলো পরবর্তী পৃষ্ঠাগুলোতে বিস্তারিতভাবে আলোচনা করা হয়েছে।
- অ্যাপটি একটি টার্গেট প্রিলোড স্ট্যাটাস কন্ট্রোল তৈরি করে। প্রিলোড ম্যানেজার প্রতিটি মিডিয়া আইটেম কী পরিমাণে লোড করতে হবে তা জানার জন্য এই কন্ট্রোলটিকে কোয়েরি করে।
- অ্যাপটি একটি
DefaultPreloadManager.Builderতৈরি করে এবং টার্গেট প্রিলোড স্ট্যাটাস কন্ট্রোলটি পাস করে। এরপর অ্যাপটি বিল্ডারটি ব্যবহার করে প্রিলোড ম্যানেজারটি তৈরি করে । - অ্যাপটি প্রিলোড ম্যানেজারে মিডিয়া আইটেম যুক্ত করে । অ্যাপটি প্রতিটি আইটেমের জন্য একটি সূচক প্রদান করে, যা ক্যারোসেলে আইটেমটির অবস্থান নির্দিষ্ট করে।
- সমস্ত মিডিয়া যুক্ত হয়ে গেলে, অ্যাপটি
invalidate()ফাংশন কল করে প্রিলোড ম্যানেজারকে প্রতিটি আইটেমের জন্য অগ্রাধিকার নির্ধারণ করতে এবং তারপর সেগুলোকে প্রিলোড করতে নির্দেশ দেয়। - প্রতিটি মিডিয়া আইটেমের জন্য, প্রিলোড ম্যানেজার টার্গেট প্রিলোড কন্ট্রোলকে কল করে জিজ্ঞাসা করে যে আইটেমটির কতটুকু লোড করা উচিত। টার্গেট প্রিলোড কন্ট্রোল একটি নির্দিষ্ট সময়কালের কন্টেন্ট লোড করতে, শুধু আইটেমটির মেটাডেটা ফেচ করতে, অথবা এই মুহূর্তে আইটেমটির কোনো অংশই ফেচ না করতে বলতে পারে। প্রিলোড ম্যানেজার এই তথ্য পাওয়ার পর, মিডিয়া কন্টেন্ট লোড করা শুরু করে।
- যখন ব্যবহারকারী কোনো কন্টেন্ট চালানো শুরু করেন, তখন অ্যাপটি সেই মিডিয়া আইটেমটির জন্য একটি
MediaSourceঅনুরোধ করতে প্রিলোড ম্যানেজারকে কল করে। কোন মিডিয়া আইটেমটি চালানো হচ্ছে, তা প্রিলোড ম্যানেজারকে জানানোর জন্য অ্যাপটিsetCurrentPlayingIndex()কল করে। - যদি ব্যবহারকারী অন্য কোনো মিডিয়া আইটেমে যান, তাহলে অ্যাপটি প্রিলোড ম্যানেজারের কাছে সেই আইটেমটির জন্য অনুরোধ করে এবং বর্তমান প্লেয়িং ইন্ডেক্সও আপডেট করে। এরপর, বর্তমানে যা প্লে হচ্ছে তার উপর ভিত্তি করে প্রিলোড ম্যানেজারকে তার অগ্রাধিকার আপডেট করার নির্দেশ দিতে এটি আবার
invalidate()ফাংশনটি কল করে। - অ্যাপটি যদি ক্যারোসেলে কোনো মিডিয়া আইটেম যোগ বা অপসারণ করে, তবে এটি সেই আইটেমগুলোকে প্রিলোড ম্যানেজারেও যোগ বা অপসারণ করে এবং এই কাজটি সম্পন্ন হলে
invalidate()কল করে। - যখনই প্রিলোড ম্যানেজারের অগ্রাধিকারগুলো বাতিল হয়ে যায়, তখন প্রতিটি আইটেম কী পরিমাণে লোড করতে হবে তা জানার জন্য এটি টার্গেট প্রিলোড কন্ট্রোলকে পুনরায় কল করে।
- অ্যাপটি যখন ক্যারোসেলটি বন্ধ করে, তখন এটি তার রিসোর্স মুক্ত করার জন্য প্রিলোড ম্যানেজারকে রিলিজ করে দেয় ।