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