کلاینت های پخش کننده رسانه می توانند با هر درخواست شی اطلاعات ارزشمندی را به شبکه های تحویل محتوا (CDN) منتقل کنند. انتقال این داده ها می تواند نظارت QoS، بهینه سازی ترافیک تطبیقی و عملکرد تحویل را بهبود بخشد و در نهایت تجربه مصرف کننده را افزایش دهد.
پیاده سازی در 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 را با تنظیمات کارخانه پیش فرض فعال کنید
کاتلین
// 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