प्लेलिस्ट एपीआई, MediaItem
इंस्टेंस पर आधारित है. इन्हें MediaItem.Builder
का इस्तेमाल करके आसानी से बनाया जा सकता है. प्लेयर में, MediaItem
को MediaSource.Factory
की मदद से, चलाए जा सकने वाले MediaSource
में बदला जाता है. कस्टम कॉन्फ़िगरेशन के बिना, यह कन्वर्ज़न DefaultMediaSourceFactory
की मदद से किया जाता है. यह DefaultMediaSourceFactory
, मीडिया आइटम की प्रॉपर्टी के हिसाब से जटिल मीडिया सोर्स बना सकता है. मीडिया आइटम पर सेट की जा सकने वाली कुछ प्रॉपर्टी के बारे में यहां बताया गया है.
सामान्य मीडिया आइटम
सिर्फ़ स्ट्रीम यूआरआई वाला मीडिया आइटम, fromUri
सुविधाजनक तरीके से बनाया जा सकता है:
Kotlin
val mediaItem = MediaItem.fromUri(videoUri)
Java
MediaItem mediaItem = MediaItem.fromUri(videoUri);
अन्य सभी मामलों में, MediaItem.Builder
का इस्तेमाल किया जा सकता है. नीचे दिए गए उदाहरण में, एक मीडिया आइटम को आईडी और कुछ अटैच किए गए मेटाडेटा के साथ बनाया गया है:
Kotlin
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();
प्लेलिस्ट में ट्रांज़िशन होने पर, मेटाडेटा अटैच करने से आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को अपडेट करने में मदद मिल सकती है.
इमेज
इमेज चलाने के लिए, मीडिया आइटम में अवधि की जानकारी देना ज़रूरी है. इससे यह तय होता है कि प्लेबैक के दौरान इमेज को कितनी देर तक दिखाया जाए. मोशन फ़ोटो और इमेज लोड करने वाली लाइब्रेरी (उदाहरण के लिए, Glide) के बारे में ज़्यादा जानकारी के लिए, इमेज गाइड पेज देखें.
Kotlin
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
अडैप्टिव मीडिया के लिए, स्टैंडर्ड फ़ाइल एक्सटेंशन के अलावा अन्य एक्सटेंशन
ExoPlayer, DASH, एचएलएस, और स्मूद स्ट्रीमिंग के लिए, अडैप्टिव मीडिया सोर्स उपलब्ध कराता है. अगर ऐसे अडैप्टिव मीडिया आइटम का यूआरआई, स्टैंडर्ड फ़ाइल एक्सटेंशन पर खत्म होता है, तो उससे जुड़ा मीडिया सोर्स अपने-आप बन जाता है. अगर यूआरआई का एक्सटेंशन स्टैंडर्ड नहीं है या कोई एक्सटेंशन नहीं है, तो मीडिया आइटम के टाइप को दिखाने के लिए, एमआईएम टाइप को साफ़ तौर पर सेट किया जा सकता है:
Kotlin
val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();
प्रोग्रेसिव मीडिया स्ट्रीम के लिए, MIME टाइप की ज़रूरत नहीं होती.
सुरक्षित सामग्री
सुरक्षित कॉन्टेंट के लिए, मीडिया आइटम की डीआरएम प्रॉपर्टी सेट होनी चाहिए. यूयूआईडी ज़रूरी है, बाकी सभी प्रॉपर्टी ज़रूरी नहीं हैं.
Widevine डीआरएम से सुरक्षित आइटम चलाने के लिए कॉन्फ़िगरेशन का उदाहरण, जहां लाइसेंस यूआरआई सीधे मीडिया (उदाहरण के लिए, DASH प्लेलिस्ट) में उपलब्ध नहीं है और एक से ज़्यादा सेशन की ज़रूरत है (उदाहरण के लिए, पासकोड बदलने की वजह से):
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build() ) .build()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setDrmConfiguration( new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID) .setLicenseUri(licenseUri) .setMultiSession(true) .setLicenseRequestHeaders(httpRequestHeaders) .build()) .build();
प्लेयर में, DefaultMediaSourceFactory
इन प्रॉपर्टी को DrmSessionManagerProvider
को पास करेगा, ताकि DrmSessionManager
मिल सके. इसके बाद, इसे बनाए गए MediaSource
में इंजेक्ट किया जाएगा. अपनी ज़रूरतों के हिसाब से, डीआरएम के काम करने के तरीके को ज़्यादा कस्टमाइज़ किया जा सकता है.
सबटाइटल ट्रैक अलग से लोड करना
सबटाइटल ट्रैक को साइडलोड करने के लिए, मीडिया आइटम बनाते समय MediaItem.Subtitle
इंस्टेंस जोड़े जा सकते हैं:
Kotlin
val subtitle = SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build() val mediaItem = MediaItem.Builder().setUri(videoUri).setSubtitleConfigurations(listOf(subtitle)).build()
Java
MediaItem.SubtitleConfiguration subtitle = new MediaItem.SubtitleConfiguration.Builder(subtitleUri) .setMimeType(mimeType) // The correct MIME type (required). .setLanguage(language) // The subtitle language (optional). .setSelectionFlags(selectionFlags) // Selection flags for the track (optional). .build(); MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setSubtitleConfigurations(ImmutableList.of(subtitle)) .build();
अंदरूनी तौर पर, DefaultMediaSourceFactory
हर सबटाइटल ट्रैक के लिए, कॉन्टेंट मीडिया सोर्स को SingleSampleMediaSource
के साथ जोड़ने के लिए MergingMediaSource
का इस्तेमाल करेगा. DefaultMediaSourceFactory
, एक से ज़्यादा अवधि वाले DASH के लिए, सबटाइटल को साइडलोड करने की सुविधा का इस्तेमाल नहीं करता.
मीडिया स्ट्रीम को क्लिप करना
किसी मीडिया आइटम से जुड़े कॉन्टेंट को क्लिप करने के लिए, शुरू और खत्म होने की अपनी पसंदीदा जगहें सेट करें:
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( MediaItem.ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build() ) .build()
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setClippingConfiguration( new ClippingConfiguration.Builder() .setStartPositionMs(startPositionMs) .setEndPositionMs(endPositionMs) .build()) .build();
कॉन्टेंट मीडिया सोर्स को रैप करने के लिए, DefaultMediaSourceFactory
अंदरूनी तौर पर ClippingMediaSource
का इस्तेमाल करेगा. क्लिपिंग की अन्य प्रॉपर्टी भी हैं. ज़्यादा जानकारी के लिए,
MediaItem.Builder
Javadoc देखें.
विज्ञापन इंसर्शन
विज्ञापन डालने के लिए, मीडिया आइटम के विज्ञापन टैग यूआरआई प्रॉपर्टी को सेट किया जाना चाहिए:
Kotlin
val mediaItem = MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())
Java
MediaItem mediaItem = new MediaItem.Builder() .setUri(videoUri) .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build()) .build();
अंदरूनी तौर पर, DefaultMediaSourceFactory
, कॉन्टेंट मीडिया सोर्स को AdsMediaSource
में रैप करेगा, ताकि विज्ञापन टैग के मुताबिक विज्ञापन डाले जा सकें. इसके काम करने के लिए, प्लेयर का DefaultMediaSourceFactory
भी इसी तरह कॉन्फ़िगर होना चाहिए.