Cast फ़्रेमवर्क, क्यूइंग क्लास उपलब्ध कराता है. इनकी मदद से, सूचियां
बनाई जा सकती हैं. इन सूचियों को MediaInfo इंस्टेंस से बनाया जा सकता है. जैसे, वीडियो या ऑडियो
स्ट्रीम. इन्हें रिसीवर पर क्रम से चलाया जा सकता है.MediaQueueItem कॉन्टेंट आइटम की इस सूची में बदलाव किया जा सकता है, इसका क्रम बदला जा सकता है, इसे अपडेट किया जा सकता है वगैरह.
रिसीवर SDK, सूची को बनाए रखता है और सूची पर होने वाले कार्रवाइयों का जवाब देता है. ऐसा तब तक होता है, जब तक सूची में कम से कम एक आइटम चालू है. जैसे, कोई आइटम चल रहा है या रोका गया है. सेंडर, सेशन में शामिल हो सकते हैं और सूची में आइटम जोड़ सकते हैं. रिसीवर, सूची में शामिल आइटम के लिए एक सेशन बनाए रखता है. यह सेशन तब तक चलता है, जब तक सूची में शामिल आखिरी आइटम नहीं चल जाता या सेंडर, प्लेबैक को रोककर सेशन खत्म नहीं कर देता. इसके अलावा, यह सेशन तब तक चलता है, जब तक कोई सेंडर, रिसीवर पर नई सूची लोड नहीं कर देता. रिसीवर, डिफ़ॉल्ट रूप से खत्म की गई सूचियों के बारे में कोई जानकारी नहीं रखता. सूची में शामिल आखिरी आइटम के खत्म होने के बाद, मीडिया सेशन खत्म हो जाता है और सूची गायब हो जाती है.
मीडिया सूची में आइटम बनाना और लोड करना
Cast फ़्रेमवर्क में, मीडिया सूची में शामिल आइटम को
MediaQueueItem
इंस्टेंस के तौर पर दिखाया जाता है.
मीडिया सूची में शामिल कोई आइटम बनाते समय, अगर अडैप्टिव कॉन्टेंट के साथ Media Player
Library का इस्तेमाल किया जा रहा है, तो
प्रीलोड का समय सेट किया जा सकता है. इससे, प्लेयर, मीडिया सूची में शामिल आइटम को बफ़र करना शुरू कर सकता है. ऐसा तब किया जा सकता है, जब सूची में उससे पहले मौजूद आइटम का प्लेबैक खत्म हो जाए. आइटम के अपने-आप चलने की सुविधा वाले एट्रिब्यूट को 'सही है' पर सेट करने से, रिसीवर इसे अपने-आप चला सकता है. उदाहरण के लिए, मीडिया सूची में शामिल आइटम बनाने के लिए, बिल्डर पैटर्न का इस्तेमाल इस तरह किया जा सकता है:
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()तरीका - रिसीवर पर, फ़िलहाल लोड हो रहे आइटम का आईडी दिखाता है. हालांकि, यह आइटम सूची में चालू नहीं है.getCurrentItemId()तरीका - मीडिया स्टेटस में बदलाव होने के समय, सूची में चालू रहे आइटम का आईडी दिखाता है. हो सकता है कि यह आइटम चल न रहा हो.getQueueItems()(अब इसका इस्तेमाल नहीं किया जाता, इसके बजायMediaQueueका इस्तेमाल करें) तरीका -MediaQueueItemइंस्टेंस की सूची को, बदलाव नहीं की जा सकने वाली सूची के तौर पर दिखाता है.
आपका ऐप्लिकेशन आइटम की सूची पा सकता है.MediaQueue यह क्लास, मीडिया सूची का स्पार्स डेटा मॉडल है. यह सूची में शामिल आइटम के आईडी की सूची रखता है. यह सूची, रिसीवर के साथ अपने-आप सिंक हो जाती है.
MediaQueue सभी
MediaQueueItem
को नहीं रखता, क्योंकि सूची बहुत लंबी होने पर, इसमें बहुत ज़्यादा मेमोरी का इस्तेमाल होगा. इसके बजाय, यह
मांग पर आइटम फ़ेच करता है और हाल ही में ऐक्सेस किए गए आइटम का LruCache रखता है. मीडिया सूची को ऐक्सेस करने के लिए, इन तरीकों का इस्तेमाल किया जा सकता है:
getItemIds()तरीका - क्रम से, सभी आइटम आईडी की सूची दिखाता है.getItemAtIndex()तरीका - दिए गए इंडेक्स पर, कैश किया गया आइटम दिखाता है. अगर आइटम कैश नहीं किया गया है, तोMediaQueue,nullदिखाएगा और आइटम को फ़ेच करने के लिए शेड्यूल करेगा. आइटम फ़ेच होने पर,MediaQueue.Callback#itemsUpdatedAtIndexes()को कॉल किया जाएगा. इसके बाद, उसी आईडी के साथgetItemAtIndex()को फिर से कॉल करने पर, आइटम दिखेगा.fetchMoteItemsRelativeToIndex()का इस्तेमाल तब किया जाता है, जब उपयोगकर्ता सूची के यूज़र इंटरफ़ेस (यूआई) को सबसे ऊपर या सबसे नीचे स्क्रोल करता है, और आपका ऐप्लिकेशन क्लाउड से ज़्यादा आइटम फ़ेच करना चाहता है.
सूची और सूची में शामिल आइटम के स्टेटस के बारे में अपने ऐप्लिकेशन को बताने के लिए, इन तरीकों का इस्तेमाल मीडिया स्टेटस के अन्य तरीकों के साथ करें. रिसीवर से
मीडिया स्टेटस के अपडेट के अलावा, आपका ऐप्लिकेशन, सूची में होने वाले बदलावों के बारे में सुनने के लिए
RemoteMediaClient.Callback
और
MediaQueue.Callbackको लागू कर सकता है.
इसके अलावा, Cast SDK, क्यूइंग के लिए यूज़र इंटरफ़ेस (यूआई) बनाने के लिए, दो यूटिलिटी क्लास उपलब्ध कराता है.
RecyclerViewके डेटा को बैक अप करने के लिए,MediaQueueRecyclerViewAdapter,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 एल्गोरिदम में बदलाव करना, जो अगले आइटम को चुनता है. इसके अलावा, सूची से आइटम हटाए जा सकते हैं और सूची में शामिल आइटम का क्रम बदला जा सकता है.