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
Feature/cmcd settings from mpd and steering report #4426
Feature/cmcd settings from mpd and steering report #4426
Conversation
Update development branch with the latest from dash.js
…dp over the player settings but when applyCMCDParameters is false, player settings will be used
Send cmcd data to content steering server
…ata-reporting-filters
Feature/data reporting filters
feature/include-in-request-filter
Update tests with latest changes for cmcd reporting data
…nit-test-for-manifest-cmcd-data
…:qualabs/dash.js into feature/unit-test-for-manifest-cmcd-data
@matiasrb97 Thank you very much for your work on this. I added some review comments and some additional comments and questions below. I am discussing them with the authors on Slack but posting here as well:
|
Some things I forgot:
|
Yes.
Multiple should be allowed. You can report different keys to different endpoints. Imagine only sending cid and sid to content steering server to let the backend correlate with what it sees from the logs.
Yes.
|
…ametersFromMpd, fix typos, change variable names and create a vo model for CMCDParameters
src/streaming/models/CmcdModel.js
Outdated
const enabledCMCDKeys = cmcdParameters.version ? cmcdParameters.keys.split(' ') : settings.get().streaming.cmcd.enabledKeys; | ||
const invalidKeys = enabledCMCDKeys.filter(k => !defaultAvailableKeys.includes(k)); | ||
|
||
if (invalidKeys.length == enabledCMCDKeys.length && enabledCMCDKeys.length > 0) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please address this
@matiasrb97 Thank you for addressing most of my comments. I did another quick review, please see the comments above. One additional item based on the feedback by @ZmGorynych : Can we add a check for the |
…me to ClientDataReportingController
… in HTTPLoader for updating url and headers according to CMCD
@dsilhavy Thanks again for your comments! I think that now I finished addressing all your comments at the moment. Please check and maybe we can resolve all the comments that are closed now (and keep the ones that need something else). Regarding the schemeId, can you please check if I understood well ? I did the change in this single commit so it's easy to revert if I missunderstood. Edit:
|
@matiasrb97 This looks all good to me. Is there anything left from your side? If not, can you please merge the changes from development one more time then I can merge your PR. |
Great, thanks! Nothing else from my side, I updated this branch with the latest from development. And regarding the hosted mpd that you asked for, here I have two links with two mpd samples that are used in the testing repository: |
This PR aims to add two features related to CMCD.
First one is CMCD session initialization and configuration through the MPD as specified in the DASH 6th draft version standard.
Second one is the ability to send CMCD data to the Content Steering server.
Summary of changes:
ClientDataReporting
andCMCDParameters
settings from mpd file following the DASH specification.serviceLocations
,adaptationSets
,includeInRequests
filters,mode
,version
,keys
, and other configurations forCMCD
specified in the DASH 6th draft version standard._getCmcdDataForSteering
for sending CMCD data to content steering server.<CMCDParameters version='1' mode='query' keys='foo bar'>
in this example foo bar are not valid values.Note:
If
applyParametersFromMpd
istrue
, the player will use theCMCD
settings from the MPD if specified, ignoring whatever the player's own settings forCMCD
.If
applyParametersFromMpd
isfalse
, the player won't use theCMCD
settings from the MPD ignoring whatever the MPD has set forCMCD
.This feature can be tested using this simple testing tool: https://github.com/qualabs/cmcd-content-steering-test-runner.
It has a set of use cases which we used for developing and testing the features implemented in this work.
List of use cases tested:
Case 1: Basic MPD Configuration. - It has a simple configuration of CMCD.
Case 2: Basic MPD Configuration with Service Locations filter.
Case 3: Enable CMCD From JS Code. - If "CMCD from JS" checkbox is false, CMCD will not be sent.
Case 4: Multiple ServiceDescription elements. - It will use the latest ServiceDescription element.
Case 5: Multiperiod MPD with ServiceDescription. - We kept this case out of scope in this work, it implies other changes not related to just cmcd.
Case 6: Setting serviceLocations & includeInRequest filters.
Case 7: Setting includeInRequests only filter.
Case 8: Setting serviceLocations & includeInRequests filters.
Case 9: includeInRequest default value.
Case 10: Keys are not defined.
Case 11: Keys parameter has some invalid key.
Case 12: Keys are defined but all the keys are not implemented.
Case 13: includeInRequests is defined but has some invalid request type.
Case 14: includeInRequests are defined but all the request types are not implemented.
Case 15: Sending CMCD data to the steering server from the last video request.
Case 16: Sending CMCD data to the steering server from the last audio request if MPD has only audio tracks.
In each case you should be able to see the CMCD sent in each request and in the bottom the MPD manifest used in the selected use case.