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

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

ExoPlayer में, सीटीए-5004 में बताई गई शर्तों के मुताबिक इसे लागू किया गया है.

Exoplayer में CMCD की सुविधा

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

CMCD डेटा कुंजियां

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

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

डेटा ट्रांसफ़र करने के तरीके

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

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

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

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

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

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