सूची बनाना

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

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

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

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

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

साथ ही, Cast SDK टूल, सूची बनाने के लिए यूज़र इंटरफ़ेस (यूआई) बनाने के लिए दो यूटिलिटी क्लास उपलब्ध कराता है.

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