ContentSteering promise is resolved too late for fetching of dash initialisation segment #8123
Labels
component: DASH
The issue involves the MPEG DASH manifest format
priority: P2
Smaller impact or easy workaround
type: bug
Something isn't working correctly
Milestone
Have you read the FAQ and checked for duplicate open issues?
Yes.
If the problem is related to FairPlay, have you read the tutorial?
No
What version of Shaka Player are you using?
Git Commit SHA: d5eab12
Can you reproduce the issue with our latest release version?
YEs.
Can you reproduce the issue with the latest code from
main
?Yes.
Are you using the demo app or your own custom app?
Demo App.
If custom app, can you reproduce the issue using our demo app?
Yes.
What browser and OS are you using?
Safari on MacOS, Chrome on WIndows11
For embedded devices (smart TVs, etc.), what model and firmware version are you using?
What are the manifest and license server URIs?
https://chromium.dolby.link/content_steering/manifest.mpd
What configuration are you using? What is the output of
player.getNonDefaultConfiguration()
?What did you do?
https://shaka-player-demo.appspot.com/demo/#audiolang=en-AU;textlang=en-AU;uilang=en-AU;assetBase64=eyJuYW1lIjoiIiwic2hvcnROYW1lIjoiIiwiaWNvblVyaSI6IiIsIm1hbmlmZXN0VXJpIjoiaHR0cHM6Ly9jaHJvbWl1bS5kb2xieS5saW5rL2NvbnRlbnRfc3RlZXJpbmcvbWFuaWZlc3QubXBkIiwic291cmNlIjoiQ3VzdG9tIiwiZm9jdXMiOmZhbHNlLCJkaXNhYmxlZCI6ZmFsc2UsImV4dHJhVGV4dCI6W10sImV4dHJhVGh1bWJuYWlsIjpbXSwiZXh0cmFDaGFwdGVyIjpbXSwiY2VydGlmaWNhdGVVcmkiOm51bGwsImRlc2NyaXB0aW9uIjpudWxsLCJpc0ZlYXR1cmVkIjpmYWxzZSwiZHJtIjpbIk5vIERSTSBwcm90ZWN0aW9uIl0sImZlYXR1cmVzIjpbIlZPRCJdLCJsaWNlbnNlU2VydmVycyI6eyJfX3R5cGVfXyI6Im1hcCJ9LCJvZmZsaW5lTGljZW5zZVNlcnZlcnMiOnsiX190eXBlX18iOiJtYXAifSwibGljZW5zZVJlcXVlc3RIZWFkZXJzIjp7Il9fdHlwZV9fIjoibWFwIn0sInJlcXVlc3RGaWx0ZXIiOm51bGwsInJlc3BvbnNlRmlsdGVyIjpudWxsLCJjbGVhcktleXMiOnsiX190eXBlX18iOiJtYXAifSwiZXh0cmFDb25maWciOm51bGwsImV4dHJhVWlDb25maWciOm51bGwsImFkVGFnVXJpIjpudWxsLCJpbWFWaWRlb0lkIjpudWxsLCJpbWFBc3NldEtleSI6bnVsbCwiaW1hQ29udGVudFNyY0lkIjpudWxsLCJpbWFNYW5pZmVzdFR5cGUiOm51bGwsIm1lZGlhVGFpbG9yVXJsIjpudWxsLCJtZWRpYVRhaWxvckFkc1BhcmFtcyI6bnVsbCwidXNlSU1BIjp0cnVlLCJtaW1lVHlwZSI6bnVsbH0=;panel=HOME;build=uncompiled
What did you expect to happen?
This manifest contains a ContentSteering element with an out-of-service defaultServiceLocation, but also contains queryBeforeStart=true. The expected behaviour is that the player will fetch the content-steering response and update the list of service locations and priorities before attempting to fetch the initialisation segment.
What actually happened?
The segment uris for the initialisation segment is constructed before the promise to fetch the content-steering response is resolved. So the initialisation segment is fetched from the out-of-service default service location.
Additionally, timed-out fetches are not causing re-tries on the updated service locations. To be fair, failover may work if the fetches of the initialisation segment received 4xx responses rather than no response. I didn't check.
Are you planning to send a PR to fix it?
The solution is to resolve contentSteeringPromise before passing getBaseUris to DashParser.parsePeriods_().
The text was updated successfully, but these errors were encountered: