I client dei lettori multimediali possono trasmettere informazioni preziose alle reti di distribuzione dei contenuti (CDN) con ogni richiesta di oggetto. La trasmissione di questi dati può migliorare il monitoraggio della QoS, l'ottimizzazione del traffico adattivo e il rendimento del caricamento, migliorando al contempo l'esperienza dei consumatori.
L'implementazione in ExoPlayer si basa sulla specifica definita in CTA-5004.
Supporto di CMCD in Exoplayer
Il supporto di CMCD in ExoPlayer può essere attivato solo per i formati di streaming adattivo, come DASH, HLS e SmoothStreaming.
Chiavi di dati CMCD
Le chiavi di 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 in base all'oggetto richiesto.
- CMCD-Status: chiavi i cui valori non variano con ogni richiesta o oggetto.
- CMCD-Session: chiavi i cui valori dovrebbero essere invariati per tutta la durata 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 attivare CMCD, devi creare un'istanza di CmcdConfiguration.Factory
e passarla a MediaSource.Factory
, che viene utilizzato durante la creazione del
player. Puoi utilizzare il valore predefinito CmcdConfiguration.Factory
o fornire la tua fabbrica personalizzata che viene richiamata ogni volta che viene creata un'origine multimediale adattiva per l'elemento multimediale specificato.
Attivare CMCD con la configurazione predefinita di fabbrica
// Create media source factory and set default cmcdConfigurationFactory.
val mediaSourceFactory =
DefaultMediaSourceFactory(context)
.setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT)
// Create media source factory and set default cmcdConfigurationFactory.
MediaSource.Factory mediaSourceFactory =
new DefaultMediaSourceFactory(context)
.setCmcdConfigurationFactory(CmcdConfiguration.Factory.DEFAULT);
Attivare CMCD con una factory di configurazione personalizzata
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)
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 validi inviati durante il recupero di chunk 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