कॉमन मीडिया क्लाइंट डेटा (CMCD)

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

ExoPlayer में इसे लागू करने का तरीका, CTA-5004 में दी गई जानकारी के आधार पर तय किया जाता है.

ExoPlayer में सीएमसीडी की सुविधा

ExoPlayer में CMCD की सुविधा सिर्फ़ अडैप्टिव स्ट्रीमिंग फ़ॉर्मैट के लिए चालू की जा सकती है. जैसे, DASH, HLS, और SmoothStreaming.

सीएमसीडी डेटा कुंजियां

सीएमसीडी डेटा कुंजियों को चार अलग-अलग टाइप में बांटा गया है:

  • CMCD-Request: ऐसी कुंजियां जिनकी वैल्यू हर अनुरोध के हिसाब से अलग-अलग होती है.
  • CMCD-Object: ऐसी कुंजियां जिनकी वैल्यू, अनुरोध किए जा रहे ऑब्जेक्ट के हिसाब से अलग-अलग होती हैं.
  • CMCD-Status: ऐसी कुंजियां जिनकी वैल्यू हर अनुरोध या ऑब्जेक्ट के साथ नहीं बदलती.
  • CMCD-Session: ऐसी कुंजियां जिनकी वैल्यू, सेशन की अवधि के दौरान एक जैसी रहने की उम्मीद होती है.

डेटा ट्रांसमिट करने के तरीके

सीएमसीडी डेटा को इन दोनों में से किसी एक तरीके से ट्रांसमिट किया जा सकता है:

  • कस्टम एचटीटीपी अनुरोध के हेडर के तौर पर. यह डिफ़ॉल्ट तरीका है.
  • एचटीटीपी क्वेरी आर्ग्युमेंट के तौर पर.

सीएमसीडी चालू करना

सीएमसीडी चालू करने के लिए, आपको CmcdConfiguration.Factory का एक इंस्टेंस बनाना होगा. इसके बाद, इसे MediaSource.Factory को पास करना होगा. MediaSource.Factory का इस्तेमाल प्लेयर बनाते समय किया जाता है. आपके पास डिफ़ॉल्ट CmcdConfiguration.Factory का इस्तेमाल करने या अपनी पसंद के मुताबिक फ़ैक्ट्री उपलब्ध कराने का विकल्प होता है. इस फ़ैक्ट्री को हर बार तब कॉल किया जाता है, जब दिए गए मीडिया आइटम के लिए अडैप्टिव मीडिया सोर्स बनाया जाता है.

डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ैक्ट्री के साथ CMCD चालू करें

Kotlin

// Create media source factory and set default cmcdConfigurationFactory.
val mediaSourceFactory =
  DefaultMediaSourceFactory(context)
    .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)

Java

// Create media source factory and set default cmcdConfigurationFactory.
MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);

कस्टम कॉन्फ़िगरेशन फ़ैक्ट्री की मदद से सीएमसीडी चालू करना

Kotlin

val cmcdConfigurationFactory =
  object : CmcdConfiguration.Factory {
    override fun createCmcdConfiguration(mediaItem: MediaItem): CmcdConfiguration {
      val cmcdRequestConfig =
        object : CmcdConfiguration.RequestConfig {
          override fun isKeyAllowed(key: String): Boolean {
            return key == "br" || key == "bl"
          }

          override fun getCustomData():
            ImmutableListMultimap<@CmcdConfiguration.HeaderKey String, String> {
            return ImmutableListMultimap.of(
              CmcdConfiguration.KEY_CMCD_OBJECT,
              "key1=stringValue",
            )
          }

          override fun getRequestedMaximumThroughputKbps(throughputKbps: Int): Int {
            return 5 * throughputKbps
          }
        }

      val sessionId = UUID.randomUUID().toString()
      val contentId = UUID.randomUUID().toString()

      return CmcdConfiguration(sessionId, contentId, cmcdRequestConfig, MODE_QUERY_PARAMETER)
    }
  }

// Create media source factory and set your custom cmcdConfigurationFactory.
val mediaSourceFactory =
  DefaultMediaSourceFactory(context).setCmcdConfigurationFactory(cmcdConfigurationFactory)

Java

CmcdConfiguration.Factory cmcdConfigurationFactory =
    mediaItem -> {
      CmcdConfiguration.RequestConfig cmcdRequestConfig =
          new CmcdConfiguration.RequestConfig() {
            @Override
            public boolean isKeyAllowed(String key) {
              return key.equals("br") || key.equals("bl");
            }

            @Override
            public ImmutableListMultimap<@HeaderKey String, String> getCustomData() {
              return ImmutableListMultimap.of(
                  CmcdConfiguration.KEY_CMCD_OBJECT, "key1=stringValue");
            }

            @Override
            public int getRequestedMaximumThroughputKbps(int throughputKbps) {
              return 5 * throughputKbps;
            }
          };

      String sessionId = UUID.randomUUID().toString();
      String contentId = UUID.randomUUID().toString();

      return new CmcdConfiguration(
          sessionId, contentId, cmcdRequestConfig, MODE_QUERY_PARAMETER);
    };

// Create media source factory and set your custom cmcdConfigurationFactory.
MediaSource.Factory mediaSourceFactory =
    new DefaultMediaSourceFactory(context)
        .setCmcdConfigurationFactory(cmcdConfigurationFactory);

सीएमसीडी डेटा के उदाहरण

इन उदाहरणों में, मीडिया के हिस्सों को फ़ेच करते समय भेजे गए डेटा के मान्य कॉम्बिनेशन दिखाए गए हैं:

  • कस्टम एचटीटीपी अनुरोध हेडर के तौर पर

       CMCD-Session:sid="6e2fb550-c457-11e9-bb97-0800200c9a66"
    
       CMCD-Request:mtp=25400 CMCD-Object:br=3200,d=4004,ot=v,tb=6000
       CMCD-Status:bs,rtp=15000
       CMCD-Session:sid="6e2fb550-c457-11e9-bb97-0800200c9a66"
    
  • एचटीटीपी क्वेरी आर्ग्युमेंट के तौर पर

       ?CMCD=sid%3D%226e2fb550-c457-11e9-bb97-0800200c9a66%22
    
       ?CMCD=br%3D3200%2Cbs%2Cd%3D4004%2Cmtp%3D25400%2Cot%3Dv%2Crtp
       %3D15000%2Csid%3D%226e2fb550-c457-11e9-bb97-
       0800200c9a66%22%2Ctb%3D6000