کلاینت های پخش کننده رسانه می توانند با هر درخواست شی اطلاعات ارزشمندی را به شبکه های تحویل محتوا (CDN) منتقل کنند. انتقال این داده ها می تواند نظارت QoS، بهینه سازی ترافیک تطبیقی و عملکرد تحویل را بهبود بخشد و در نهایت تجربه مصرف کننده را افزایش دهد.
پیاده سازی در ExoPlayer بر اساس مشخصات تعریف شده در CTA-5004 است.
پشتیبانی از CMCD در ExoPlayer فقط برای قالبهای جریان تطبیقی، مانند DASH ، HLS ، و SmoothStreaming قابل فعال است.
کلیدهای داده CMCD به چهار نوع مجزا طبقه بندی می شوند:
- CMCD-Request : کلیدهایی که مقادیر آنها با هر درخواست متفاوت است.
- CMCD-Object : کلیدهایی که مقادیر آنها با شی درخواست شده متفاوت است.
- CMCD-Status : کلیدهایی که مقادیر آنها با هر درخواست یا شی متفاوت نیست.
- CMCD-Session : کلیدهایی که انتظار می رود مقادیر آنها در طول عمر جلسه ثابت باشد.
داده های CMCD را می توان با استفاده از یکی از دو روش انتقال داد:
- به عنوان یک هدر درخواست HTTP سفارشی، که رفتار پیشفرض است.
- به عنوان یک آرگومان پرس و جوی HTTP.
برای فعال کردن CMCD، باید یک نمونه از CmcdConfiguration.Factory ایجاد کنید و آن را به MediaSource.Factory ارسال کنید که هنگام ساختن پخش کننده استفاده می شود. میتوانید از CmcdConfiguration.Factory پیشفرض استفاده کنید یا کارخانه سفارشی خود را تهیه کنید که هر بار که یک منبع رسانه تطبیقی برای آیتم رسانهای داده شده ایجاد میشود، فراخوانی میشود.
// 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);
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);
این مثالها ترکیب دادههای معتبر دادههای ارسال شده هنگام واکشی تکههای رسانه را نشان میدهند:
به عنوان هدر درخواست 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