playlist API MediaItem
इंस्टेंस पर आधारित है, जिसे आसानी से बनाया जा सकता है
MediaItem.Builder
का इस्तेमाल करके. प्लेयर के अंदर, MediaItem
को
MediaSource.Factory
का बनाया हुआ MediaSource
. इसके बिना
कस्टम कॉन्फ़िगरेशन,
यह रूपांतरण एक 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();
मेटाडेटा अटैच करना इनके लिए उपयोगी हो सकता है अपने ऐप्लिकेशन का यूज़र इंटरफ़ेस (यूआई) अपडेट करना दिखाई देता है.
इमेज
इमेज चलाने के लिए मीडिया आइटम में एक अवधि होना ज़रूरी है, ताकि यह बताया जा सके कि वीडियो कितनी देर तक चलेगा प्लेबैक के दौरान इमेज दिखाई जानी चाहिए. ज़्यादा जानकारी के लिए, इमेज गाइड के पेज पर, मोशन फ़ोटो और इमेज लोडिंग लाइब्रेरी (उदाहरण के लिए, ग्लाइड).
Kotlin
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
Java
MediaItem mediaItem = new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();
अडैप्टिव मीडिया के लिए नॉन-स्टैंडर्ड फ़ाइल एक्सटेंशन
ExoPlayer, DASH, HLS, और एचएलएस के लिए अडैप्टिव मीडिया सोर्स स्मूदस्ट्रीमिंग. अगर अडैप्टिव मीडिया आइटम का यूआरआई किसी स्टैंडर्ड पर खत्म होता है तो उससे जुड़ा मीडिया सोर्स अपने-आप बन जाता है. अगर यूआरआई में नॉन-स्टैंडर्ड एक्सटेंशन है या कोई एक्सटेंशन नहीं है, तो 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 DRM से सुरक्षित किए गए आइटम को चलाने के लिए उदाहरण कॉन्फ़िगरेशन, जहां लाइसेंस यूआरआई सीधे मीडिया (उदाहरण के लिए, 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
इन कामों के लिए MergingMediaSource
का इस्तेमाल करेगा
हर एक के लिए एक SingleSampleMediaSource
के साथ कॉन्टेंट मीडिया सोर्स को जोड़ें
सबटाइटल ट्रैक को बेहतर बनाने में मदद मिलती है. 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
भी होना चाहिए
इसके हिसाब से कॉन्फ़िगर किया गया है.