सूची बनाना

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() तरीका - अगर अगले आइटम को पहले से लोड किया गया है, तो पहले से लोड किए गए आइटम का आईडी दिखाता है.
  • getLoadingItemId() method - Returns the item ID of the item that is currently loading (but isn't active in the queue) on the receiver.
  • getCurrentItemId() method - Returns the item ID of the item that that was active in the queue (it might not be playing) at the time the media status change happened.
  • getQueueItems() (अब इस्तेमाल नहीं किया जाता, इसके बजाय MediaQueue का इस्तेमाल करें) तरीका - यह MediaQueueItem इंस्टेंस की सूची को ऐसी सूची के तौर पर दिखाता है जिसे बदला नहीं जा सकता.

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

  • getItemIds() तरीका - इससे सभी आइटम आईडी की सूची क्रम से मिलती है.
  • getItemAtIndex() तरीका - यह किसी दिए गए इंडेक्स पर, कैश मेमोरी में सेव किया गया आइटम दिखाता है. अगर आइटम कैश मेमोरी में सेव नहीं है, तो 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 एल्गोरिदम को बदला जा सकता है. इसके अलावा, कतार से आइटम हटाए जा सकते हैं और कतार में मौजूद आइटम का क्रम बदला जा सकता है.