يمكن لعملاء مشغّلات الوسائط نقل معلومات قيّمة إلى شبكات توصيل المحتوى (CDN) مع كل طلب عنصر. يمكن أن يؤدي نقل هذه البيانات إلى تحسين مراقبة جودة الخدمة (QoS)، والتحسين التكيّفي لعدد الزيارات، وأداء التسليم، ما يؤدي في النهاية إلى تحسين تجربة المستهلك.
ويستند التنفيذ في ExoPlayer إلى المواصفات المحدّدة في CTA-5004.
دعم CMCD في Exoمشغّل
ولا يمكن إتاحة استخدام CMCD في ExoPlayer إلا لتنسيقات البث التكيّفية، مثل DASH وHLS وSmoothStreaming.
مفاتيح بيانات CMCD
يتم تصنيف مفاتيح بيانات CMCD إلى أربعة أنواع مختلفة:
- CMCD-Request: المفاتيح التي تختلف قيمها باختلاف كل طلب.
- CMCD-Object: المفاتيح التي تختلف قيمها عن العنصر المطلوب.
- حالة CMCD: المفاتيح التي لا تختلف قيمها في كل طلب أو عنصر.
- 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