Medya oynatıcı istemcileri, her nesne isteğiyle birlikte değerli bilgileri İçerik Yayınlama Ağlarına (CDN'ler) iletebilir. Bu verilerin iletilmesi, hizmet kalitesi izleme, uyarlanabilir trafik optimizasyonu ve yayınlama performansını iyileştirerek nihayetinde tüketici deneyimini iyileştirebilir.
ExoPlayer'daki uygulama, CTA-5004'te tanımlanan spesifikasyonu temel alır.
Exoplayer'da CMCD desteği
ExoPlayer'da CMCD desteği yalnızca DASH, HLS ve SmoothStreaming gibi uyarlanabilir akış biçimleri için etkinleştirilebilir.
CMCD veri anahtarları
CMCD veri anahtarları dört farklı türe ayrılır:
- CMCD-Request: Değerleri her isteğe göre değişen anahtarlar.
- CMCD-Nesnesi: Değerleri istenen nesneye göre değişen anahtarlar.
- CMCD-Status: Değerleri her istek veya nesneyle değişmeyen anahtarlar.
- CMCD-Session: Değerlerinin oturum boyunca değişmez olması beklenen anahtarlar.
Veri aktarma modları
CMCD verileri, şu iki yöntemden biri kullanılarak iletilebilir:
- Varsayılan davranış olan özel bir HTTP istek başlığı olarak.
- HTTP sorgu bağımsız değişkeni olarak.
CMCD'yi etkinleştir
CMCD'yi etkinleştirmek için CmcdConfiguration.Factory
öğesinin bir örneğini oluşturmanız ve bunu, oynatıcıyı oluştururken kullanılan MediaSource.Factory
öğesine iletmeniz gerekir. Varsayılan CmcdConfiguration.Factory
değerini kullanabilir veya belirli medya öğesi için her uyarlanabilir medya kaynağı oluşturulduğunda çağrılan kendi özel fabrikanızı sağlayabilirsiniz.
Varsayılan yapılandırma fabrikasıyla CMCD'yi etkinleştirme
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);
Özel yapılandırma fabrikasıyla CMCD'yi etkinleştirme
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 veri örnekleri
Aşağıdaki örneklerde, medya parçaları getirilirken gönderilen verilerin geçerli veri kombinasyonları gösterilmektedir:
Özel HTTP istek başlıkları olarak
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 sorgu bağımsız değişkenleri olarak
?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