Los clientes de reproductores multimedia pueden transmitir información valiosa a las redes de distribución de contenidos (CDN) con cada solicitud de objeto. La transmisión de esos datos puede mejorar la supervisión de la QoS, la optimización del tráfico adaptable y el rendimiento de la entrega, lo que, en última instancia, mejora la experiencia del consumidor.
La implementación en ExoPlayer se basa en la especificación definida en CTA-5004.
Compatibilidad con CMCD en Exoplayer
La compatibilidad de CMCD en ExoPlayer solo se puede habilitar para formatos de transmisión adaptables, como DASH, HLS y SmoothStreaming.
Claves de datos de CMCD
Las claves de datos de CMCD se clasifican en cuatro tipos distintos:
- CMCD-Request: Son las claves cuyos valores varían con cada solicitud.
- CMCD-Object: Claves cuyos valores varían con el objeto que se solicita.
- CMCD-Status: Claves cuyos valores no varían con cada solicitud o cada objeto.
- CMCD-Session: Claves cuyos valores se espera que sean invariantes durante la duración de la sesión.
Modos de transmisión de datos
Los datos CMCD se pueden transmitir usando uno de dos métodos:
- Como un encabezado de solicitud HTTP personalizado, que es el comportamiento predeterminado.
- Como un argumento de consulta HTTP.
Habilita CMCD
Para habilitar CMCD, debes crear una instancia de CmcdConfiguration.Factory
y pasarla a MediaSource.Factory
, que se usa cuando se compila el reproductor. Puedes usar el CmcdConfiguration.Factory
predeterminado o proporcionar tu propia fábrica personalizada, a la que se llama cada vez que se crea una fuente multimedia adaptable para el elemento multimedia determinado.
Habilitar CMCD con la configuración de fábrica predeterminada
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);
Habilita CMCD con una fábrica de configuración personalizada
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);
Ejemplos de datos de CMCD
En los siguientes ejemplos, se muestran combinaciones de datos válidas de datos enviados cuando se recuperan fragmentos de contenido multimedia:
Como encabezados de solicitud HTTP personalizados
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"
Como argumentos de consulta 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