Skip to content
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: UrlQueryInfo and ExtUrlQueryInfo support #4578

Merged
merged 10 commits into from
Oct 30, 2024

Conversation

JoaquinBCh
Copy link
Contributor

@JoaquinBCh JoaquinBCh commented Sep 27, 2024

This PR implements UrlQueryInfo and ExtUrlQueryInfo

Summary

  • Implement includeInRequests and sameOriginOnly for ExtUrlQueryInfo
  • Implement useMPDUrlQuery and queryString for UrlQueryInfo and ExtUrlQueryInfo
  • Add support for urn:mpeg:dash:urlparam:2014 scheme in the manifest
  • Generate finalQueryStrings when a manifest update is triggered
  • Append finalQueryString to the request url in HTTPLoader
  • Create unit tests to validate useMPDUrlQuery, queryString, includeInRequests and sameOriginOnly
  • includeInRequest supported: segment, mpd, mpdpatch and steering

Assumptions

  • The initialQueryString is used to build the list of parameters added to the request, not the finalQueryString. The queryTemplate is not used for the initialQueryString, so it is not considered.
  • For mpd and mpdpatch requests, we return the query string from the properties configured at the manifest level. Properties configured at the Period, AdaptationSet, or Representation levels are not considered.
  • There is no distinction between mpd and mpdpatch when deciding whether to return a query string or not; both types of requests are treated the same.
  • For Media Segments or Initialization Segment requests, all properties configured up to the specific Representation level (manifest, period, adaptation set, and representation) are considered. Properties configured in periods or adaptation sets not related to the representation being requested are not considered.

Testing

Manifests with different UrlQuery configurations for testing:

  • UseMPDUrlQuery
    • The property is added in the video AdaptationSet, and the query parameters present in the manifest request are replicated because useMPDUrlQuery="true".
  • QueryString
    • A query string is added for the video AdaptationSet and in the 1080p Representation.
  • UseMPDUrlQuery and QueryString
    • UseMPDUrlQuery is set to true in the AdaptationSet, and a query string is configured for the video. Therefore, the query parameters from the AdaptationSet are replicated, and those defined in the query string are added.
  • IncludeInRequests segment
    • useMPDUrlQuery="true" in the video AdaptationSet, and includeInRequests is set to segment. The requests sent in the manifest are only added to segment requests.
  • IncludeInRequests mpd mpdpatch
    • useMPDUrlQuery="true" in the video AdaptationSet, and includeInRequests is set to mpd and mpdpatch. The requests sent in the manifest are only added to mpd or mpdpatch requests.
  • SameOriginOnly different origin
    • useMPDUrlQuery="true" and sameOriginOnly="true" in the video AdaptationSet. The origins of the subsequent requests are different from the manifest request, so the query parameters should not be added.
  • SameOriginOnly same origin
    • useMPDUrlQuery="true" and sameOriginOnly="true" in the video AdaptationSet. The origins of the subsequent requests are the same as the manifest request, so the query parameters should be added.
  • AdaptationSet and Repressentation
    • AdaptationSet and Representation with different queryStrings for the same query parameter. Duplicate query parameters are not added; instead, the query parameters from the Representation are used where they are configured.
  • Query params in Content Steering
    • includeInRequest configured to steering.

A sample page has been created to test all the listed manifests and view the requests made by the player. You can access it here:
Sample Page for URL Query Info Testing

@dsilhavy
Copy link
Collaborator

@JoaquinBCh : Thanks for the PR i added my review. In addition:

  • IncludeInRequests mpd mpdpatch does not seem to work correctly. I see query parameters being appended to media segment requests
  • @ZmGorynych: The reference content uses urn:mpeg:dash:urlparam:2014 instead of urn:mpeg:dash:schema:urlparam:2016 for up:ExtUrlQueryInfo. This does not seem to be specification compliant. @JoaquinBCh The urn:mpeg:dash:schema:urlparam:2016 needs to be added to the implementation as well.

@dsilhavy
Copy link
Collaborator

One more thing: Please add the sample page you implemented to the sample section in the advanced category: https://reference.dashif.org/dash.js/nightly/samples/

@JoaquinBCh JoaquinBCh requested a review from dsilhavy October 8, 2024 19:53
Copy link
Collaborator

@dsilhavy dsilhavy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Additional comments:

@dsilhavy
Copy link
Collaborator

Discussion in the dash.js call on 15th October:

The logic for supporting templates with $query:<param>$ is not in place yet. We decided to filter query parameters if such a template is defined instead of reporting undesired parameters. An example is provided in the comment above: #4578 (review)

@JoaquinBCh JoaquinBCh requested a review from dsilhavy October 17, 2024 14:32
@dsilhavy dsilhavy merged commit fdf3308 into Dash-Industry-Forum:development Oct 30, 2024
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Development

Successfully merging this pull request may close these issues.

3 participants