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

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

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

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

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

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

प्लेयर बनाते समय, MediaSource.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) को कॉल किया जाएगा, ताकि प्लेलिस्ट में जोड़े गए हर मीडिया आइटम के लिए एक मीडिया सोर्स बनाया जा सके.

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

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 को 'सही' पर सेट करने की सलाह दी जाती है. इससे यह पक्का किया जाता है कि सभी सोर्स एक साथ शुरू और खत्म हों. अगर यह बदलाव, अलग से लोड किए गए सबटाइटल जोड़ने के लिए किया गया है, तो इसके बजाय MediaItem.SubtitleConfiguration का इस्तेमाल करना बेहतर होगा.
  • ConcatenatingMediaSource2: यह एक से ज़्यादा मीडिया सोर्स को मर्ज करता है, ताकि वह लगातार चल सके. उपयोगकर्ता को दिखने वाले मीडिया स्ट्रक्चर में एक Timeline.Window दिखता है. इसका मतलब है कि यह एक आइटम की तरह दिखता है. अगर यह बदलाव, एक से ज़्यादा आइटम चलाने के लिए किया गया है, जो एक जैसे नहीं दिखने चाहिए, तो Player.addMediaItem जैसे प्लेलिस्ट एपीआई के तरीकों का इस्तेमाल करना बेहतर होता है.
  • SilenceMediaSource: तय समय के लिए साइलेंस जनरेट करता है, जो खाली जगह भरने में मददगार होता है.
  • AdsMediaSource: क्लाइंट-साइड विज्ञापन इंसर्शन की क्षमताओं के साथ मीडिया सोर्स को बड़ा करता है. ज़्यादा जानकारी के लिए, विज्ञापन इंसर्शन गाइड देखें.
  • ServerSideAdInsertionMediaSource: सर्वर साइड विज्ञापन डालने की सुविधाओं के साथ मीडिया सोर्स को बड़ा करता है. ज़्यादा जानकारी के लिए, विज्ञापन इंसर्शन गाइड देखें.