मीडिया आइटम

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();

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

इमेज

इमेज चलाने के लिए, मीडिया आइटम में अवधि तय करना ज़रूरी है. इससे यह तय किया जा सकता है कि इमेज को प्लेबैक के दौरान कितने समय तक दिखाया जाना चाहिए. मोशन फ़ोटो और इमेज लोड करने वाली लाइब्रेरी (जैसे, 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, HLS, और SmoothStreaming के लिए अडैप्टिव मीडिया सोर्स उपलब्ध कराता है. अगर इस तरह के अडैप्टिव मीडिया आइटम का यूआरआई, स्टैंडर्ड फ़ाइल एक्सटेंशन के साथ खत्म होता है, तो उससे जुड़ा मीडिया सोर्स अपने-आप बन जाता है. अगर यूआरआई में कोई नॉन-स्टैंडर्ड एक्सटेंशन है या कोई एक्सटेंशन नहीं है, तो मीडिया आइटम के टाइप के बारे में बताने के लिए, 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 टाइप की ज़रूरत नहीं होती.

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

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

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 इन प्रॉपर्टी को DrmSessionManagerProvider को पास करेगा, ताकि DrmSessionManager मिल सके. इसके बाद, इसे बनाए गए MediaSource में इंजेक्ट किया जाता है. अपनी ज़रूरतों के हिसाब से, DRM के व्यवहार को ज़्यादा बेहतर तरीके से सेट किया जा सकता है.

सबटाइटल ट्रैक साइडलोड करना

सबटाइटल ट्रैक को साइडलोड करने के लिए, मीडिया आइटम बनाते समय MediaItem.Subtitle इंस्टेंस जोड़े जा सकते हैं:

Kotlin

val subtitle =
  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()
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 Javadoc देखें.

विज्ञापन डालना

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

Kotlin

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

Java

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

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