सूची बनाना

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

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

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

मीडिया सूची के आइटम को कास्ट फ़्रेमवर्क में, 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();

RemoteMediaClientqueueLoad वाले सही तरीके का इस्तेमाल करके, सूची में मीडिया सूची के आइटम का कलेक्शन लोड करें.

मीडिया सूची की स्थिति के अपडेट पाएं

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

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

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