मैनेजर के कॉन्सेप्ट प्रीलोड करना

प्रीलोड मैनेजर की मदद से, उपयोगकर्ताओं को बेहतर अनुभव दिया जा सकता है. ऐसा इसलिए, क्योंकि जब वे एक आइटम से दूसरे आइटम पर स्विच करते हैं, तो उन्हें कम इंतज़ार करना पड़ता है और उन्हें कॉन्टेंट तेज़ी से मिलता है. इससे, हर आइटम के लिए प्रीलोडिंग की अवधि और रैंकिंग को भी पसंद के मुताबिक बनाया जा सकता है.

सोशल मीडिया पर आम तौर पर ऐसा होता है कि कोई ऐप्लिकेशन, उपयोगकर्ता को मीडिया के विकल्पों की सूची या कैरसेल दिखाता है. उदाहरण के लिए, कोई ऐप्लिकेशन छोटे वीडियो का कैरसेल दिखा सकता है. एक वीडियो खत्म होने पर, ऐप्लिकेशन अगले वीडियो पर स्विच हो जाता है. अगर उपयोगकर्ता को कोई वीडियो पसंद नहीं आता है, तो वह अगले या पिछले वीडियो पर स्वाइप कर सकता है.

वीडियो कॉन्टेंट को प्रीलोड न करने पर, उपयोगकर्ता को खराब अनुभव मिल सकता है. उपयोगकर्ता कुछ मीडिया का इस्तेमाल कर लेता है और फिर उसे अगले मीडिया के लोड होने का इंतज़ार करना पड़ता है.

दूसरी ओर, अगर कॉन्टेंट को बहुत ज़्यादा प्रीलोड किया जाता है, तो इससे बैटरी की खपत होती है और नेटवर्क बैंडविथ का इस्तेमाल होता है. ऐसा कॉन्टेंट लोड होता है जिसे उपयोगकर्ता कभी नहीं चलाता.

DefaultPreloadManager की मदद से, आपका ऐप्लिकेशन इन समस्याओं को हल कर सकता है. प्रीलोड मैनेजर, आपके ऐप्लिकेशन के साथ काम करता है. इससे यह तय किया जाता है कि हर मीडिया आइटम कितना ज़रूरी है. साथ ही, यह ज़रूरी मीडिया आइटम को पहले से ही लोड कर देता है.

श्रम का बंटवारा

DefaultPreloadManager का इस्तेमाल करने पर, कुछ काम आपका कोड करता है और कुछ काम प्रीलोड मैनेजर करता है.

आपके ऐप्लिकेशन को ये काम करने होंगे:

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

  • प्रीलोड मैनेजर को, मौजूदा समय में चल रहे आइटम का इंडेक्स बताएं. इस जानकारी का इस्तेमाल प्रीलोड मैनेजर करता है. इससे यह तय किया जाता है कि हर मीडिया आइटम, चल रहे आइटम के कितना करीब है. साथ ही, इसके हिसाब से प्रीलोडिंग को डाइनैमिक तरीके से प्राथमिकता दी जाती है. जब उपयोगकर्ता किसी नए आइटम पर जाता है, तो प्रीलोड मैनेजर की मदद से उस इंडेक्स को अपडेट करें.

  • जब आपको प्रीलोड मैनेजर का इस्तेमाल नहीं करना हो, तब उसे रिलीज़ करें, ताकि उसके संसाधनों को खाली किया जा सके.

प्रीलोड मैनेजर ये काम करता है:

  • यह उन सभी मीडिया आइटम को ट्रैक करता है जिन्हें आपके ऐप्लिकेशन ने इसमें जोड़ा है.
  • जब भी इसकी प्राथमिकताएं अपडेट की जाती हैं, तो यह आपके ऐप्लिकेशन से क्वेरी करता है. इसके लिए, यह आपके ऐप्लिकेशन से लागू किए गए TargetPreloadStatusControl को कॉल करता है. यह कॉल इसलिए किया जाता है, ताकि यह पता चल सके कि हर मीडिया आइटम का कितना हिस्सा लोड करना है.
  • ऐप्लिकेशन से क्वेरी करने के बाद, यह हर मीडिया आइटम को ज़रूरत के हिसाब से पहले से लोड कर देता है. प्रीलोड मैनेजर यह तय करता है कि आइटम को किस क्रम में लोड किया जाए. यह उन आइटम को प्राथमिकता देता है जो उपयोगकर्ता के गेम में इस्तेमाल किए जा रहे आइटम के सबसे मिलते-जुलते हैं.
  • जब ऐप्लिकेशन, कॉन्टेंट का अनुरोध करता है, तो प्रीलोड मैनेजर, पहले से लोड किए गए कॉन्टेंट के साथ MediaSource उपलब्ध कराता है.

प्रीलोड मैनेजर वर्कफ़्लो

इस सेक्शन में, प्रीलोड मैनेजर का इस्तेमाल करने वाले ऐप्लिकेशन के लिए, सामान्य वर्कफ़्लो के बारे में बताया गया है. इस उदाहरण में, हम मान लेते हैं कि ऐप्लिकेशन में शॉर्ट वीडियो का कैरसेल दिखता है. चुना गया वीडियो अपने-आप चलने लगता है. हालांकि, उपयोगकर्ता कैरसेल को किसी भी दिशा में स्क्रोल कर सकता है. इससे, चल रहा वीडियो रुक जाता है और स्क्रोल किया गया वीडियो चलने लगता है.

इन सभी चरणों के बारे में, यहां दिए गए पेजों पर विस्तार से बताया गया है.

  1. ऐप्लिकेशन, टारगेट प्रीलोड स्टेटस कंट्रोल बनाता है. प्रीलोड मैनेजर, इस कंट्रोल से यह क्वेरी करता है कि हर मीडिया आइटम का कितना हिस्सा लोड करना है.
  2. ऐप्लिकेशन, DefaultPreloadManager.Builder बनाता है और टारगेट प्रीलोड स्टेटस कंट्रोल को पास करता है. इसके बाद, ऐप्लिकेशन प्रीलोड मैनेजर बनाने के लिए बिल्डर का इस्तेमाल करता है.
  3. ऐप्लिकेशन, प्रीलोड मैनेजर में मीडिया आइटम जोड़ता है. ऐप्लिकेशन, हर आइटम के लिए index उपलब्ध कराता है. इससे कैरसेल में आइटम की जगह के बारे में पता चलता है.
  4. हर मीडिया आइटम के लिए, प्रीलोड मैनेजर, टारगेट प्रीलोड कंट्रोल को कॉल करता है. इससे यह क्वेरी की जाती है कि आइटम का कितना हिस्सा लोड किया जाना चाहिए. प्रीलोड करने के टारगेट को कंट्रोल करने वाली सुविधा, कॉन्टेंट को कुछ समय के लिए लोड करने, आइटम के मेटाडेटा को फ़ेच करने या इस समय उस आइटम को फ़ेच न करने के लिए कह सकती है. प्रीलोड मैनेजर को यह जानकारी मिलने के बाद, वह मीडिया कॉन्टेंट लोड करना शुरू कर देता है.
  5. जब उपयोगकर्ता कॉन्टेंट चलाना शुरू करता है, तो ऐप्लिकेशन, प्रीलोड मैनेजर को कॉल करता है. ऐसा उस मीडिया आइटम के लिए MediaSource का अनुरोध करने के लिए किया जाता है. ऐप्लिकेशन, प्रीलोड मैनेजर को यह बताने के लिए भी setCurrentPlayingIndex() कॉल करता है कि कौनसा मीडिया आइटम चलाया जा रहा है, ताकि मीडिया आइटम की प्राथमिकताएं अपडेट की जा सकें.
  6. प्रीलोड मैनेजर की प्राथमिकताओं को अपडेट किए जाने पर, यह टारगेट प्रीलोड कंट्रोल को फिर से कॉल करता है. इससे यह पता चलता है कि हर आइटम को कितना लोड करना है.
  7. जब ऐप्लिकेशन कैरसेल को बंद करता है, तब वह प्रीलोड मैनेजर को रिलीज़ करता है, ताकि वह अपने संसाधनों को खाली कर सके.