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