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