কাস্ট ফ্রেমওয়ার্কটি কিউয়িং ক্লাস সরবরাহ করে যা MediaQueueItem ইনস্ট্যান্সের তালিকা তৈরি করতে সহায়তা করে। এই তালিকাগুলো ভিডিও বা অডিও স্ট্রিমের মতো MediaInfo ইনস্ট্যান্স থেকে তৈরি করা যায় এবং রিসিভারে ক্রমানুসারে প্লে করা যায়। কন্টেন্ট আইটেমের এই কিউটি সম্পাদনা, পুনর্বিন্যাস, আপডেট ইত্যাদি করা যেতে পারে।
রিসিভার SDK কিউটি রক্ষণাবেক্ষণ করে এবং কিউয়ের অপারেশনগুলিতে সাড়া দেয়, যতক্ষণ পর্যন্ত কিউটিতে বর্তমানে সক্রিয় (চলমান বা বিরতি দেওয়া) অন্তত একটি আইটেম থাকে। প্রেরকরা সেশনে যোগ দিতে এবং কিউতে আইটেম যোগ করতে পারে। রিসিভার কিউয়ের আইটেমগুলির জন্য একটি সেশন ততক্ষণ পর্যন্ত বজায় রাখে যতক্ষণ না শেষ আইটেমটির প্লেব্যাক সম্পূর্ণ হয়, অথবা প্রেরক প্লেব্যাক বন্ধ করে সেশনটি শেষ করে দেয়, অথবা যতক্ষণ না কোনো প্রেরক রিসিভারে একটি নতুন কিউ লোড করে। রিসিভার ডিফল্টরূপে শেষ হয়ে যাওয়া কিউ সম্পর্কে কোনো তথ্য সংরক্ষণ করে না। কিউয়ের শেষ আইটেমটি শেষ হয়ে গেলে, মিডিয়া সেশনটি শেষ হয়ে যায় এবং কিউটি অদৃশ্য হয়ে যায়।
মিডিয়া কিউ আইটেম তৈরি এবং লোড করুন
Cast ফ্রেমওয়ার্কে একটি মিডিয়া কিউ আইটেমকে একটি MediaQueueItem ইনস্ট্যান্স হিসেবে উপস্থাপন করা হয়। যখন আপনি একটি মিডিয়া কিউ আইটেম তৈরি করেন, এবং যদি আপনি অ্যাডাপ্টিভ কন্টেন্টের সাথে মিডিয়া প্লেয়ার লাইব্রেরি ব্যবহার করেন, তাহলে আপনি প্রিলোড টাইম সেট করতে পারেন, যাতে কিউ-তে থাকা এর আগের আইটেমটি প্লে হওয়া শেষ হওয়ার আগেই প্লেয়ারটি এই আইটেমটি বাফার করা শুরু করতে পারে। আইটেমটির autoplay অ্যাট্রিবিউটকে true সেট করলে রিসিভার এটিকে স্বয়ংক্রিয়ভাবে প্লে করতে পারে। উদাহরণস্বরূপ, আপনি নিম্নলিখিতভাবে আপনার মিডিয়া কিউ আইটেমটি তৈরি করতে একটি বিল্ডার প্যাটার্ন ব্যবহার করতে পারেন:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
RemoteMediaClient এর উপযুক্ত queueLoad মেথড ব্যবহার করে মিডিয়া কিউ আইটেমগুলির একটি অ্যারে কিউতে লোড করুন।
মিডিয়া কিউ-এর স্ট্যাটাস আপডেট গ্রহণ করুন
যখন রিসিভার একটি মিডিয়া কিউ আইটেম লোড করে, তখন এটি আইটেমটিকে একটি অনন্য আইডি প্রদান করে যা সেশনের সময়কাল (এবং কিউ-এর জীবনকাল) পর্যন্ত স্থায়ী থাকে। আপনার অ্যাপ কিউ-এর অবস্থা জানতে পারে, যেমন কোন আইটেমটি বর্তমানে লোড হয়েছে (হয়তো প্লে হচ্ছে না), লোড হচ্ছে, বা প্রি-লোড হয়েছে। MediaStatus ক্লাসটি এই অবস্থার তথ্য প্রদান করে:
-
getPreloadedItemId()মেথড - যদি পরবর্তী আইটেমটি আগে থেকে লোড করা থাকে, তাহলে সেই আইটেমের আইডি রিটার্ন করে। -
getLoadingItemId()মেথড - রিসিভারে বর্তমানে লোড হচ্ছে (কিন্তু কিউতে সক্রিয় নয়) এমন আইটেমের আইডি রিটার্ন করে। -
getCurrentItemId()মেথড - মিডিয়ার স্ট্যাটাস পরিবর্তনের সময় কিউ-তে সক্রিয় থাকা আইটেমটির (সেটি তখন প্লে নাও হতে পারে) আইটেম আইডি রিটার্ন করে। -
getQueueItems()( অপ্রচলিত, পরিবর্তেMediaQueueব্যবহার করুন ) মেথড -MediaQueueItemইনস্ট্যান্সগুলোর একটি অপরিবর্তনীয় তালিকা হিসেবে ফেরত দেয়।
আপনার অ্যাপ MediaQueue ক্লাস ব্যবহার করেও আইটেমগুলোর তালিকা পেতে পারে। এই ক্লাসটি মিডিয়া কিউ-এর একটি স্পার্স ডেটা মডেল। এটি কিউ-তে আইটেম আইডিগুলোর তালিকা রাখে, যা রিসিভারের সাথে স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজ হয়। MediaQueue সমস্ত MediaQueueItem রাখে না, কারণ কিউ খুব দীর্ঘ হলে এটি অনেক বেশি মেমরি দখল করবে। এর পরিবর্তে, এটি চাহিদা অনুযায়ী আইটেমগুলো ফেচ করে এবং সম্প্রতি অ্যাক্সেস করা আইটেমগুলোর একটি LruCache রাখে। মিডিয়া কিউ অ্যাক্সেস করতে আপনি এই মেথডগুলো ব্যবহার করতে পারেন:
-
getItemIds()মেথড - সমস্ত আইটেম আইডি-র তালিকা ক্রমানুসারে ফেরত দেয়। -
getItemAtIndex()মেথড - একটি নির্দিষ্ট ইনডেক্সে থাকা ক্যাশ করা আইটেমটি ফেরত দেয়। যদি আইটেমটি ক্যাশ করা না থাকে, তাহলেMediaQueuenullরিটার্ন করবে এবং আইটেমটি ফেচ করার জন্য শিডিউল করবে। যখন আইটেমটি ফেচ করা হবে, তখনMediaQueue.Callback#itemsUpdatedAtIndexes()কল করা হবে, এবং একই ID দিয়ে আবারgetItemAtIndex()কল করলে আইটেমটি ফেরত আসবে। - যখন ব্যবহারকারী কিউ UI-কে উপরে বা নীচে স্ক্রল করেন এবং আপনার অ্যাপ ক্লাউড থেকে আরও আইটেম আনতে চায়, তখন
fetchMoteItemsRelativeToIndex()ব্যবহৃত হয়।
কিউ-এর অবস্থা এবং কিউ-তে থাকা আইটেমগুলো সম্পর্কে আপনার অ্যাপকে জানাতে, এই পদ্ধতিগুলো অন্যান্য মিডিয়া স্ট্যাটাস পদ্ধতিগুলোর সাথে একত্রে ব্যবহার করুন। রিসিভার থেকে মিডিয়া স্ট্যাটাস আপডেট পাওয়ার পাশাপাশি, আপনার অ্যাপ RemoteMediaClient.Callback এবং MediaQueue.Callback ইমপ্লিমেন্ট করার মাধ্যমে কিউ-এর পরিবর্তনগুলো শুনতে পারে।
এছাড়াও, কাস্ট এসডিকে কিউয়িংয়ের জন্য ইউআই তৈরি করতে দুটি ইউটিলিটি ক্লাস প্রদান করে।
-
RecyclerViewএর ডেটা ব্যাক করার জন্যMediaQueueRecyclerViewAdapter। -
ListAdapterএর ডেটা ব্যাকএন্ড করার জন্যMediaQueueListAdapter।
উদাহরণস্বরূপ, MediaQueueRecyclerViewAdapter ব্যবহার করে একটি RecyclerView তৈরি করতে:
class MyRecyclerViewAdapter(mediaQueue: MediaQueue?) : MediaQueueRecyclerViewAdapter<MyViewHolder?>(mediaQueue) { override fun onBindViewHolder(holder: MyViewHolder, position: Int) { val item = getItem(position) // Update the view using `item`. ... } } class MyViewHolder : RecyclerView.ViewHolder { // Implement your own ViewHolder. ... } fun someMethod() { val adapter = MyRecyclerViewAdapter( mCastSession.remoteMediaClient.getMediaQueue()) val recyclerView = activity.findViewById(R.id.my_recycler_view_id) as RecyclerView recyclerView.adapter = adapter }
public class MyRecyclerViewAdapter extends MediaQueueRecyclerViewAdapter<MyViewHolder> { public MyRecyclerViewAdapter(MediaQueue mediaQueue) { super(mediaQueue); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { MediaQueueItem item = getItem(position); // Update the view using `item`. ... } } public class MyViewHolder implements RecyclerView.ViewHolder { // Implement your own ViewHolder. ... } public void someMethod() { RecyclerView.Adapter adapter = new MyRecyclerViewAdapter( mCastSession.getRemoteMediaClient().getMediaQueue()); RecyclerView recyclerView = (RecyclerView) getActivity().findViewById(R.id.my_recycler_view_id); recyclerView.setAdapter(adapter); }
কিউ সম্পাদনা করুন
কিউ-তে থাকা আইটেমগুলোর উপর কাজ করার জন্য, RemoteMediaClient ক্লাসের কিউ মেথডগুলো ব্যবহার করুন। এগুলোর সাহায্যে আপনি একটি নতুন কিউ-তে আইটেমের অ্যারে লোড করতে, বিদ্যমান কিউ-তে আইটেম যোগ করতে, কিউ-তে থাকা আইটেমগুলোর প্রোপার্টি আপডেট করতে, কোনো আইটেমকে কিউ-এর মধ্যে সামনে বা পেছনে সরাতে, কিউ-টির নিজস্ব প্রোপার্টি সেট করতে (যেমন, পরবর্তী আইটেম নির্বাচনকারী repeatMode অ্যালগরিদম পরিবর্তন করা), কিউ থেকে আইটেম সরাতে এবং কিউ-তে থাকা আইটেমগুলোর ক্রম পরিবর্তন করতে পারবেন।