Los clientes de reproductores multimedia pueden transmitir información valiosa a Publicación de contenido redes (CDN) con cada solicitud de objeto. Transmitir esos datos puede mejorar la QoS la optimización del tráfico adaptable y el rendimiento de entrega, y mejorar 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: Claves cuyos valores varían con cada solicitud.
- CMCD-Object: Claves cuyos valores varían según el objeto que se solicita.
- Estado de CMCD: Claves cuyos valores no varían con cada objeto o solicitud.
- Sesión de CMCD: Claves cuyos valores se espera que no varían con respecto al la duración 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.
Habilitar CMCD
Para habilitar CMCD, debes crear una instancia de CmcdConfiguration.Factory
y pásalo al MediaSource.Factory
, que se usa al crear la
de fútbol favorito. Puedes usar el CmcdConfiguration.Factory
predeterminado o proporcionar
tu propia fábrica personalizada, a la que se llama cada vez que se crea
para el elemento multimedia determinado.
Habilita 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);
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
Estos ejemplos ilustran combinaciones de datos válidas que se envían cuando se recuperan datos bloques de medios:
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