मीडिया आइटम

प्लेलिस्ट एपीआई, MediaItem इंस्टेंस पर आधारित है. इन्हें MediaItem.Builder का इस्तेमाल करके आसानी से बनाया जा सकता है. प्लेयर में, MediaItem को MediaSource.Factory की मदद से, चलाए जा सकने वाले MediaSource में बदला जाता है. कस्टम कॉन्फ़िगरेशन के बिना, यह कन्वर्ज़न DefaultMediaSourceFactory की मदद से किया जाता है. यह DefaultMediaSourceFactory, मीडिया आइटम की प्रॉपर्टी के हिसाब से जटिल मीडिया सोर्स बना सकता है. मीडिया आइटम पर सेट की जा सकने वाली कुछ प्रॉपर्टी के बारे में यहां बताया गया है.

सामान्य मीडिया आइटम

सिर्फ़ स्ट्रीम यूआरआई वाला मीडिया आइटम, fromUri सुविधाजनक तरीके से बनाया जा सकता है:

KotlinJava
val mediaItem = MediaItem.fromUri(videoUri)
MediaItem mediaItem = MediaItem.fromUri(videoUri);

अन्य सभी मामलों में, MediaItem.Builder का इस्तेमाल किया जा सकता है. नीचे दिए गए उदाहरण में, एक मीडिया आइटम को आईडी और कुछ अटैच किए गए मेटाडेटा के साथ बनाया गया है:

KotlinJava
val mediaItem = MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build()
MediaItem mediaItem =
    new MediaItem.Builder().setMediaId(mediaId).setTag(myAppData).setUri(videoUri).build();

प्लेलिस्ट में ट्रांज़िशन होने पर, मेटाडेटा अटैच करने से आपके ऐप्लिकेशन के यूज़र इंटरफ़ेस (यूआई) को अपडेट करने में मदद मिल सकती है.

इमेज

इमेज चलाने के लिए, मीडिया आइटम में अवधि की जानकारी देना ज़रूरी है. इससे यह तय होता है कि प्लेबैक के दौरान इमेज को कितनी देर तक दिखाया जाए. मोशन फ़ोटो और इमेज लोड करने वाली लाइब्रेरी (उदाहरण के लिए, Glide) के बारे में ज़्यादा जानकारी के लिए, इमेज गाइड पेज देखें.

KotlinJava
val mediaItem = MediaItem.Builder().setUri(imageUri).setImageDurationMs(3000).build()
MediaItem mediaItem =
    new MediaItem.Builder().setUri(imageUri).setImageDurationMs(3_000).build();

अडैप्टिव मीडिया के लिए, स्टैंडर्ड फ़ाइल एक्सटेंशन के अलावा अन्य एक्सटेंशन

ExoPlayer, DASH, एचएलएस, और स्मूद स्ट्रीमिंग के लिए, अडैप्टिव मीडिया सोर्स उपलब्ध कराता है. अगर ऐसे अडैप्टिव मीडिया आइटम का यूआरआई, स्टैंडर्ड फ़ाइल एक्सटेंशन पर खत्म होता है, तो उससे जुड़ा मीडिया सोर्स अपने-आप बन जाता है. अगर यूआरआई का एक्सटेंशन स्टैंडर्ड नहीं है या कोई एक्सटेंशन नहीं है, तो मीडिया आइटम के टाइप को दिखाने के लिए, एमआईएम टाइप को साफ़ तौर पर सेट किया जा सकता है:

KotlinJava
val mediaItem = MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build()
MediaItem mediaItem =
    new MediaItem.Builder().setUri(hlsUri).setMimeType(MimeTypes.APPLICATION_M3U8).build();

प्रोग्रेसिव मीडिया स्ट्रीम के लिए, MIME टाइप की ज़रूरत नहीं होती.

सुरक्षित सामग्री

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

Widevine डीआरएम से सुरक्षित आइटम चलाने के लिए कॉन्फ़िगरेशन का उदाहरण, जहां लाइसेंस यूआरआई सीधे मीडिया (उदाहरण के लिए, DASH प्लेलिस्ट) में उपलब्ध नहीं है और एक से ज़्यादा सेशन की ज़रूरत है (उदाहरण के लिए, पासकोड बदलने की वजह से):

KotlinJava
val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setDrmConfiguration(
      MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
        .setLicenseUri(licenseUri)
        .setMultiSession(true)
        .setLicenseRequestHeaders(httpRequestHeaders)
        .build()
    )
    .build()
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 इंस्टेंस जोड़े जा सकते हैं:

KotlinJava
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()
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 के लिए, सबटाइटल को साइडलोड करने की सुविधा का इस्तेमाल नहीं करता.

मीडिया स्ट्रीम को क्लिप करना

किसी मीडिया आइटम से जुड़े कॉन्टेंट को क्लिप करने के लिए, शुरू और खत्म होने की अपनी पसंदीदा जगहें सेट करें:

KotlinJava
val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setClippingConfiguration(
      MediaItem.ClippingConfiguration.Builder()
        .setStartPositionMs(startPositionMs)
        .setEndPositionMs(endPositionMs)
        .build()
    )
    .build()
MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setClippingConfiguration(
            new ClippingConfiguration.Builder()
                .setStartPositionMs(startPositionMs)
                .setEndPositionMs(endPositionMs)
                .build())
        .build();

कॉन्टेंट मीडिया सोर्स को रैप करने के लिए, DefaultMediaSourceFactory अंदरूनी तौर पर ClippingMediaSource का इस्तेमाल करेगा. क्लिपिंग की अन्य प्रॉपर्टी भी हैं. ज़्यादा जानकारी के लिए, MediaItem.Builder Javadoc देखें.

विज्ञापन इंसर्शन

विज्ञापन डालने के लिए, मीडिया आइटम के विज्ञापन टैग यूआरआई प्रॉपर्टी को सेट किया जाना चाहिए:

KotlinJava
val mediaItem =
  MediaItem.Builder()
    .setUri(videoUri)
    .setAdsConfiguration(MediaItem.AdsConfiguration.Builder(adTagUri).build())
MediaItem mediaItem =
    new MediaItem.Builder()
        .setUri(videoUri)
        .setAdsConfiguration(new MediaItem.AdsConfiguration.Builder(adTagUri).build())
        .build();

अंदरूनी तौर पर, DefaultMediaSourceFactory, कॉन्टेंट मीडिया सोर्स को AdsMediaSource में रैप करेगा, ताकि विज्ञापन टैग के मुताबिक विज्ञापन डाले जा सकें. इसके काम करने के लिए, प्लेयर का DefaultMediaSourceFactory भी इसी तरह कॉन्फ़िगर होना चाहिए.