לקוחות של נגני מדיה יכולים להעביר מידע חשוב לרשתות להעברת תוכן (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