Ortak Medya İstemcisi Verileri (CMCD)

Medya oynatıcı istemcileri, her nesne isteğiyle İçerik Yayınlama Ağlara (CDN) değerli bilgiler iletebilir. Bu verilerin iletilmesi HK izlemeyi, uyarlanabilir trafik optimizasyonunu ve yayınlama performansını iyileştirerek tüketici deneyimini iyileştirebilir.

ExoPlayer'daki uygulama, CTA-5004'te tanımlanan spesifikasyona dayanı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ürde sınıflandırılır:

  • CMCD-İsteği: Değerleri her isteğe göre değişen anahtarlar.
  • CMCD Nesnesi: Değerleri istenen nesneye göre farklılık gösteren anahtarlar.
  • CMCD-Durum: Değerleri her istek veya nesnede farklı olmayan anahtarlar.
  • CMCD-Oturum: Değerlerinin oturum ömrü boyunca değişmez olması beklenen anahtarlar.

Veri iletme modları

CMCD verileri iki yöntemden biri kullanılarak iletilebilir:

  • Varsayılan davranış olan özel bir HTTP istek başlığı olarak.
  • HTTP sorgusu bağımsız değişkeni olarak.

CMCD'yi etkinleştirme

CMCD'yi etkinleştirmek için CmcdConfiguration.Factory ö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 bir medya öğesi için her uyarlanabilir medya kaynağı oluşturulduğunda çağrılan kendi özel fabrikanızı sağlayabilirsiniz.

CMCD'yi varsayılan yapılandırma ile etkinleştir

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);

CMCD'yi fabrika ayarlarına özel yapılandırma ile 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

Bu örnekler, medya parçalarını getirirken gönderilen geçerli veri kombinasyonlarını göstermektedir:

  • Ö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