يمكن لبرامج مشغّل الوسائط إرسال معلومات قيّمة إلى شبكات توصيل المحتوى (CDN) مع كل طلب كائن. يمكن أن يؤدي نقل هذه البيانات إلى تحسين مراقبة جودة الخدمة وتحسين حركة البيانات التكيّفي وأداء التسليم، ما يؤدي في النهاية إلى تحسين تجربة المستهلك.
يستند التنفيذ في 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