I client media player possono trasmettere informazioni preziose alle reti CDN (Content Delivery Network) con ogni richiesta di oggetto. La trasmissione di questi dati può migliorare il monitoraggio del QoS, l'ottimizzazione del traffico adattiva e le prestazioni di distribuzione, migliorando in ultima analisi l'esperienza del consumatore.
L'implementazione in ExoPlayer si basa sulla specifica definita in CTA-5004.
Supporto di CMCD in Exoplayer
Il supporto CMCD in ExoPlayer può essere attivato solo per i formati di streaming adattivi, come DASH, HLS e UniformStreaming.
Chiavi dati CMCD
Le chiavi dati CMCD sono classificate in quattro tipi distinti:
- CMCD-Request: chiavi i cui valori variano a seconda della richiesta.
- Oggetto CMCD: chiavi i cui valori variano in base all'oggetto richiesto.
- CMCD-Status: chiavi i cui valori non variano a ogni richiesta o oggetto.
- CMCD-Session: chiavi i cui valori dovrebbero essere invarianti per la durata della sessione.
Modalità di trasmissione dei dati
I dati CMCD possono essere trasmessi utilizzando uno dei due metodi seguenti:
- Come intestazione della richiesta HTTP personalizzata, che è il comportamento predefinito.
- Come argomento di query HTTP.
Attiva CMCD
Per abilitare CMCD, devi creare un'istanza di CmcdConfiguration.Factory
e passarla a MediaSource.Factory
, che viene utilizzata durante la creazione del
player. Puoi utilizzare il valore predefinito CmcdConfiguration.Factory
o fornire il tuo spazio di fabbrica personalizzato, che viene richiamato ogni volta che viene creata un'origine multimediale adattiva 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 personalizzata di fabbrica
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
I seguenti esempi illustrano combinazioni di dati valide dei dati inviati durante il recupero dei blocchi di contenuti 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 di 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