# Getting started with CMCD on Android

Media player clients can transmit useful information to Content Delivery Networks (CDNs) with each object request. This implementation supports Common Media Client Data (CMCD) as defined in [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf), published in September 2020.

## Usage

To enable CMCD, developers can add a CMCDTransmissionMode inside a SourceDescription.

```kotlin
val typedSource = TypedSource.Builder("<HLS_STREAM_URL>")
    .cmcdTransmissionMode(CMCDTransmissionMode.HTTP_HEADER)
    .build()

val sourceDescription = SourceDescription.Builder(typedSource)
    .build()

theoPlayerView.player.source = sourceDescription
```

The preferred mode of transmission for HTTP requests is to use custom headers, but you can configure the transmission mode when creating the CMCD source. For example, to transmit via query arguments:

```kotlin
val typedSource = TypedSource.Builder("<HLS_STREAM_URL>")
    .cmcdTransmissionMode(CMCDTransmissionMode.QUERY_ARGUMENT)
    .build()

val sourceDescription = SourceDescription.Builder(typedSource)
    .build()

theoPlayerView.player.source = sourceDescription
```

## Remarks

Note that CMCD is only supported with the [Media3 integration](https://docs-preview.optiview.dolby.com/pr-861/theoplayer/v10/how-to-guides/android/media3/getting-started.md).
