کلاینتهای پخشکنندههای رسانهای میتوانند اطلاعات ارزشمندی را با هر درخواست شیء به شبکههای تحویل محتوا (CDN) ارسال کنند. ارسال این دادهها میتواند نظارت بر کیفیت خدمات (QoS)، بهینهسازی تطبیقی ترافیک و عملکرد تحویل را بهبود بخشد و در نهایت تجربه مصرفکننده را بهبود بخشد.
پیادهسازی در ExoPlayer بر اساس مشخصات تعریفشده در CTA-5004 است.
پشتیبانی از CMCD در Exoplayer
پشتیبانی از CMCD در ExoPlayer فقط برای قالبهای پخش تطبیقی مانند DASH ، HLS و SmoothStreaming قابل فعالسازی است.
کلیدهای داده CMCD
کلیدهای داده CMCD به چهار نوع مجزا طبقهبندی میشوند:
- CMCD-Request : کلیدهایی که مقادیر آنها با هر درخواست تغییر میکند.
- CMCD-Object : کلیدهایی که مقادیر آنها با توجه به شیء درخواستی متفاوت است.
- CMCD-Status : کلیدهایی که مقادیر آنها با هر درخواست یا شیء تغییر نمیکند.
- CMCD-Session : کلیدهایی که انتظار میرود مقادیر آنها در طول دوره session ثابت باشد.
روشهای انتقال داده
دادههای CMCD را میتوان با استفاده از یکی از دو روش زیر منتقل کرد:
- به عنوان یک هدر درخواست HTTP سفارشی، که رفتار پیشفرض است.
- به عنوان یک آرگومان پرس و جوی HTTP.
فعال کردن CMCD
برای فعال کردن CMCD، باید یک نمونه از CmcdConfiguration.Factory ایجاد کنید و آن را به MediaSource.Factory که هنگام ساخت پخشکننده استفاده میشود، منتقل کنید. میتوانید از CmcdConfiguration.Factory پیشفرض استفاده کنید یا factory سفارشی خودتان را ایجاد کنید که هر بار که یک منبع رسانه تطبیقی برای آیتم رسانهای داده شده ایجاد میشود، فراخوانی میشود.
فعال کردن CMCD با تنظیمات پیشفرض کارخانه
کاتلین
// Create media source factory and set default cmcdConfigurationFactory. val mediaSourceFactory = DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)
جاوا
// Create media source factory and set default cmcdConfigurationFactory. MediaSource.Factory mediaSourceFactory = new DefaultMediaSourceFactory(context) .setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);
فعال کردن CMCD با پیکربندی سفارشی کارخانهای
کاتلین
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)
جاوا
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