सूची बनाना

कास्ट फ़्रेमवर्क, सूची बनाने की क्लास की सुविधा देता है. इससे MediaQueueItem इंस्टेंस की सूचियां बनाई जा सकती हैं. इन इंस्टेंस को, वीडियो या ऑडियो स्ट्रीम जैसे MediaInfo इंस्टेंस से एक क्रम में, रिसीवर पर एक क्रम में चलाने के लिए बनाया जा सकता है. कॉन्टेंट आइटम की इस सूची में बदलाव किया जा सकता है, इसका क्रम बदला जा सकता है, और इसे अपडेट किया जा सकता है.

अगर सूची में कम से कम एक आइटम चालू है (चलाया जा रहा है या रोका गया है), तो रिसीवर का SDK टूल, सूची को बनाए रखता है और सूची में कार्रवाइयों का जवाब देता है. पैसे भेजने वाले लोग, सेशन में शामिल हो सकते हैं और सूची में आइटम जोड़ सकते हैं. कॉन्टेंट पाने वाला व्यक्ति सूची में मौजूद आइटम के लिए तब तक सेशन बनाए रखता है, जब तक आख़िरी आइटम प्लेबैक को पूरा नहीं कर लेता या भेजने वाले की ओर से प्लेबैक को रोका जाता है और सेशन को बंद कर दिया जाता है. इसके अलावा, वह तब तक जब तक कोई भेजने वाला व्यक्ति, रिसीवर पर नई सूची लोड नहीं कर देता, तब तक वह सेशन को चालू रखता है. पाने वाला डिफ़ॉल्ट रूप से, बंद की गई सूचियों के बारे में कोई भी जानकारी नहीं रखता है. सूची का आखिरी आइटम खत्म होने के बाद, मीडिया सेशन खत्म हो जाता है और सूची गायब हो जाती है.

मीडिया सूची आइटम बनाएं और लोड करें

मीडिया क्यू आइटम को Cast फ़्रेमवर्क में MediaQueueItem इंस्टेंस के तौर पर दिखाया जाता है. मीडिया सूची में मौजूद कोई आइटम बनाते समय, अगर ज़रूरत के हिसाब से कॉन्टेंट के साथ मीडिया प्लेयर लाइब्रेरी का इस्तेमाल किया जा रहा है, तो पहले से लोड किए जाने वाले समय को सेट किया जा सकता है. इससे प्लेयर, मीडिया सूची में मौजूद आइटम के चलने से पहले, उसे बफ़र कर पाएगा. आइटम के अपने-आप चलने वाले एट्रिब्यूट को 'सही है' पर सेट करने से, कॉन्टेंट पाने वाला उसे अपने-आप चला सकता है. उदाहरण के लिए, अपना मीडिया सूची आइटम बनाने के लिए, बिल्डर पैटर्न का इस्तेमाल इस तरह किया जा सकता है:

कोटलिन
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() तरीका - अगर अगला आइटम पहले से लोड किया गया है, तो यह पहले से लोड किए गए आइटम का आईडी दिखाता है.
  • getLoadingItemId() तरीका - यह विकल्प उस आइटम का आइटम आईडी दिखाता है जो फ़िलहाल लोड हो रहा है (लेकिन सूची में चालू नहीं है).
  • getCurrentItemId() तरीका - यह विकल्प उस आइटम का आइटम आईडी दिखाता है जो मीडिया की स्थिति बदलने के समय, सूची में था. ऐसा हो सकता है कि वह चल न रहा हो.
  • getQueueItems() (अब काम नहीं करता, इसके बजाय MediaQueue का इस्तेमाल करें) तरीका - MediaQueueItem इंस्टेंस की सूची को, ऐसी सूची के तौर पर दिखाता है जिसमें बदलाव नहीं किया जा सकता.

आपका ऐप्लिकेशन, MediaQueue क्लास का इस्तेमाल करके आइटम की सूची भी पा सकता है. क्लास, मीडिया सूची का खास डेटा मॉडल है. यह आइटम आईडी की सूची को सूची में रखता है जो कि पाने वाले के साथ अपने-आप सिंक हो जाते हैं. MediaQueue में सभी MediaQueueItem शामिल नहीं हैं, क्योंकि सूची में ज़्यादा स्पेस होने पर, इसमें बहुत ज़्यादा मेमोरी खर्च होगी. इसके बजाय, यह मांग पर आइटम फ़ेच करता है और हाल ही में ऐक्सेस किए गए LruCache आइटम को सेव रखता है. मीडिया सूची को ऐक्सेस करने के लिए, इन तरीकों का इस्तेमाल किया जा सकता है:

  • getItemIds() तरीका - यह विकल्प, सभी आइटम आईडी की सूची को दिखाता है.
  • getItemAtIndex() तरीका - यह विकल्प, किसी दिए गए इंडेक्स में, कैश मेमोरी में सेव किए गए आइटम को दिखाता है. अगर आइटम को कैश मेमोरी में सेव नहीं किया गया है, तो MediaQueue, null दिखाएगा. साथ ही, आइटम को फ़ेच करने के लिए शेड्यूल करेगा. आइटम फ़ेच हो जाने पर, MediaQueue.Callback#itemsUpdatedAtIndexes() को कॉल किया जाएगा. इस आईडी से getItemAtIndex() को फिर से कॉल करने पर, आइटम दिखेगा.
  • fetchMoteItemsRelativeToIndex() का इस्तेमाल तब किया जाता है, जब उपयोगकर्ता सूची के यूज़र इंटरफ़ेस (यूआई) को ऊपर या नीचे स्क्रोल करता है और आपका ऐप्लिकेशन, क्लाउड से ज़्यादा आइटम फ़ेच करना चाहता है.

अपने ऐप्लिकेशन को सूची की स्थिति और सूची में मौजूद आइटम के बारे में बताने के लिए, इन तरीकों को मीडिया के स्टेटस के दूसरे तरीकों के साथ इस्तेमाल करें. कॉन्टेंट पाने वाले से मीडिया की स्थिति से जुड़े अपडेट के अलावा, आपका ऐप्लिकेशन सूची में किए गए बदलावों को सुन सकता है. इसके लिए, RemoteMediaClient.Callback और MediaQueue.Callback को लागू करना होगा.

साथ ही, Cast SDK में सूची में रखने के लिए यूआई बनाने के लिए दो यूटिलिटी क्लास दी जाती हैं.

उदाहरण के लिए, 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
}
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 एल्गोरिदम बदलना), सूची से आइटम हटाना, और सूची में मौजूद आइटम का क्रम बदलना.