प्रीलोड मैनेजर की मदद से, उपयोगकर्ताओं को बेहतर अनुभव दिया जा सकता है. ऐसा इसलिए, क्योंकि इससे उन्हें कॉन्टेंट तेज़ी से मिलता है. साथ ही, एक आइटम से दूसरे आइटम पर स्विच करते समय उन्हें कम इंतज़ार करना पड़ता है. इससे, हर आइटम के लिए प्रीलोडिंग की अवधि और रैंकिंग को भी अपनी पसंद के मुताबिक बनाया जा सकता है.
सोशल मीडिया पर आम तौर पर ऐसा होता है कि कोई ऐप्लिकेशन, उपयोगकर्ता को मीडिया के विकल्पों की सूची या कैरसेल दिखाता है. उदाहरण के लिए, कोई ऐप्लिकेशन छोटे वीडियो का कैरसेल दिखा सकता है. एक वीडियो खत्म होने पर, ऐप्लिकेशन अगले वीडियो पर स्विच कर देता है. अगर उपयोगकर्ता को कोई वीडियो पसंद नहीं आता है, तो वह अगले या पिछले वीडियो पर स्वाइप कर सकता है.
वीडियो कॉन्टेंट को पहले से लोड न करने पर, उपयोगकर्ता को खराब अनुभव मिल सकता है. उपयोगकर्ता कुछ मीडिया का इस्तेमाल कर लेता है और फिर उसे अगले मीडिया के लोड होने का इंतज़ार करना पड़ता है.
दूसरी ओर, अगर कॉन्टेंट को बहुत ज़्यादा प्रीलोड किया जाता है, तो इससे बैटरी की खपत होती है और नेटवर्क बैंडविथ का इस्तेमाल होता है. ऐसा कॉन्टेंट लोड होता है जिसे उपयोगकर्ता कभी नहीं चलाएगा.
DefaultPreloadManager
की मदद से, आपका ऐप्लिकेशन इन समस्याओं को हल कर सकता है. प्रीलोड मैनेजर, आपके ऐप्लिकेशन के साथ काम करता है. इससे यह तय किया जाता है कि हर मीडिया आइटम कितना ज़रूरी है. साथ ही, यह ज़रूरी मीडिया आइटम को पहले से ही लोड कर देता है.
श्रम का बंटवारा
DefaultPreloadManager
का इस्तेमाल करने पर, कुछ काम आपका कोड करता है और कुछ काम प्रीलोड मैनेजर करता है.
आपके ऐप्लिकेशन को ये काम करने होंगे:
- ऐप्लिकेशन के
ExoPlayer
ऑब्जेक्ट बनाएं. इसके लिए, उसीDefaultPreloadManager.Builder
ऑब्जेक्ट का इस्तेमाल करें जिसका इस्तेमाल प्रीलोड मैनेजर बनाने के लिए किया जाता है.ExoPlayer
बनाने के लिए,DefaultPreloadManager.Builder.buildExoPlayer()
को कॉल करें. - प्रीलोड मैनेजर को हर उस मीडिया आइटम के बारे में बताएं जिसे उसे ट्रैक करना चाहिए. ऐसा हो सकता है कि कैरसेल में मौजूद सभी कॉन्टेंट के बारे में न बताया गया हो. इसके बजाय, सिर्फ़ पहले कुछ आइटम के बारे में बताया गया हो. उपयोगकर्ता के कैरसेल में नेविगेट करने के दौरान, प्रीलोड मैनेजर के पूल में मीडिया आइटम जोड़े और हटाए जा सकते हैं.
- जब कैरसेल में कॉन्टेंट बदलता है या उपयोगकर्ता यह बदलता है कि उसे कौनसी आइटम चलानी है, तब प्रीलोड मैनेजर में प्राथमिकताओं को अमान्य करें. इससे प्रीलोड मैनेजर को हर मीडिया आइटम की प्राथमिकता फिर से तय करने के लिए कहा जाता है. साथ ही, अगर ज़रूरी हो, तो कॉन्टेंट लोड करने के लिए कहा जाता है. मीडिया आइटम जोड़ने के बाद, प्रीलोड मैनेजर अमान्य हो जाएगा. इसके अलावा, जब उपयोगकर्ता एक आइटम से दूसरे आइटम पर जाता है या जब कैरसेल में आइटम जोड़े या हटाए जाते हैं, तब भी प्रीलोड मैनेजर अमान्य हो जाएगा.
- प्रीलोड मैनेजर की क्वेरी का जवाब दें और उसे बताएं कि हर आइटम के लिए कितना कॉन्टेंट प्रीलोड करना है.
जब उपयोगकर्ता कोई आइटम चलाना शुरू करे, तब प्रीलोड मैनेजर से मीडिया फ़ेच करें. प्रीलोड मैनेजर, आपके ऐप्लिकेशन को उस कॉन्टेंट के लिए
MediaSource
देता है.प्रीलोड मैनेजर का इस्तेमाल पूरा होने के बाद, उसे रिलीज़ करें, ताकि उसके संसाधनों को खाली किया जा सके.
प्रीलोड मैनेजर ये काम करता है:
- यह उन सभी मीडिया आइटम को ट्रैक करता है जिन्हें आपके ऐप्लिकेशन ने इसमें जोड़ा है.
- जब भी इसकी प्राथमिकताएं अमान्य हो जाती हैं, तब यह आपके ऐप्लिकेशन से क्वेरी करता है. इसके लिए, यह आपके ऐप्लिकेशन से लागू किए गए
TargetPreloadStatusControl
को कॉल करता है. यह इस बात का पता लगाने के लिए ऐसा करता है कि हर मीडिया आइटम का कितना हिस्सा लोड करना है. - ऐप्लिकेशन से क्वेरी करने के बाद, यह हर मीडिया आइटम को ज़रूरत के हिसाब से पहले से लोड कर लेता है. प्रीलोड मैनेजर यह तय करता है कि आइटम को किस क्रम में लोड करना है. यह उन आइटम को प्राथमिकता देता है जो उपयोगकर्ता के गेम में इस्तेमाल किए जा रहे आइटम के सबसे मिलते-जुलते हैं.
- जब ऐप्लिकेशन, कॉन्टेंट का अनुरोध करता है, तो प्रीलोड मैनेजर, पहले से लोड किए गए कॉन्टेंट के साथ
MediaSource
उपलब्ध कराता है.
प्रीलोड मैनेजर वर्कफ़्लो
इस सेक्शन में, प्रीलोड मैनेजर का इस्तेमाल करने वाले ऐप्लिकेशन के लिए सामान्य वर्कफ़्लो के बारे में बताया गया है. इस उदाहरण में, हम मान लेते हैं कि ऐप्लिकेशन में शॉर्ट वीडियो का कैरसेल दिखता है. चुना गया वीडियो अपने-आप चलने लगता है. हालांकि, उपयोगकर्ता कैरसेल को किसी भी दिशा में स्क्रोल कर सकता है. इससे, चल रहा वीडियो रुक जाता है और स्क्रोल किया गया वीडियो चलने लगता है.
इन सभी चरणों के बारे में, यहां दिए गए पेजों पर विस्तार से बताया गया है.
- ऐप्लिकेशन, टारगेट प्रीलोड स्टेटस कंट्रोल बनाता है. प्रीलोड मैनेजर, इस कंट्रोल से यह क्वेरी करता है कि हर मीडिया आइटम का कितना हिस्सा लोड करना है.
- ऐप्लिकेशन,
DefaultPreloadManager.Builder
बनाता है और टारगेट प्रीलोड स्टेटस कंट्रोल की ज़रूरी शर्तें पूरी करता है. इसके बाद, ऐप्लिकेशन प्रीलोड मैनेजर बनाने के लिए बिल्डर का इस्तेमाल करता है. - ऐप्लिकेशन, प्रीलोड मैनेजर में मीडिया आइटम जोड़ता है. ऐप्लिकेशन, हर आइटम के लिए index उपलब्ध कराता है. इससे कैरसेल में आइटम की पोज़िशन के बारे में पता चलता है.
- सभी मीडिया जोड़ने के बाद, ऐप्लिकेशन कॉल
invalidate()
करता है, ताकि प्रीलोड मैनेजर को हर आइटम के लिए प्राथमिकताएं सेट करने के बारे में बताया जा सके. इसके बाद, उन्हें प्रीलोड किया जा सके. - हर मीडिया आइटम के लिए, प्रीलोड मैनेजर, टारगेट प्रीलोड कंट्रोल को कॉल करता है. इससे यह क्वेरी की जाती है कि आइटम का कितना हिस्सा लोड किया जाना चाहिए. टारगेट प्रीलोड कंट्रोल, कॉन्टेंट को कुछ समय के लिए लोड करने, सिर्फ़ आइटम का मेटाडेटा फ़ेच करने या इस समय उस आइटम को फ़ेच न करने के लिए कह सकता है. प्रीलोड मैनेजर को यह जानकारी मिलने के बाद, वह मीडिया कॉन्टेंट लोड करना शुरू कर देता है.
- जब उपयोगकर्ता कॉन्टेंट चलाना शुरू करता है, तब ऐप्लिकेशन, प्रीलोड मैनेजर को कॉल करता है. ऐसा उस मीडिया आइटम के लिए
MediaSource
का अनुरोध करने के लिए किया जाता है. ऐप्लिकेशन, प्रीलोड मैनेजर को यह बताने के लिएsetCurrentPlayingIndex()
को भी कॉल करता है कि कौनसा मीडिया आइटम चलाया जा रहा है. - अगर उपयोगकर्ता किसी दूसरे मीडिया आइटम पर जाता है, तो ऐप्लिकेशन उस आइटम के लिए प्रीलोड मैनेजर से अनुरोध करता है. साथ ही, वह मौजूदा इंडेक्स को भी अपडेट करता है. इसके बाद, यह
invalidate()
को फिर से कॉल करता है, ताकि प्रीलोड मैनेजर को यह बताया जा सके कि अब क्या चलाया जा रहा है. इससे प्रीलोड मैनेजर, अपनी प्राथमिकताओं को अपडेट कर पाता है. - अगर ऐप्लिकेशन, कैरसेल में मीडिया आइटम जोड़ता या हटाता है, तो वह उन आइटम को प्रीलोड मैनेजर में भी जोड़ता या हटाता है. इसके बाद, वह
invalidate()
को कॉल करता है. - जब भी प्रीलोड मैनेजर की प्राथमिकताएं अमान्य हो जाती हैं, तब वह टारगेट प्रीलोड कंट्रोल को फिर से कॉल करता है. इससे यह पता चलता है कि हर आइटम को कितना लोड करना है.
- जब ऐप्लिकेशन कैरसेल को बंद करता है, तो वह प्रीलोड मैनेजर को रिलीज़ करता है, ताकि वह अपने संसाधनों को खाली कर सके.