Cast फ़्रेमवर्क, सूची बनाने वाली क्लास उपलब्ध कराता है. इनकी मदद से, MediaQueueItem इंस्टेंस की सूचियां बनाई जा सकती हैं. ये सूचियां, MediaInfo इंस्टेंस से बनाई जा सकती हैं. जैसे, वीडियो या ऑडियो स्ट्रीम. इन्हें रिसीवर पर क्रम से चलाया जा सकता है. कॉन्टेंट आइटम की इस सूची में बदलाव किया जा सकता है, इसे फिर से क्रम में लगाया जा सकता है, अपडेट किया जा सकता है, और भी बहुत कुछ किया जा सकता है.
रिसीवर एसडीके, सूची को मैनेज करता है और सूची में मौजूद आइटम पर होने वाली कार्रवाइयों का जवाब देता है. ऐसा तब तक होता है, जब तक सूची में कम से कम एक आइटम चालू (चलाया जा रहा है या रोका गया है) रहता है. भेजने वाले लोग, सेशन में शामिल हो सकते हैं और सूची में आइटम जोड़ सकते हैं. रिसीवर, सूची में मौजूद आइटम के लिए सेशन तब तक बनाए रखता है, जब तक कि आखिरी आइटम का प्लेबैक पूरा नहीं हो जाता या सेंडर, प्लेबैक को रोककर सेशन को खत्म नहीं कर देता. इसके अलावा, ऐसा तब तक होता है, जब तक कि सेंडर, रिसीवर पर नई सूची लोड नहीं कर देता. रिसीवर, डिफ़ॉल्ट रूप से बंद की गई सूची के बारे में कोई जानकारी सेव नहीं रखता. सूची का आखिरी आइटम खत्म होने के बाद, मीडिया सेशन खत्म हो जाता है और सूची गायब हो जाती है.
मीडिया सूची के आइटम बनाना और लोड करना
मीडिया सूची के किसी आइटम को 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();
RemoteMediaClient के सही queueLoad तरीके का इस्तेमाल करके, सूची में मीडिया सूची के आइटम का कलेक्शन लोड करें.
मीडिया सूची की स्थिति के अपडेट पाना
जब रिसीवर, मीडिया सूची में मौजूद किसी आइटम को लोड करता है, तो वह उस आइटम को एक यूनीक आईडी असाइन करता है. यह आईडी, सेशन की अवधि (और सूची की लाइफ़) तक बना रहता है. आपका ऐप्लिकेशन, सूची की स्थिति के बारे में जान सकता है. जैसे, फ़िलहाल कौनसा आइटम लोड किया गया है (ऐसा हो सकता है कि वह न चल रहा हो), लोड हो रहा है या पहले से लोड किया गया है. MediaStatus क्लास, स्थिति की यह जानकारी उपलब्ध कराती है:
getPreloadedItemId()तरीका - अगर अगला आइटम पहले से लोड किया गया है, तो यह पहले से लोड किए गए आइटम का आईडी दिखाता है.getLoadingItemId()method - यह रिसीवर पर लोड हो रहे आइटम का आइटम आईडी दिखाता है. हालांकि, यह आइटम सूची में चालू नहीं होता.getCurrentItemId()method - यह उस आइटम का आइटम आईडी दिखाता है जो मीडिया स्टेटस में बदलाव होने के समय, सूची में चालू था. हालांकि, हो सकता है कि वह आइटम न चल रहा हो.getQueueItems()(अब इस्तेमाल नहीं किया जाता, इसके बजायMediaQueueका इस्तेमाल करें) तरीका - यहMediaQueueItemइंस्टेंस की सूची को ऐसी सूची के तौर पर दिखाता है जिसमें बदलाव नहीं किया जा सकता.
आपका ऐप्लिकेशन,
MediaQueue
क्लास का इस्तेमाल करके भी आइटम की सूची पा सकता है. यह क्लास, मीडिया सूची का एक स्पार्स डेटा मॉडल है. यह सूची में मौजूद आइटम आईडी की सूची को सेव रखता है. यह सूची, रिसीवर के साथ अपने-आप सिंक हो जाती है.
MediaQueue सभी MediaQueueItem को सेव नहीं करता है, क्योंकि सूची बहुत लंबी होने पर, यह बहुत ज़्यादा मेमोरी का इस्तेमाल करेगा. इसके बजाय, यह ज़रूरत के हिसाब से आइटम फ़ेच करता है और हाल ही में ऐक्सेस किए गए आइटम का LruCache रखता है. मीडिया सूची को ऐक्सेस करने के लिए, इन तरीकों का इस्तेमाल किया जा सकता है:
getItemIds()तरीका - यह सभी आइटम आईडी की सूची को क्रम से दिखाता है.getItemAtIndex()तरीका - यह दिए गए इंडेक्स पर, कैश मेमोरी में सेव किया गया आइटम दिखाता है. अगर आइटम को कैश मेमोरी में सेव नहीं किया गया है, तो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 एल्गोरिदम को बदलना), सूची से आइटम हटाए जा सकते हैं, और सूची में मौजूद आइटम का क्रम बदला जा सकता है.