נתוני לקוחות מדיה נפוצים (CMCD)

לקוחות של נגני מדיה יכולים להעביר מידע חשוב לכלי להעברת תוכן רשתות (CDN) עם כל בקשה לאובייקט. העברת הנתונים האלה יכולה לשפר את QoS מעקב, אופטימיזציה של תנועה דינמית וביצועי הצגת מודעות, בסופו של דבר שיפור חוויית הצרכן.

ההטמעה ב-ExoPlayer מבוססת על המפרט שמוגדר ב-CTA-5004.

תמיכה ב-CMCD ב-Exoplayer

אפשר להפעיל תמיכה ב-CMCD ב-ExoPlayer רק לפורמטים מותאמים של סטרימינג. כמו DASH , HLS ו-SmoothStreaming.

מפתחות נתונים של CMCD

מפתחות הנתונים של CMCD מסווגים לארבעה סוגים נפרדים:

  • CMCD-Request: מפתחות שהערכים שלהם משתנים בהתאם לבקשה.
  • CMCD-Object: מפתחות שהערכים שלהם משתנים בהתאם לאובייקט המבוקש.
  • CMCD-Status: מפתחות שהערכים שלהם לא משתנים בכל בקשה או אובייקט.
  • CMCD-Session: מפתחות שהערכים שלהם צפויים להיות לא-משתנים לאורך כל משך החיים של הסשן.

המצבים של העברת הנתונים

ניתן להעביר נתוני CMCD באחת משתי השיטות הבאות:

  • ככותרת בקשת HTTP בהתאמה אישית, שהוא התנהגות ברירת המחדל.
  • כארגומנט של שאילתת HTTP.

הפעלת CMCD

כדי להפעיל CMCD, צריך ליצור מופע של CmcdConfiguration.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);

הפעלת CMCD באמצעות מפעל הגדרות בהתאמה אישית

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

הדוגמאות הבאות ממחישות שילובים חוקיים של נתונים שנשלחים בעת אחזור מקטעי מדיה:

  • ככותרות מותאמות אישית של בקשת HTTP

       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"
    
  • כארגומנטים של שאילתות HTTP

       ?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