Les clients utilisant le lecteur multimédia peuvent transmettre des informations précieuses à la diffusion de contenu. réseaux (CDN) avec chaque requête d'objet. La transmission de ces données peut améliorer la qualité de service la surveillance, l'optimisation adaptative du trafic et les performances de diffusion, d'améliorer l'expérience des consommateurs.
L'implémentation dans ExoPlayer est basée sur la spécification définie dans CTA-5004
Compatibilité CMCD avec Exoplayer
La prise en charge de CMCD dans ExoPlayer ne peut être activée que pour les formats de streaming adaptatifs, comme DASH, HLS et SmoothStreaming.
Clés de données CMCD
Les clés de données CMCD sont classées en quatre types distincts:
- CMCD-Request: clés dont les valeurs varient pour chaque requête.
- Objet CMCD: clés dont les valeurs varient en fonction de l'objet demandé.
- CMCD-Status: clés dont les valeurs ne varient pas avec chaque requête ou chaque objet.
- CMCD-Session: clés dont les valeurs sont censées être invariantes par rapport à la de la session.
Modes de transmission des données
Les données CMCD peuvent être transmises à l'aide de l'une des deux méthodes suivantes:
- En tant qu'en-tête de requête HTTP personnalisé, il s'agit du comportement par défaut.
- En tant qu'argument de requête HTTP.
Activer CMCD
Pour activer CMCD, vous devez créer une instance de CmcdConfiguration.Factory
.
et transmettez-le à MediaSource.Factory
, qui est utilisé lors de la création du
. Vous pouvez utiliser le CmcdConfiguration.Factory
par défaut ou fournir
votre propre fabrique personnalisée, qui est appelée chaque fois qu'une source multimédia adaptative
créé pour l'élément multimédia donné.
Activer CMCD avec la fabrique de configuration par défaut
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);
Activer CMCD avec la fabrique de configuration personnalisée
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);
Exemples de données CMCD
Ces exemples illustrent des combinaisons de données valides pour les données envoyées lors de l'extraction des fragments multimédias:
En tant qu'en-têtes de requête HTTP personnalisés
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"
En tant qu'arguments de requête 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