-
Notifications
You must be signed in to change notification settings - Fork 6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Support Common Media Client Data (CMCD) #8699
Comments
Request around opt-in API structure and API methods:
|
Any updates on CMCD support? |
From Disney Streaming, we are interested to see this support in Exo Player given the performance and other benefits we will see. Any updates on the timeline for supporting CMCD will be great. |
Starz has also been looking into CMCD for our apps. Having support in ExoPlayer would give us a much stronger business case for taking it up internally. It would be great to see this added to an upcoming release. |
At AWS we see more and more customers asking us to support CMCD at the CDN level, as this is a key enabler for content steering (aka multi-CDN switching) and QoE improvements in general. We cannot do that without the cooperation of the player ecosystem, and that's where ExoPlayer footprint becomes decisive. Thanks in advance for adding CMCD support to a future release! |
Vimeo has been activly working with CMCD data in our web playback systems and would love to see support in our mobile application video players as well. +1 to this request! |
This is still on our agenda and thanks for reiterating your interest. We'll post updates here once we have the implementation ready. |
I would like to make comments with my two different hats:
|
From FOX, we are interesting in seeing CMCD support in ExoPlayer as we believe this will be a key feature for monitoring QoE and for steering QoE improvements. We're actively engaged on enabling CMCD across other platforms in our ecosystem, would love to get an update on when ExoPlayer would offer support. |
Warner Bros Discovery. We are looking for integrating CMCD into our playback platforms. We are very pleased that Shaka Player, Dash.js, and Roku players already have rolled out CMCD support. Currently, I’m not aware of any good way of narrowing down Rebuffering cases without correlating Playback session to CDN logs/state. |
From Paramount Streaming's perspective, we are also very interested in seeing CMCD implemented for Exo. We have full support for this across all web. Our team at Paramount has implemented the CMCD spec in HLS.js and Google Shaka Player. There is also an implementation in Dash.js. So, the most popular open source projects for web have it this feature in prod today. It would be nice to have cross platform support for CMCD. Let us know if you are looking for contributors for this feature. |
Broad support for CMCD is important. If Exoplayer adds CMCD; it will stay important - we are supportive of this feature. |
+1 from Paramount's perspective, our goal is to offer a standardized data set for operations teams to troubleshoot playback issues. A subset of our players now have the rich CMCD data set which makes debugging last-mile and CDN issues more timely and enables us to get to root cause faster. It would be great if this data was provided across our native player platform stack as well. |
Datazoom has been leveraging CMCD and related mechanisms for quite some time to link player QoE + CDN cache log data for coordinate analysis. We're also leveraging it for experimentation with distributed request tracing across the streaming content delivery pipeline. This overlaps with our efforts within the Streaming Video Alliance. In general, we see CMCD as valuable observability tool that every player should seek to support. Support for CMCD in Exoplayer would be a huge step forward. |
Just repeating what I already mentioned above: We are aware that there is a wide interest in this feature and we also understand why it is important to many of you. It's definitely on our agenda and we'll update this issue with commits and comments once we have them. If you have a concrete implementation idea, we are also open to accept PRs. The request parameters can be extended in either |
Has anyone looked into https://github.com/realeyes-media/cta-wave-cmcd-lib? They said that's a reference implementation for CMCD on Exoplayer. |
This implementation looks as if it might not achieve its purpose very well at the moment as the necessary player state information is obtained with a delay to when it's used to fill the request parameters. For example, a buffer starvation or startup after seek would not show up in the relevant next request, but only one request later. This isn't really something they could have easily solved though and it nicely shows that implementing this correctly needs some integration in the player itself and can't be done from the outside. |
Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. API structure and API methods: * CMCD logging is disabled by default, use `MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)` to enable it. * All keys are enabled by default, override `CmcdConfiguration.RequestConfig.isKeyAllowed(String key)` to filter out which keys are logged. * Override `CmcdConfiguration.RequestConfig.getCustomData()` to enable custom key logging. NOTE: Only the following fields have been implemented: `br`, `bl`, `cid`, `rtp`, and `sid`. Issue: google/ExoPlayer#8699 #minor-release PiperOrigin-RevId: 539021056
Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. API structure and API methods: * CMCD logging is disabled by default, use `MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)` to enable it. * All keys are enabled by default, override `CmcdConfiguration.RequestConfig.isKeyAllowed(String key)` to filter out which keys are logged. * Override `CmcdConfiguration.RequestConfig.getCustomData()` to enable custom key logging. NOTE: Only the following fields have been implemented: `br`, `bl`, `cid`, `rtp`, and `sid`. Issue: #8699 #minor-release PiperOrigin-RevId: 539021056
Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. API structure and API methods: * CMCD logging is disabled by default, use `MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)` to enable it. * All keys are enabled by default, override `CmcdConfiguration.RequestConfig.isKeyAllowed(String key)` to filter out which keys are logged. * Override `CmcdConfiguration.RequestConfig.getCustomData()` to enable custom key logging. NOTE: Only the following fields have been implemented: `br`, `bl`, `cid`, `rtp`, and `sid`. Issue: google/ExoPlayer#8699 #minor-release PiperOrigin-RevId: 539021056 (cherry picked from commit b55ddf1)
Add support for including Common Media Client Data (CMCD) in the outgoing requests of adaptive streaming formats DASH, HLS, and SmoothStreaming. API structure and API methods: * CMCD logging is disabled by default, use `MediaSource.Factory.setCmcdConfigurationFactory(CmcdConfiguration.Factory cmcdConfigurationFactory)` to enable it. * All keys are enabled by default, override `CmcdConfiguration.RequestConfig.isKeyAllowed(String key)` to filter out which keys are logged. * Override `CmcdConfiguration.RequestConfig.getCustomData()` to enable custom key logging. NOTE: Only the following fields have been implemented: `br`, `bl`, `cid`, `rtp`, and `sid`. Issue: #8699 #minor-release PiperOrigin-RevId: 539021056 (cherry picked from commit b7e7153)
Additionally, two existing methods to `buildDataSpec` in `DashUtil` have been deprecated, while a new method has been added that allows the inclusion of `httpRequestHeaders`. Issue: google/ExoPlayer#8699 #minor-release PiperOrigin-RevId: 540594444
Instead of providing `playbackDurationUs` and `loadPositionUs` individually, which are used to calculate the buffer duration for CMCD logging, we can directly pass the pre-calculated `bufferedDurationUs` available in the `getNextChunk` method of the chunk source classes. Issue: google/ExoPlayer#8699 #minor-release PiperOrigin-RevId: 540630112
Additionally, two existing methods to `buildDataSpec` in `DashUtil` have been deprecated, while a new method has been added that allows the inclusion of `httpRequestHeaders`. Issue: #8699 #minor-release PiperOrigin-RevId: 540594444
Instead of providing `playbackDurationUs` and `loadPositionUs` individually, which are used to calculate the buffer duration for CMCD logging, we can directly pass the pre-calculated `bufferedDurationUs` available in the `getNextChunk` method of the chunk source classes. Issue: #8699 #minor-release PiperOrigin-RevId: 540630112
Instead of providing `playbackDurationUs` and `loadPositionUs` individually, which are used to calculate the buffer duration for CMCD logging, we can directly pass the pre-calculated `bufferedDurationUs` available in the `getNextChunk` method of the chunk source classes. Issue: #8699 #minor-release PiperOrigin-RevId: 540630112 (cherry picked from commit 4d1119a)
Additionally, two existing methods to `buildDataSpec` in `DashUtil` have been deprecated, while a new method has been added that allows the inclusion of `httpRequestHeaders`. Issue: google/ExoPlayer#8699 #minor-release PiperOrigin-RevId: 540594444 (cherry picked from commit 52878b2)
Instead of providing `playbackDurationUs` and `loadPositionUs` individually, which are used to calculate the buffer duration for CMCD logging, we can directly pass the pre-calculated `bufferedDurationUs` available in the `getNextChunk` method of the chunk source classes. Issue: google/ExoPlayer#8699 #minor-release PiperOrigin-RevId: 540630112 (cherry picked from commit be9b057)
Instead of providing `playbackDurationUs` and `loadPositionUs` individually, which are used to calculate the buffer duration for CMCD logging, we can directly pass the pre-calculated `bufferedDurationUs` available in the `getNextChunk` method of the chunk source classes. Issue: #8699 #minor-release PiperOrigin-RevId: 540630112 (cherry picked from commit 4d1119a)
Hi Everyone, Thank you for your patience. We have added CMCD support in ExoPlayer. Please see the doc on how to enable CMCD. Timeline of changes made:
We look forward to your feedback. Have a nice weekend! |
For those wanting to experiment without building from the |
1.2.0 has been released, incorporating support for CMCD including all fields. Kindly share your feedback regarding this integration. |
CMCD is a new standard that allows player clients to report some state to the CDN to allow the CDN to improve delivery performance (see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).
Implementing this with ExoPlayer is currently difficult as the necessary information needs to be available on the playback thread at the point where the request is generated. This issue is tracking two things:
The text was updated successfully, but these errors were encountered: