मीडिया आइटम

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 भी होना चाहिए इसके हिसाब से कॉन्फ़िगर किया गया है.