Datos comunes de clientes multimedia (CMCD)

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