feat(android): Support Common Media Client Data (CMCD) (#4034)
* feat(VideoNativeComponent.ts): add support for cmcd configuration in VideoSrc type to enable cmcd feature on android feat(video.ts): introduce CmcdMode enum and CmcdConfiguration type to define cmcd configuration options * feat(Video.tsx): add support for CMCD configuration in Video component to handle Content Management and Delivery (CMCD) headers for Android platform. * feat(CMCDProps.kt): add CMCDProps class to handle CMCD related properties and parsing logic for React Native module * feat(CMCDConfig.kt): add CMCDConfig class to handle CMCD configuration for ExoPlayer with support for custom data and configuration options. * feat(ReactExoplayerViewManager.java): add support for CMCD configuration in ReactExoplayerViewManager to enable Content Management and Control Data (CMCD) for better video playback optimization. * feat(ReactExoplayerView.java): add support for setting CmcdConfiguration.Factory to customize CMCD configuration for media playback * feat(Source.kt): add support for CMCD properties linked to the source to enhance functionality and data handling * docs(props.mdx): add documentation for configuring CMCD parameters in the component, including usage examples and default values * refactor(ReactExoplayerViewManager.java): remove unused PROP_CMCD and prevCmcdConfig variables to clean up code and improve readability * refactor(Video.tsx): simplify cmcd configuration logic for better readability and maintainability * docs(props.mdx): improve props documentation for clarity and consistency feat(props.mdx): add definitions for CmcdMode enum and CmcdData type to enhance understanding of CMCD data structure and usage * refactor(CMCDProps.kt): refactor CMCDProps class to data class for improved readability and immutability - update CMCDProps class to use List instead of Array for properties * refactor(Video.tsx): refactor createCmcdHeader function to improve code readability and reduce duplication * fix(CMCDProps.kt): remove import statement for CmcdConfiguration * feat(ReactExoplayerView.java): add support for CMCD configuration in ReactExoplayerView component feat(ReactExoplayerViewManager.java): remove redundant CMCD configuration logic from ReactExoplayerViewManager to simplify code and improve maintainability * fix(Video.tsx): merge _cmcd memo into src memo for optimization
This commit is contained in:
@@ -1000,3 +1000,68 @@ Adjust the volume.
|
||||
- **1.0 (default)** - Play at full volume
|
||||
- **0.0** - Mute the audio
|
||||
- **Other values** - Reduce volume
|
||||
|
||||
### `cmcd`
|
||||
|
||||
<PlatformsList types={['Android']} />
|
||||
|
||||
Configure CMCD (Common Media Client Data) parameters. CMCD is a standard for conveying client-side metrics and capabilities to servers, which can help improve streaming quality and performance.
|
||||
|
||||
For detailed information about CMCD, please refer to the [CTA-5004 Final Specification](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).
|
||||
|
||||
- **false (default)** - Don't use CMCD
|
||||
- **true** - Use default CMCD configuration
|
||||
- **object** - Use custom CMCD configuration
|
||||
|
||||
When providing an object, you can configure the following properties:
|
||||
|
||||
| Property | Type | Description |
|
||||
|----------|-------------------------|----------------------------------------------------|
|
||||
| `mode` | `CmcdMode` | The mode for sending CMCD data |
|
||||
| `request` | `CmcdData` | Custom key-value pairs for the request object |
|
||||
| `session` | `CmcdData` | Custom key-value pairs for the session object |
|
||||
| `object` | `CmcdData` | Custom key-value pairs for the object metadata |
|
||||
| `status` | `CmcdData` | Custom key-value pairs for the status information |
|
||||
|
||||
Note: The `mode` property defaults to `CmcdMode.MODE_QUERY_PARAMETER` if not specified.
|
||||
|
||||
#### `CmcdMode`
|
||||
CmcdMode is an enum that defines how CMCD data should be sent:
|
||||
- `CmcdMode.MODE_REQUEST_HEADER` (0) - Send CMCD data in the HTTP request headers.
|
||||
- `CmcdMode.MODE_QUERY_PARAMETER` (1) - Send CMCD data as query parameters in the URL.
|
||||
|
||||
#### `CmcdData`
|
||||
CmcdData is a type representing custom key-value pairs for CMCD data. It's defined as:
|
||||
|
||||
```typescript
|
||||
type CmcdData = Record<`${string}-${string}`, string | number>;
|
||||
```
|
||||
|
||||
Custom key names MUST include a hyphenated prefix to prevent namespace collisions. It's recommended to use a reverse-DNS syntax for custom prefixes.
|
||||
|
||||
Example:
|
||||
|
||||
```javascript
|
||||
<Video
|
||||
source={{
|
||||
uri: 'https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8',
|
||||
cmcd: {
|
||||
mode: CmcdMode.MODE_QUERY_PARAMETER,
|
||||
request: {
|
||||
'com-custom-key': 'custom-value'
|
||||
},
|
||||
session: {
|
||||
sid: 'session-id'
|
||||
},
|
||||
object: {
|
||||
br: '3000',
|
||||
d: '4000'
|
||||
},
|
||||
status: {
|
||||
rtp: '1200'
|
||||
}
|
||||
}
|
||||
}}
|
||||
// or other video props
|
||||
/>
|
||||
```
|
Reference in New Issue
Block a user