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

Content Steering - Pathway Cloning with the same BASE-ID and ID #4703

Open
5 tasks done
burak-kara opened this issue Feb 27, 2025 · 5 comments
Open
5 tasks done

Content Steering - Pathway Cloning with the same BASE-ID and ID #4703

burak-kara opened this issue Feb 27, 2025 · 5 comments
Assignees
Labels
Milestone

Comments

@burak-kara
Copy link

burak-kara commented Feb 27, 2025

When the pathway cloning is applied with the same BASE-ID and ID, the player fails to select the newly synthesized (from a Pathway Clone object) BaseURL as there are multiple BaseURLs with the same serviceLocation value.

Here, assuming that using the same BASE-ID and ID aligns with the spec https://www.etsi.org/deliver/etsi_ts/103900_103999/103998/01.01.01_60/ts_103998v010101p.pdf.

Environment

Steps to reproduce
  • The player requests a DASH Steering Manifest from Steering Server.
  • Steering Server includes PATHWAY-CLONES in the DASH Steering Manifest. It uses an existing Service Location identifier for BASE-ID and ID in the Pathway Clone object. Example DASH Steering Manifest response below
{
    "VERSION": 1,
    "TTL": 300,
    "RELOAD-URI": "http://steering-server.com/dash.dscm",
    "PATHWAY-PRIORITY": [
        "cdn-a",
        "cdn-b"
    ],
    "PATHWAY-CLONES": [
        {
            "BASE-ID": "cdn-a",
            "ID": "cdn-a",
            "URI-REPLACEMENT": {
                "HOST": "content.cdn-a.com",
                "PARAMS": {
                    "param": "param"
                }
            }
        }
    ]
}
Observed behavior
  • The player applies the pathway cloning and appends the newly synthesized BaseURL to the target BaseURLs list. Then, the available BaseURL list becomes as follows
[
    {
        "url": "content.cdn-a.com",
        "serviceLocation": "cdn-a",
        ...
        "queryParams": {}
    },
    {
        "url": "content.cdn-b.com",
        "serviceLocation": "cdn-b",
        .....
        "queryParams": {}
    },
    {
        "url": "content.cdn-a.com",
        "serviceLocation": "cdn-a",
        ...
        "queryParams": {
            "param": "param"
        }
    },
]
  • Later, on
    function _findexIndexOfServiceLocation(pathwayPriority = [], baseUrls = []) {
    the player selects the first BaseURL that is extracted from the manifest, not the newly synthesized one.
  • The reason is that the player searches for the first occurrence of the elements of PATHWAY-PRIORITY list in the available BaseURLs list.
  • It matches pathway-id and serviceLocation values.
Expected behavior

It should select the newly synthesized (from a Pathway Clone object) BaseURL. For this, the player should insert the newly created BaseURL (synthesized BaseURLs) to the beginning of available BaseURLs. Possible fix on

targetBaseUrls = targetBaseUrls.concat(synthesizedBaseUrls)

synthesizedBaseUrls= synthesizedBaseUrls.concat(targetBaseUrls)

to have

[
    {
        "url": "content.cdn-a.com",
        "serviceLocation": "cdn-a",
        ...
        "queryParams": {
            "param": "param"
        }
    },
    {
        "url": "content.cdn-a.com",
        "serviceLocation": "cdn-a",
        ...
        "queryParams": {}
    },
    {
        "url": "content.cdn-b.com",
        "serviceLocation": "cdn-b",
        .....
        "queryParams": {}
    },
]

Another fix might be replacing the existing BaseURL in the targetBaseUrls with the newly synthesized one if they have the same serviceLocation.

@burak-kara burak-kara added the Bug label Feb 27, 2025
@dsilhavy
Copy link
Collaborator

I would like to check this with DASH-IF. From my understanding, you have two elements with the same serviceLocation now. As you wrote, I think the most reasonable approach would be to replace the existing BaseURL with the newly synthesized one. I want to make sure that this is standard conform, though:

  "BASE-ID": "cdn-a",
  "ID": "cdn-a",

@dsilhavy
Copy link
Collaborator

@burak-kara Do you have a reference stream with PATHWAY-CLONES to reproduce the behavior. For the sample stream you pasted above, I don't get any PATHWAY-CLONES.

I think there is also an issue in dash.js with PATHWAY-CLONES and VoD content in general. The available BaseURLs are only updated after a manifest refresh, but not after a new response from the steering server. This means the approach described above would work one time if queryBeforeStart is set to true. For subsequent updates from the steering server the new synthesized elements will probably be missing. Need to validate this with a teststream. If this is confirmed, we can also fix this as part of this PR/issue.

@dsilhavy dsilhavy added this to the 5.0.1 milestone Feb 28, 2025
@dsilhavy dsilhavy self-assigned this Feb 28, 2025
@burak-kara
Copy link
Author

Hi @dsilhavy , unfortunately, I don't have a public content steering server deployment that applies the pathway cloning. Sorry for the inconvenience.

I will try to expose a public endpoint so we can validate, but this may take a week or so. In the meantime, I am also testing this with a live profile.

@dsilhavy
Copy link
Collaborator

@burak-kara Thanks. I will try to set up a local teststream for validation. Can you please check against #4706. I haven't merged this PR yet, but it should address the two issues you and I described above.

@burak-kara
Copy link
Author

Hi @dsilhavy , thank you! LGTM

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

2 participants