मीडिया के सोर्स

ExoPlayer में, हर मीडिया को MediaItem के तौर पर दिखाया जाता है. हालांकि, प्लेयर को कॉन्टेंट चलाने के लिए, इंटरनल तौर पर MediaSource इंस्टेंस की ज़रूरत होती है. प्लेयर, मीडिया आइटम से इन्हें MediaSource.Factory का इस्तेमाल करके बनाता है.

डिफ़ॉल्ट रूप से प्लेयर, DefaultMediaSourceFactory का इस्तेमाल करता है. इससे, MediaSource के इन कॉन्टेंट को लागू किया जा सकता है:

DefaultMediaSourceFactory, मीडिया आइटम की प्रॉपर्टी के आधार पर ज़्यादा जटिल मीडिया सोर्स भी बना सकता है. इस बारे में ज़्यादा जानकारी मीडिया आइटम पेज पर दी गई है.

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

मीडिया सोर्स बनाने की सुविधा को पसंद के मुताबिक बनाना

प्लेयर बनाते समय, MediaSource.Factory को इंजेक्ट किया जा सकता है. उदाहरण के लिए, अगर किसी ऐप्लिकेशन को विज्ञापन डालने हैं और कैश मेमोरी को सपोर्ट करने के लिए CacheDataSource.Factory का इस्तेमाल करना है, तो CacheDataSource.Factory के किसी इंस्टेंस को इन ज़रूरतों के हिसाब से कॉन्फ़िगर किया जा सकता है. साथ ही, प्लेयर बनाने के दौरान इसे इंजेक्ट किया जा सकता है:DefaultMediaSourceFactory

Kotlin

val mediaSourceFactory: MediaSource.Factory =
  DefaultMediaSourceFactory(context)
    .setDataSourceFactory(cacheDataSourceFactory)
    .setLocalAdInsertionComponents(adsLoaderProvider, playerView)
val player = ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build()

Java

MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setDataSourceFactory(cacheDataSourceFactory)
        .setLocalAdInsertionComponents(adsLoaderProvider, /* adViewProvider= */ playerView);
ExoPlayer player =
    new ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build();

DefaultMediaSourceFactory JavaDoc में, उपलब्ध विकल्पों के बारे में ज़्यादा जानकारी दी गई है.

कस्टम MediaSource.Factory लागू करने का विकल्प भी उपलब्ध है. उदाहरण के लिए, कस्टम मीडिया सोर्स टाइप बनाने की सुविधा. फ़ैक्ट्री के createMediaSource(MediaItem) को कॉल किया जाएगा, ताकि हर मीडिया आइटम के लिए एक मीडिया सोर्स बनाया जा सके. ऐसा तब होगा, जब मीडिया आइटम को प्लेलिस्ट में जोड़ा जाएगा.

मीडिया सोर्स पर आधारित प्लेलिस्ट API

ExoPlayer इंटरफ़ेस, प्लेलिस्ट के अतिरिक्त तरीके तय करता है. ये तरीके, मीडिया आइटम के बजाय मीडिया सोर्स स्वीकार करते हैं. इससे, प्लेयर के इंटरनल MediaSource.Factory को बायपास किया जा सकता है. साथ ही, मीडिया सोर्स के इंस्टेंस को सीधे प्लेयर को पास किया जा सकता है:

Kotlin

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources)
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource)

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri))

exoPlayer.prepare()
exoPlayer.play()

Java

// Set a list of media sources as initial playlist.
exoPlayer.setMediaSources(listOfMediaSources);
// Add a single media source.
exoPlayer.addMediaSource(anotherMediaSource);

// Can be combined with the media item API.
exoPlayer.addMediaItem(/* index= */ 3, MediaItem.fromUri(videoUri));

exoPlayer.prepare();
exoPlayer.play();

मीडिया सोर्स कंपोज़िशन की बेहतर सुविधाएं

ExoPlayer, MediaSource के कई वर्शन उपलब्ध कराता है. इनकी मदद से, MediaSource के अन्य इंस्टेंस में बदलाव किया जा सकता है और उन्हें कंपोज़ किया जा सकता है. ये उस समय सबसे ज़्यादा काम आते हैं, जब कई कस्टम सेटिंग को एक साथ इस्तेमाल करना हो और सेटअप के आसान तरीकों में से कोई भी तरीका काम न कर रहा हो.

  • ClippingMediaSource: इससे मीडिया को किसी टाइमस्टैंप रेंज में काटा जा सकता है. अगर सिर्फ़ यही बदलाव करना है, तो हमारा सुझाव है कि आप MediaItem.ClippingConfiguration का इस्तेमाल करें.
  • FilteringMediaSource: यह विकल्प, उपलब्ध ट्रैक को तय किए गए टाइप के हिसाब से फ़िल्टर करता है. उदाहरण के लिए, ऑडियो और वीडियो, दोनों फ़ाइलें रखने वाली किसी फ़ाइल से सिर्फ़ वीडियो ट्रैक को दिखाना. अगर आपको सिर्फ़ यही बदलाव करना है, तो हमारा सुझाव है कि आप ट्रैक चुनने के पैरामीटर का इस्तेमाल करें.
  • MergingMediaSource: यह एक साथ चलाने के लिए, कई मीडिया सोर्स को मर्ज करता है. ज़्यादातर मामलों में, कंस्ट्रक्टर को adjustPeriodTimeOffsets और clipDurations को true पर सेट करके कॉल करने का सुझाव दिया जाता है, ताकि यह पक्का किया जा सके कि सभी सोर्स एक ही समय पर शुरू और खत्म हों. अगर यह बदलाव, साइडलोड किए गए सबटाइटल जोड़ने के लिए किया गया है, तो MediaItem.SubtitleConfiguration का इस्तेमाल करना बेहतर है.
  • ConcatenatingMediaSource2: एक के बाद एक मीडिया चलाने के लिए, कई मीडिया सोर्स को मर्ज करता है. उपयोगकर्ता को दिखने वाले मीडिया स्ट्रक्चर में सिर्फ़ एक Timeline.Window दिखता है. इसका मतलब है कि यह एक आइटम की तरह दिखता है. अगर इस बदलाव का इस्तेमाल, एक साथ कई ऐसे आइटम चलाने के लिए किया जाता है जो एक जैसे नहीं होने चाहिए, तो हमारा सुझाव है कि आप playlist API के Player.addMediaItem जैसे तरीकों का इस्तेमाल करें.
  • SilenceMediaSource: यह तय की गई अवधि के लिए साइलेंस जनरेट करता है. यह साइलेंस, ऑडियो के बीच में मौजूद ख़ाली जगहों को भरने के लिए काम आता है.
  • AdsMediaSource: यह मीडिया सोर्स को क्लाइंट-साइड विज्ञापन इंसर्ट करने की सुविधाओं के साथ बढ़ाता है. ज़्यादा जानकारी के लिए, विज्ञापन डालने से जुड़ी गाइड देखें.
  • ServerSideAdInsertionMediaSource: यह सर्वर साइड पर विज्ञापन डालने की सुविधाओं के साथ मीडिया सोर्स को बढ़ाता है. ज़्यादा जानकारी के लिए, विज्ञापन डालने से जुड़ी गाइड देखें.