Los clientes de reproductores multimedia pueden transmitir información valiosa a las redes de distribución de contenido (CDN) con cada solicitud de objeto. Transmitir esos datos puede mejorar la supervisión de la QoS, la optimización del tráfico adaptable y el rendimiento de la publicación, 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 con 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 claves cuyos valores varían con cada solicitud.
- CMCD-Object: Claves cuyos valores varían según el objeto que se solicita.
- CMCD-Status: Son claves cuyos valores no varían con cada solicitud o objeto.
- CMCD-Session: Claves cuyos valores se espera que no cambien durante la vida de la sesión.
Modos de transmisión de datos
Los datos de CMCD se pueden transmitir usando uno de estos 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 al 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 de medios adaptable para el elemento multimedia determinado.
Habilita CMCD con la fábrica de configuración 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);
Habilitar CMCD con la 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 estos ejemplos, se muestran combinaciones de datos válidas de los datos que se envían 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