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

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

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

תמיכה ב-CMCD ב-Expo Player

אפשר להפעיל תמיכה ב-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