[DASH] Add content steering support. #1403
Labels
flag: seeking PR
We are actively seeking PRs for this; we do not currently expect the core team will resolve this
type: enhancement
New feature or request
Milestone
Summary from proposal at : https://dashif.org/docs/DASH-IF-CTS-00XX-Content-Steering-Community-Review.pdf
Content distributors often use multiple Content Delivery Networks (CDNs) to distribute their content to the end-users.
They may upload a copy of their catalogue to each CDN, or more commonly have all CDNs pull the content from a
common origin. Alternate URLs are generated, one for each CDN, that point at identical content. DASH players may
access alternate URLs in the event of delivery problems. Content steering describes a deterministic capability for a
content distributor to switch the content source that a player uses either at start-up or midstream, by means of a remote
steering service. The DASH implementation of Content Steering also supports the notion of a proxy steering server
which can switch a mobile client between broadcast and unicast sources.
dash-if content steering example is at https://reference.dashif.org/dash.js/latest/samples/advanced/content-steering.html
Example MPD used above: https://www.content-steering.com/bbb/playlist_steering_cloudfront_https.mpd
POC that I worked on using shaka packager and Expoplayer is mentioned in the issue at:
Dash-Industry-Forum/Content-Steering#17
Shaka packager branch: https://github.com/sr1990/shaka-packager/tree/content_steering1
As per above branch, the following command
will create mpd that contains the following elements
Location
BaseUrls
Content Steering
Shaka packager needs to add the following
![BaseUrlAttributes](https://private-user-images.githubusercontent.com/7614211/331767607-8adf7660-2dca-4bb1-b60e-c27ef8a68009.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAwNzIxODMsIm5iZiI6MTcyMDA3MTg4MywicGF0aCI6Ii83NjE0MjExLzMzMTc2NzYwNy04YWRmNzY2MC0yZGNhLTRiYjEtYjYwZS1jMjdlZjhhNjgwMDkucG5nP1gtQW16LUFsZ29yaXRobT1BV1M0LUhNQUMtU0hBMjU2JlgtQW16LUNyZWRlbnRpYWw9QUtJQVZDT0RZTFNBNTNQUUs0WkElMkYyMDI0MDcwNCUyRnVzLWVhc3QtMSUyRnMzJTJGYXdzNF9yZXF1ZXN0JlgtQW16LURhdGU9MjAyNDA3MDRUMDU0NDQzWiZYLUFtei1FeHBpcmVzPTMwMCZYLUFtei1TaWduYXR1cmU9ZGQ3YWIwYzg4NjZhNzM2Zjg3MTkwYjEyNTk5MTA1YjUyMTU4ZmQyNDFjMDA0MGIyNmVkN2NkMWFiNjRiMThjNyZYLUFtei1TaWduZWRIZWFkZXJzPWhvc3QmYWN0b3JfaWQ9MCZrZXlfaWQ9MCZyZXBvX2lkPTAifQ.uPQIWgLyB7G36v_2oFKNGWBmfJpgfvPTAYJMjrE7L0Y)
a. baseurl support along with attributes
Content steering base urls are added using --content_steering_base_urls above but base url implementation needs to be extended to specify the following attributes:
Currently baseurl/s is added using --base_urls <comma_separated_urls> and does not support any of the above attributes.
I think support for only serviceLocation attribute should be added for now as --base_urls , same as --content_steering_base_urls mentioned above. Rest attributes can be added as needed.
b. Location
Right now there is no way to specify the mpd Location. Option similar to --content_steering_locations mentioned above should be added to specify Location.
c. ContentSteering element
As per the proposal above ContentSteering element = A URL that can be used to access the Content Steering
server. The URL points to a DASH Content Steering Manifest (DCSM) and has multiple attributes.
In the POC, I have added
--content_steering_url : which points to content steering server and
--content_steering_default_service_location : specifies attribute DefaultServiceLocation
--content_steering_query_before_start : specifies attribute queryBeforeStart.
I do not like the command line arguments that I have added but do not have a better idea.
Players supporting content steering:
Exoplayer: (not implemented yet)
google/ExoPlayer#11203
Useful links:
Unfortunately, I do not have time to work on this but can help with testing.
The text was updated successfully, but these errors were encountered: