सूची बनाना

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