Ortak Medya İstemcisi Verileri (CMCD)

Medya oynatıcı istemcileri, İçerik Yayınlama'ya değerli bilgiler iletebilir. Her nesne isteğiyle birlikte ağlar (CDN'ler). Bu verilerin aktarılması hizmet kalitesini iyileştirebilir izleme, uyarlanabilir trafik optimizasyonu ve yayınlama performansı gibi tüketici deneyimini iyileştirmeye çalışıyor.

ExoPlayer'daki uygulama, şurada tanımlanan spesifikasyona dayanır: CTA-5004.

Exoplayer'da CMCD desteği

ExoPlayer'da CMCD desteği yalnızca uyarlanabilir akış biçimleri için etkinleştirilebilir. DASH, HLS ve SmoothStreaming gibi.

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-Durumu: Değerleri her istek veya nesneyle değişmeyen anahtarlar.
  • CMCD-Oturum: Değerlerinin en iyi yöntemin ne olduğunu öğreneceğiz.

Veri iletme modları

CMCD verileri, şu 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ştir

CMCD'yi etkinleştirmek için CmcdConfiguration.Factory öğesinin bir örneğini oluşturmanız gerekir ve bunu, dosyayı oluştururken kullanılan MediaSource.Factory oynatıcı'yı seçin. Varsayılan CmcdConfiguration.Factory kullanabilir veya bir uyarlanabilir medya kaynağı her çalıştığında çağrılan kendi özel fabrikanızı otomatik olarak oluşturulur.

CMCD'yi varsayılan yapılandırma fabrikası 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 özel yapılandırma fabrikasında etkinleştir

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, getirme işlemi sırasında gönderilen verilerin geçerli veri kombinasyonlarını gösterir medya parçaları:

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