playlist API 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, एचएलएस, और स्मूद स्ट्रीमिंग के लिए, अडैप्टिव मीडिया सोर्स उपलब्ध कराता है. अगर ऐसे अडैप्टिव मीडिया आइटम का यूआरआई, स्टैंडर्ड फ़ाइल एक्सटेंशन पर खत्म होता है, तो उससे जुड़ा मीडिया सोर्स अपने-आप बन जाता है. अगर यूआरआई में नॉन-स्टैंडर्ड एक्सटेंशन है या कोई एक्सटेंशन नहीं है, तो MIME टाइप मीडिया आइटम का प्रकार बताने के लिए स्पष्ट रूप से सेट होना चाहिए:
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
इन प्रॉपर्टी को
DrmSessionManager
पाने के लिए DrmSessionManagerProvider
. इसके बाद,
बनाए गए 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
में अलग से लोड करने की सुविधा काम नहीं करती है
कई अवधि वाले डैश के लिए सबटाइटल.
मीडिया स्ट्रीम से क्लिप बनाना
मीडिया आइटम के बताए गए कॉन्टेंट को क्लिप करने के लिए, कस्टम शुरू और खत्म होने की पोज़िशन:
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
Java फ़ाइलें देखें.
विज्ञापन इंसर्शन
विज्ञापन डालने के लिए, मीडिया आइटम के विज्ञापन टैग यूआरआई प्रॉपर्टी को सेट किया जाना चाहिए:
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
भी होना चाहिए
इसके हिसाब से कॉन्फ़िगर किया गया है.