Cast फ़्रेमवर्क, सूची बनाने वाली कक्षाएं उपलब्ध कराता है. इनकी मदद से, MediaQueueItem
इंस्टेंस की सूचियां बनाई जा सकती हैं. इन सूचियों को वीडियो या ऑडियो स्ट्रीम जैसे MediaInfo
इंस्टेंस से बनाया जा सकता है, ताकि उन्हें रिसीवर पर क्रम से चलाया जा सके. कॉन्टेंट आइटम की इस सूची में बदलाव किया जा सकता है, उसका क्रम बदला जा सकता है, उसे अपडेट किया जा सकता है वगैरह.
Receiver SDK, सूची को मैनेज करता है और सूची में होने वाले ऑपरेशन का जवाब देता है. ऐसा तब तक होता है, जब तक सूची में कम से कम एक आइटम चालू (चल रहा है या रोका गया है) है. ईमेल भेजने वाले लोग, सेशन में शामिल हो सकते हैं और सूची में आइटम जोड़ सकते हैं. रीसीवर, सूची में मौजूद आइटम के लिए तब तक सेशन बनाए रखता है, जब तक आखिरी आइटम का वीडियो चलना बंद नहीं हो जाता या जब तक भेजने वाला व्यक्ति, वीडियो चलाना बंद नहीं कर देता और सेशन को खत्म नहीं कर देता. इसके अलावा, रीसीवर तब तक सेशन बनाए रखता है, जब तक भेजने वाला व्यक्ति रीसीवर पर नई सूची लोड नहीं कर देता. डिफ़ॉल्ट रूप से, रिसीवर के पास बंद की गई कतार की कोई जानकारी नहीं होती. सूची में मौजूद आखिरी आइटम के खत्म होने के बाद, मीडिया सेशन खत्म हो जाता है और सूची गायब हो जाती है.
मीडिया सूची के आइटम बनाना और लोड करना
मीडिया सूची के आइटम को Cast फ़्रेमवर्क में,
MediaQueueItem
के उदाहरण के तौर पर दिखाया जाता है.
मीडिया सूची का आइटम बनाते समय, अगर अडैप्टिव कॉन्टेंट के साथ मीडिया प्लेयर लाइब्रेरी का इस्तेमाल किया जा रहा है, तो मीडिया सूची के आइटम को पहले से लोड होने का समय सेट किया जा सकता है. इससे, सूची में मौजूद आइटम के खत्म होने से पहले, प्लेयर उस आइटम को बफ़र करना शुरू कर सकता है. आइटम के ऑटोप्ले एट्रिब्यूट को 'सही है' पर सेट करने से, रिसीवर उसे अपने-आप चला सकता है. उदाहरण के लिए, मीडिया सूची का आइटम बनाने के लिए, बिल्डर पैटर्न का इस्तेमाल इस तरह किया जा सकता है:
val queueItem: MediaQueueItem = MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20.0) .build()
MediaQueueItem queueItem = new MediaQueueItem.Builder(mediaInfo) .setAutoplay(true) .setPreloadTime(20) .build();
मीडिया सूची की स्थिति के बारे में अपडेट पाना
जब रिसीवर, मीडिया सूची का कोई आइटम लोड करता है, तो वह आइटम को एक यूनीक आईडी असाइन करता है. यह आईडी, सेशन के दौरान और सूची के मौजूद रहने तक बना रहता है. आपका ऐप्लिकेशन, सूची की स्थिति के बारे में जान सकता है. जैसे, फ़िलहाल कौनसा आइटम लोड किया गया है (हो सकता है कि वह चल न रहा हो), लोड हो रहा है या पहले से लोड किया गया है. 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
के डेटा का बैक अप लेने के लिएMediaQueueListAdapter
,ListAdapter
के डेटा का बैक अप लेने के लिए.
उदाहरण के लिए, 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 }
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
एल्गोरिदम को बदलना), सूची से आइटम हटाए जा सकते हैं, और सूची में आइटम का क्रम बदला जा सकता है.