সারিতে রাখা

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

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

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

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

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() method - মিডিয়া স্ট্যাটাস পরিবর্তন হওয়ার সময় সারিতে অ্যাক্টিভ থাকা আইটেমের (এটি হয়তো চলছে না) আইটেম আইডি দেখায়।
  • getQueueItems() (সচল নয়, এর পরিবর্তে MediaQueue ব্যবহার করুন) পদ্ধতি - MediaQueueItem ইনস্ট্যান্সের তালিকা অপরিবর্তনযোগ্য তালিকা হিসেবে ফেরত দেয়।

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

  • getItemIds() method - Returns the list of all item IDs in order.
  • getItemAtIndex() method - Returns the cached item at a given index. আইটেমটি ক্যাশে করা না থাকলে, 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 অ্যালগরিদম পরিবর্তন করতে), সারি থেকে আইটেম সরাতে এবং সারিতে থাকা আইটেমগুলির ক্রম পরিবর্তন করতে দেয়।