Data Klien Media Umum (CMCD)

Klien pemutar media dapat mengirimkan informasi berharga ke Pengiriman Konten Jaringan (CDN) dengan setiap permintaan objek. Mengirimkan data tersebut dapat meningkatkan pemantauan QoS, pengoptimalan traffic adaptif, dan performa pengiriman, yang pada akhirnya meningkatkan pengalaman konsumen.

Implementasi di ExoPlayer didasarkan pada spesifikasi yang ditentukan dalam CTA-5004.

Dukungan CMCD di Exoplayer

Dukungan CMCD di ExoPlayer hanya dapat diaktifkan untuk format streaming adaptif, seperti DASH, HLS, dan SmoothStreaming.

Kunci data CMCD

Kunci data CMCD diklasifikasikan menjadi empat jenis yang berbeda:

  • CMCD-Request: kunci yang nilainya bervariasi dengan setiap permintaan.
  • CMCD-Object: kunci yang nilainya bervariasi dengan objek yang diminta.
  • CMCD-Status: kunci yang nilainya tidak bervariasi untuk setiap permintaan atau objek.
  • CMCD-Session: kunci yang nilainya diharapkan berbeda dari usia sesi.

Mode transmisi data

Data CMCD dapat dikirim menggunakan salah satu dari dua metode berikut:

  • Sebagai header permintaan HTTP kustom, yang merupakan perilaku default.
  • Sebagai argumen kueri HTTP.

Aktifkan CMCD

Untuk mengaktifkan CMCD, Anda perlu membuat instance CmcdConfiguration.Factory dan meneruskannya ke MediaSource.Factory yang digunakan saat mem-build pemutar. Anda dapat menggunakan CmcdConfiguration.Factory default atau menyediakan factory kustom Anda sendiri yang dipanggil setiap kali sumber media adaptif yang dibuat untuk item media tertentu.

Mengaktifkan CMCD dengan factory konfigurasi default

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

Mengaktifkan CMCD dengan factory konfigurasi kustom

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

Contoh data CMCD

Contoh ini menggambarkan kombinasi data yang valid dari data yang dikirim saat pengambilan potongan media:

  • Sebagai header permintaan HTTP kustom

       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"
    
  • Sebagai argumen kueri 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