সারিতে রাখা

Cast ফ্রেমওয়ার্ক কিউয়িং ক্লাস প্রদান করে যা MediaQueueItem ইনস্ট্যান্সের তালিকা তৈরি করতে সাহায্য করে। এটি MediaInfo ইনস্ট্যান্স থেকে তৈরি করা যায়, যেমন ভিডিও বা অডিও স্ট্রিম, যা রিসিভারে পরপর চালানো যায়। কন্টেন্ট আইটেমের এই সারি এডিট, নতুন করে সাজানো, আপডেট এবং আরও অনেক কিছু করা যাবে।

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

মিডিয়া কিউ আইটেম তৈরি ও লোড করা

Cast ফ্রেমওয়ার্কে মিডিয়া সারির আইটেমকে MediaQueueItem ইনস্ট্যান্স হিসেবে দেখানো হয়। আপনি মিডিয়া কিউ আইটেম তৈরি করার সময়, অ্যাডাপ্টিভ কন্টেন্ট সহ মিডিয়া প্লেয়ার লাইব্রেরি ব্যবহার করলে, আপনি প্রিলোড করার সময় সেট করতে পারবেন যাতে কিউতে থাকা আগের আইটেমটি শেষ হওয়ার আগেই প্লেয়ার মিডিয়া কিউ আইটেম বাফার করা শুরু করতে পারে। আইটেমের অটোপ্লে অ্যাট্রিবিউট 'সত্য' হিসেবে সেট করলে, রিসিভার সেটি অটোমেটিক চালাতে পারবে। যেমন, আপনি বিল্ডার প্যাটার্ন ব্যবহার করে এইভাবে মিডিয়া কিউ আইটেম তৈরি করতে পারেন:

Kotlin
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo)
    .setAutoplay(true)
    .setPreloadTime(20.0)
    .build()
Java
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo)
  .setAutoplay(true)
  .setPreloadTime(20)
  .build();

RemoteMediaClient-এর উপযুক্ত queueLoad পদ্ধতি ব্যবহার করে সারিতে মিডিয়া সারি আইটেমের অ্যারে লোড করুন।

মিডিয়া সারির স্ট্যাটাস আপডেট পান

রিসিভার কোনও মিডিয়া সারির আইটেম লোড করলে, এটি আইটেমটিকে একটি অনন্য আইডি অ্যাসাইন করে যা সেশনের সময়কাল (এবং সারির লাইফ) পর্যন্ত স্থায়ী হয়। আপনার অ্যাপ, বর্তমানে কোন আইটেম লোড করা হয়েছে (এটি নাও চলতে পারে), লোড হচ্ছে বা প্রিলোড করা হয়েছে, সেই অনুযায়ী সারির স্ট্যাটাস জানতে পারে। MediaStatus ক্লাস এই স্ট্যাটাস সংক্রান্ত তথ্য প্রদান করে:

  • getPreloadedItemId() method - পরবর্তী আইটেম প্রিলোড করা হয়ে থাকলে, প্রিলোড করা আইটেম আইডি রিটার্ন করে।
  • getLoadingItemId() method - রিসিভারে বর্তমানে লোড হচ্ছে (কিন্তু সারিতে অ্যাক্টিভ নেই) এমন আইটেমের আইটেম আইডি ফিরিয়ে দেয়।
  • getCurrentItemId() মেথড - মিডিয়া স্ট্যাটাস পরিবর্তন হওয়ার সময় সারিতে অ্যাক্টিভ থাকা আইটেমের (এটি হয়তো চলছে না) আইটেম আইডি দেখায়।
  • getQueueItems() (বাতিল করা হয়েছে, পরিবর্তে MediaQueue ব্যবহার করুন) পদ্ধতি - MediaQueueItem ইনস্ট্যান্সের তালিকা অপরিবর্তনীয় তালিকা হিসেবে দেখায়।

এছাড়াও, আপনার অ্যাপ MediaQueue ক্লাস ব্যবহার করে আইটেমের তালিকা পেতে পারে। ক্লাসটি হল মিডিয়া সারির একটি স্পার্স ডেটা মডেল। এটি সারিতে থাকা আইটেম আইডির তালিকা রাখে, যা রিসিভারের সাথে অটোমেটিক সিঙ্ক হয়। MediaQueue সব MediaQueueItem রাখে না কারণ কিউ খুব দীর্ঘ হলে এটি অনেক বেশি মেমরি নেবে। পরিবর্তে, এটি চাহিদা অনুযায়ী আইটেম নিয়ে আসে এবং সম্প্রতি অ্যাক্সেস করা আইটেমের একটি LruCache রাখে। মিডিয়া সারি অ্যাক্সেস করতে আপনি এইসব পদ্ধতি ব্যবহার করতে পারবেন:

  • getItemIds() method - ক্রম অনুযায়ী সব আইটেম আইডির তালিকা দেখায়।
  • getItemAtIndex() method - প্রদত্ত ইন্ডেক্সে ক্যাশে করা আইটেম রিটার্ন করে। আইটেমটি ক্যাশে করা না থাকলে, MediaQueue null রিটার্ন করবে এবং আইটেমটি আনার জন্য শিডিউল করবে। আইটেমটি ফেচ করা হলে, MediaQueue.Callback#itemsUpdatedAtIndexes() কল করা হবে এবং একই আইডি দিয়ে আবার getItemAtIndex() কল করলে আইটেমটি ফেরত দেওয়া হবে।
  • ব্যবহারকারী যখন সারির UI স্ক্রল করে উপরে বা নিচে যান, তখন fetchMoteItemsRelativeToIndex() ব্যবহার করা হয়, এবং আপনার অ্যাপ ক্লাউড থেকে আরও আইটেম আনতে চায়।

আপনার অ্যাপকে সারির স্ট্যাটাস এবং সারিতে থাকা আইটেম সম্পর্কে জানাতে অন্যান্য মিডিয়া স্ট্যাটাস পদ্ধতির সাথে এই পদ্ধতিগুলি ব্যবহার করুন। রিসিভার থেকে মিডিয়া স্ট্যাটাস আপডেট ছাড়াও, আপনার অ্যাপ RemoteMediaClient.Callback এবং MediaQueue.Callback প্রয়োগ করে সারিতে হওয়া পরিবর্তন শুনতে পারে।

এছাড়াও, Cast SDK, সারিবদ্ধ করার জন্য UI তৈরি করতে দুটি ইউটিলিটি ক্লাস প্রদান করে।

যেমন, MediaQueueRecyclerViewAdapter ব্যবহার করে RecyclerView তৈরি করতে:

Kotlin
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
}
Java
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 অ্যালগরিদম পরিবর্তন করা), সারি থেকে আইটেম সরাতে এবং সারিতে আইটেমগুলি আবার সাজাতে সাহায্য করে।