I client di media player possono trasmettere informazioni preziose a Importazione dei contenuti Reti (CDN) con ogni richiesta di oggetto. La trasmissione di questi dati può migliorare la QoS il monitoraggio, l'ottimizzazione adattiva del traffico e le prestazioni di pubblicazione, migliorando l'esperienza del consumatore.
L'implementazione in ExoPlayer si basa sulle specifiche definite in Invito all'azione-5004.
Supporto di CMCD in Exoplayer
Il supporto CMCD in ExoPlayer può essere abilitato solo per i formati di streaming adattivi, come DASH, HLS e Streaming fluido.
Chiavi di dati CMCD
Le chiavi dei dati CMCD sono classificate in quattro tipi distinti:
- CMCD-Request: chiavi i cui valori variano a seconda della richiesta.
- CMCD-Object: chiavi i cui valori variano a seconda dell'oggetto richiesto.
- CMCD-Status: chiavi i cui valori non variano con ogni richiesta o oggetto.
- CMCD-Session: chiavi i cui valori dovrebbero essere invariati rispetto alla durante la vita della sessione.
Modalità di trasmissione dei dati
I dati CMCD possono essere trasmessi utilizzando uno dei due metodi:
- Come intestazione della richiesta HTTP personalizzata, che è il comportamento predefinito.
- Come argomento di query HTTP.
Abilita CMCD
Per abilitare CMCD, devi creare un'istanza di CmcdConfiguration.Factory
e la passiamo alla MediaSource.Factory
, che viene utilizzata per la creazione
un player. Puoi utilizzare il valore predefinito CmcdConfiguration.Factory
o fornire
personalizzata, che viene chiamata ogni volta che viene
creato per l'elemento multimediale
in questione.
Attiva CMCD con configurazione predefinita di fabbrica
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);
Attiva CMCD con configurazione di fabbrica personalizzata
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);
Esempi di dati CMCD
Questi esempi illustrano combinazioni di dati valide inviate durante il recupero blocchi multimediali:
Come intestazioni di richieste HTTP personalizzate.
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"
Come argomenti della query 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