मीडिया आइटम

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