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