कॉन्टेंट मैनेज करना और उसे चलाना

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

इस पेज पर इन विषयों के बारे में जानकारी दी गई है:

प्रीलोड मैनेजर में मीडिया आइटम जोड़ना

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

इसके लिए, एक साथ कई कार्ड जोड़ने का तरीका इस्तेमाल करें. जैसे, addMediaItems. इसके अलावा, मीडिया आइटम को अलग-अलग जोड़ने के लिए, add (या addMediaSource) को कॉल किया जा सकता है. हालांकि, मीडिया आइटम को एक-एक करके जोड़ने से, प्रीलोडिंग अपने-आप ट्रिगर नहीं होती. अलग-अलग तरीकों का इस्तेमाल करते समय, आपको आइटम जोड़ने के बाद invalidate को साफ़ तौर पर कॉल करना होगा. इससे प्रीलोड मैनेजर को प्राथमिकताओं को अपडेट करने और प्रीलोडिंग शुरू करने के बारे में पता चलेगा.

val initialMediaItems = pullMediaItemsFromService(count = 20)
val rankingDataList = initialMediaItems.indices.toList()
preloadManager.addMediaItems(initialMediaItems, rankingDataList)

कोड के बारे में अहम बातें

  • इस स्निपेट में, प्रीलोड मैनेजर को बनाने के बाद, उसे बैच मोड में शुरू में भरने का तरीका बताया गया है. पहले से मौजूद और डेटा से भरे प्रीलोड मैनेजर में आइटम जोड़ने के लिए, addMediaItems पर कॉल करें.
  • इस स्निपेट में, pullMediaItemsFromService() ऐप्लिकेशन का लॉजिक है. इससे, चलाने के लिए कॉन्टेंट की सूची फ़ेच की जाती है. यह कोड, ज़्यादा से ज़्यादा 20 आइटम की सूची पाने के लिए इस तरीके का इस्तेमाल करता है.
  • preloadManager, DefaultPreloadManager बनाएं में बनाया गया DefaultPreloadManager है.
  • rankingData एक ऐसी वैल्यू है जिसका इस्तेमाल प्रीलोड मैनेजर, हर मीडिया आइटम की प्राथमिकता तय करने के लिए करता है. DefaultPreloadManager के लिए, rankingData एक पूर्णांक है. यह कैरसेल में आइटम की जगह दिखाता है. प्रीलोड मैनेजर, यह तय करता है कि किस आइटम को प्राथमिकता दी जाए. इसके लिए, वह यह देखता है कि फ़िलहाल चल रहा आइटम, हर आइटम से कितनी दूरी पर है.

मीडिया फ़ेच करना और चलाना

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

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

// When a media item is about to be displayed on the screen
val mediaSource = preloadManager.getMediaSource(mediaItem)
if (mediaSource != null) {
  player.setMediaSource(mediaSource)
} else {
  // If the mediaSource is null, its mediaItem hasn't been added to the preload
  // manager yet. Send it directly to the player when it's about to play.
  player.setMediaItem(mediaItem)
}
player.prepare()

// When the media item is being displayed at the center of the screen ("in focus")
player.play()
// Update the current playing index to let the preload manager know where the user
// is in the carousel/pagination/list.
preloadManager.setCurrentPlayingIndex(currentIndex)

कोड के बारे में अहम बातें

  • player, Media3 ExoPlayer है. इसका इस्तेमाल ऐप्लिकेशन, कॉन्टेंट चलाने के लिए करता है. आपको उस प्लेयर को बनाने के लिए, उसी बिल्डर पर DefaultPreloadManager.Builder.buildExoPlayer() को कॉल करना होगा जिसका इस्तेमाल आपने प्रीलोड मैनेजर बनाने के लिए किया था.
  • जब उपयोगकर्ता किसी नए मीडिया आइटम पर स्विच करता है, तो ऐप्लिकेशन, प्रीलोड मैनेजर से मीडिया सोर्स पाने के लिए getMediaSource() को कॉल करता है. यह mediaItem होना चाहिए, जिसे आपने प्रीलोड मैनेजर में पहले ही जोड़ लिया हो. अगर प्रीलोड मैनेजर ने पहले से ही कॉन्टेंट लोड करना शुरू नहीं किया है, तो कोई समस्या नहीं है. ऐसे में, यह MediaSource दिखाता है, जिसमें प्रीलोड किया गया डेटा नहीं होता. उदाहरण के लिए, ऐसा तब हो सकता है, जब उपयोगकर्ता अचानक कैरसेल में बहुत आगे बढ़ जाए.
  • जब उपयोगकर्ता नया मीडिया आइटम चला लेता है, तब setCurrentPlayingIndex को कॉल करें. इससे प्रीलोड मैनेजर को पता चलेगा कि कैरसेल में नया आइटम कहां है. प्रीलोड मैनेजर को इस जानकारी की ज़रूरत होती है, ताकि वह अगले आइटम को लोड करने को प्राथमिकता दे सके.

प्रीलोड मैनेजर से आइटम हटाना

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

अगर आपको मीडिया आइटम की कोई सूची हटानी है, तो removeMediaItems का इस्तेमाल करें. इसके अलावा, मीडिया आइटम को एक-एक करके हटाने के लिए, remove (या removeMediaSource) पर कॉल करें.

preloadManager.removeMediaItems(mediaItemsToRemove)

कोड के बारे में अहम बातें

  • अगर आपको प्रीलोड मैनेजर से सभी आइटम हटाने हैं, तो remove() के बजाय reset() को कॉल करें. अगर आपको कैरसेल में मौजूद सभी आइटम बदलने हैं, तो यह तरीका काम का है. ऐसे में, आइटम हटाने के बाद आपको प्रीलोड मैनेजर में नए आइटम जोड़ने होंगे.

प्रीलोड मैनेजर का इस्तेमाल बंद करने के बाद, उसे रिलीज़ करें

जब आपको प्रीलोड मैनेजर की ज़रूरत न हो, तो आपको उसे रिलीज़ करना होगा, ताकि उसके संसाधनों को खाली किया जा सके. खास तौर पर, जब आपकी गतिविधि बंद हो जाए, तब इसे रिलीज़ करना न भूलें.

preloadManager.release()

कोड के बारे में अहम बातें

  • ऑब्जेक्ट को रिलीज़ करने के बाद, आपको उसके किसी भी तरीके को कॉल नहीं करना चाहिए.
  • अगर आपको कोई दूसरा प्रीलोड मैनेजर बनाना है, तो नया DefaultPreloadManager.Builder बनाएं और उसका इस्तेमाल करके DefaultPreloadManager बनाएं. पुराने बिल्डर का फिर से इस्तेमाल न करें.