इस पेज पर, वीडियो कॉन्टेंट को मैनेज करने के लिए प्रीलोड मैनेजर का इस्तेमाल करने का तरीका बताया गया है. प्रीलोड मैनेजर का इस्तेमाल करके, उपयोगकर्ता को बेहतर अनुभव दिया जा सकता है. जब उपयोगकर्ता एक मीडिया आइटम से दूसरे पर स्विच करता है, तो मैनेजर पहले से ही कुछ कॉन्टेंट लोड कर लेता है. इसलिए, मीडिया आइटम तेज़ी से चलने लगता है.
इस पेज पर इन विषयों के बारे में बताया गया है:
- प्रीलोड मैनेजर में मीडिया आइटम जोड़ना
- प्रीलोड मैनेजर में प्राथमिकताओं को अमान्य करना
- मीडिया फ़ेच करना और उसे चलाना
- प्रीलोड मैनेजर से आइटम हटाना
- प्रीलोड मैनेजर का इस्तेमाल बंद होने पर उसे रिलीज़ करें
प्रीलोड मैनेजर में मीडिया आइटम जोड़ना
आपको प्रीलोड मैनेजर को हर उस मीडिया आइटम के बारे में बताना होगा जिसे वह ट्रैक करेगा. उदाहरण के लिए, अगर आपके ऐप्लिकेशन में वीडियो का कैरसेल है, तो उन वीडियो को प्रीलोड मैनेजर में जोड़ें. इस्तेमाल के उदाहरण के आधार पर, सभी वीडियो जोड़े जा सकते हैं या सिर्फ़ वे वीडियो जोड़े जा सकते हैं जो फ़िलहाल चल रहे वीडियो के आस-पास हैं. आपके पास बाद में प्रीलोड मैनेजर में नए आइटम जोड़ने का विकल्प भी होता है.
मीडिया आइटम जोड़ने से, प्रीलोड मैनेजर अपने-आप कॉन्टेंट लोड करना शुरू नहीं करता. प्रीलोडिंग को ट्रिगर करने के लिए, आपको प्रीलोड मैनेजर में मौजूद प्राथमिकताओं को अमान्य करना होगा.
val initialMediaItems = pullMediaItemsFromService(count = 20) for (index in 0 until initialMediaItems.size) { preloadManager.add(initialMediaItems.get(index), /* rankingData= */ index) } // items aren't actually loaded yet! need to call invalidate() after this
कोड के बारे में मुख्य बातें
- इस स्निपेट में बताया गया है कि प्रीलोड मैनेजर बनाने के बाद, उसे शुरुआती तौर पर कैसे पॉप्युलेट करें. मौजूदा और पहले से भरे गए प्रीलोड मैनेजर में आइटम जोड़ने के लिए,
add()को भी कॉल किया जा सकता है. - इस स्निपेट में,
pullMediaItemsFromService()ऐप्लिकेशन का लॉजिक है, जो चलाने के लिए कॉन्टेंट की सूची फ़ेच करता है. यह कोड, ज़्यादा से ज़्यादा 20 आइटम की सूची पाने के लिए इस तरीके को कॉल करता है. preloadManager,DefaultPreloadManagerबनाएं में बनाया गयाDefaultPreloadManagerहै. यह कोड, उस मैनेजर केadd()तरीके को कॉल करता है, ताकि कैरसेल में हर आइटम को जोड़ा जा सके.rankingDataएक ऐसी वैल्यू है जिसका इस्तेमाल प्रीलोड मैनेजर, हर मीडिया आइटम की प्राथमिकता तय करने के लिए करता है.DefaultPreloadManagerके लिए,rankingDataएक पूर्णांक है. यह कैरसेल में आइटम की जगह दिखाता है. प्रीलोड मैनेजर, प्राथमिकता तय करता है. इसके लिए, वह यह देखता है कि फ़िलहाल चल रहा आइटम, हर आइटम से कितनी दूर है.
प्रीलोड मैनेजर में प्राथमिकताओं को अमान्य करना
प्रीलोड मैनेजर को कॉन्टेंट प्रीलोड करने के लिए ट्रिगर करने के लिए, आपको invalidate() को कॉल करना होगा. इससे प्रीलोड मैनेजर को पता चलेगा कि आइटम की प्राथमिकताएं पुरानी हो गई हैं. आपको इन स्थितियों में ऐसा करना चाहिए:
- प्रीलोड मैनेजर में नए मीडिया आइटम जोड़ने या मीडिया आइटम हटाने पर.
अगर आपको कई आइटम जोड़ने या हटाने हैं, तो आपको उन सभी को जोड़ना चाहिए. इसके बाद,
invalidate()को कॉल करें. - जब उपयोगकर्ता एक मीडिया आइटम से दूसरे मीडिया आइटम पर स्विच करता है. ऐसे में, आपको
invalidate()को कॉल करने से पहले, मौजूदा प्लेइंग इंडेक्स को अपडेट करना होगा. इसके बारे में कॉन्टेंट फ़ेच करना और उसे चलाना लेख में बताया गया है.
प्रीलोड मैनेजर को अमान्य करने पर, यह TargetPreloadStatusControl को कॉल करता है. इससे यह पता चलता है कि इसे हर आइटम से कितना कॉन्टेंट लोड करना चाहिए. इसके बाद, यह हर आइटम के लिए कॉन्टेंट को प्राथमिकता के क्रम में लोड करता है. प्राथमिकता का क्रम, ज़्यादा से कम होता है.
preloadManager.invalidate()
कोड के बारे में मुख्य बातें
invalidate()को कॉल करने पर, प्रीलोड मैनेजर उन सभी मीडिया आइटम की प्राथमिकता का फिर से आकलन करता है जिनके बारे में उसे पता है. इस वजह से, अगर आपको प्रीलोड मैनेजर में कई बदलाव करने हैं, तोinvalidate()को कॉल करने से पहले, आपको बदलाव पूरे कर लेने चाहिए.
मीडिया फ़ेच करना और चलाना
जब उपयोगकर्ता किसी नए मीडिया आइटम पर जाता है, तो आपको प्रीलोड मैनेजर से मीडिया आइटम पाना होगा. अगर प्रीलोड मैनेजर ने कोई कॉन्टेंट लोड किया है, तो वह कॉन्टेंट, प्रीलोड मैनेजर का इस्तेमाल न करने पर लोड होने वाले कॉन्टेंट की तुलना में ज़्यादा तेज़ी से चलेगा. अगर प्रीलोड मैनेजर ने अब तक उस आइटम से कॉन्टेंट लोड नहीं किया है, तो कॉन्टेंट सामान्य रूप से चलेगा.
// When a media item is about to display on the screen val mediaSource = preloadManager.getMediaSource(mediaItem) if (mediaSource != null) { player.setMediaSource(mediaSource) } else { // If mediaSource is null, that mediaItem hasn't been added to the preload manager // yet. So, send it directly to the player when it's about to play player.setMediaItem(mediaItem) } player.prepare() // When the media item is displaying at the center of the screen player.play() preloadManager.setCurrentPlayingIndex(currentIndex) // Need to call invalidate() to update the priorities preloadManager.invalidate()
कोड के बारे में मुख्य बातें
player, Media3ExoPlayerहै. इसका इस्तेमाल ऐप्लिकेशन, कॉन्टेंट चलाने के लिए करता है. आपको उस प्लेयर को बनाने के लिए, उसी बिल्डर परDefaultPreloadManager.Builder.buildExoPlayer()को कॉल करना होगा जिसका इस्तेमाल आपने प्रीलोड मैनेजर बनाने के लिए किया था.- जब उपयोगकर्ता किसी नए मीडिया आइटम पर स्विच करता है, तो ऐप्लिकेशन, प्रीलोड मैनेजर से मीडिया सोर्स पाने के लिए
getMediaSource()को कॉल करता है. यह ऐसाmediaItemहोना चाहिए जिसे आपने प्रीलोड मैनेजर में पहले ही जोड़ दिया हो. अगर प्रीलोड मैनेजर ने कॉन्टेंट लोड करना शुरू नहीं किया है, तो कोई समस्या नहीं है. ऐसे में, यह एक ऐसाMediaSourceदिखाता है जिसमें प्रीलोड किया गया डेटा नहीं होता. उदाहरण के लिए, ऐसा तब हो सकता है, जब उपयोगकर्ता अचानक कैरसेल में बहुत आगे बढ़ जाए. - जब उपयोगकर्ता नया मीडिया आइटम चला लेता है, तब
setCurrentPlayingIndexको कॉल करके, प्रीलोड मैनेजर को बताएं कि कैरसेल में नया आइटम कहां है. प्रीलोड मैनेजर को इस जानकारी की ज़रूरत होती है, ताकि वह अगले आइटम को लोड करने को प्राथमिकता दे सके. मौजूदा इंडेक्स को अपडेट करने के बाद, callinvalidate()करें, ताकि प्रीलोड मैनेजर हर आइटम के लिए प्राथमिकता तय कर सके.
प्रीलोड मैनेजर से आइटम हटाना
प्रीलोड मैनेजर को बेहतर तरीके से काम करने देने के लिए, आपको उन आइटम को हटाना चाहिए जिन्हें प्रीलोड मैनेजर को अब ट्रैक करने की ज़रूरत नहीं है. ऐसे आइटम भी हटाए जा सकते हैं जो अब भी कैरसेल में दिख रहे हैं, लेकिन उपयोगकर्ता की मौजूदा जगह से बहुत दूर हैं. उदाहरण के लिए, ऐसा हो सकता है कि आपने यह तय किया हो कि अगर कोई आइटम, उपयोगकर्ता के देखे जा रहे कॉन्टेंट से 15 आइटम से ज़्यादा दूर है, तो उसे पहले से लोड करने की ज़रूरत नहीं है. ऐसे में, आइटम को तब हटाया जाता है, जब वह बहुत दूर चला जाता है. अगर उपयोगकर्ता उन आइटम की ओर वापस जाता है जिन्हें हटाया गया था, तो आपके पास उन्हें फिर से जोड़ने का विकल्प होता है.
preloadManager.remove(mediaItem)
कोड के बारे में मुख्य बातें
- अगर आपको प्रीलोड मैनेजर से सभी आइटम हटाने हैं, तो
remove()के बजायreset()को कॉल करें. अगर आपको कैरोसेल में मौजूद सभी आइटम बदलने हैं, तो यह तरीका काम का है. ऐसे में, आइटम हटाने के बाद, आपको प्रीलोड मैनेजर में नए आइटम जोड़ने होंगे. इसके बाद, प्रीलोड मैनेजर में प्राथमिकताओं को अमान्य करना होगा.
प्रीलोड मैनेजर का इस्तेमाल बंद होने पर उसे रिलीज़ करना
जब आपको प्रीलोड मैनेजर की ज़रूरत न हो, तो आपको उसे रिलीज़ करना होगा, ताकि उसके संसाधनों को खाली किया जा सके. खास तौर पर, जब आपकी गतिविधि बंद हो जाए, तब इसे रिलीज़ करना न भूलें.
preloadManager.release()
कोड के बारे में मुख्य बातें
- ऑब्जेक्ट को रिलीज़ करने के बाद, आपको उसके किसी भी तरीके को कॉल नहीं करना चाहिए.
- अगर आपको कोई दूसरा प्रीलोड मैनेजर बनाना है, तो नया
DefaultPreloadManager.Builderबनाएं और उसका इस्तेमाल करकेDefaultPreloadManagerबनाएं. पुराने बिल्डर का फिर से इस्तेमाल न करें.