diff --git a/theoplayer/how-to-guides/web/content-steering/00-mpeg-dash-content-steering.md b/theoplayer/how-to-guides/web/content-steering/00-mpeg-dash-content-steering.md new file mode 100644 index 000000000000..ae57c04fbaeb --- /dev/null +++ b/theoplayer/how-to-guides/web/content-steering/00-mpeg-dash-content-steering.md @@ -0,0 +1,53 @@ +# MPEG-DASH Content Steering + +This guide shows you how to use MPEG-DASH Content Steering in the THEOplayer Web SDK. + +MPEG-DASH Content Steering is a server-driven mechanism that allows content providers to dynamically control CDN selection +across large groups of clients. While players can independently respond to local network conditions and switch between CDNs, +Content Steering enables centralized decision-making at scale. By communicating with a steering server, the player receives +a prioritized list of CDN endpoints that reflects real-time information about CDN performance, capacity, and cost across +your entire user base. This allows you to proactively route traffic away from overloaded or underperforming CDNs, +balance load across multiple providers, or implement cost optimization strategies—all without requiring player-side logic +or client updates. + +## Enabling/Disabling Content Steering + +By default, Content Steering in MPEG-DASH is enabled, however, it can be explicitly enabled or disabled using a flag in +your `SourceDescription`. + +You can also override the `clientRequirement="false"` property in the MPEG-DASH manifest to enable Content Steering for +a specific playback session by explicitly setting it to `true`. + +```javascript +player.source = { + sources: { + src: 'https://your-dash-source-with-content-steering.mpd', + dash: { + contentSteering: true, // Default is true; set to false to disable. + }, + }, +}; +``` + +## Events for Content Steering + +THEOplayer provides events to monitor the Content Steering process. For more details, check the +[API documentation](pathname:///theoplayer/v10/api-reference/web/#ContentSteeringStartEvent). + +```javascript +player.addEventListener('contentsteeringstart', console.log); +player.addEventListener('contentsteeringstop', console.log); +player.addEventListener('contentsteeringlocationchange', console.log); +player.addEventListener('contentsteeringupdate', console.log); +player.addEventListener('contentsteeringerror', console.log); +``` + +## Known Limitations + +- `PATHWAY-CLONE` from the Content Steering server response is not supported yet. +- Extended HTTP GET request parametrization instructions are not supported yet. You can add custom parameters to Content Steering requests by using a `RequestInterceptor` to intercept and modify network requests with the type `content-steering`. +- Targeting a specific set of clients as part of a ServiceDescription element is not supported. + +## More information + +- [DASH-IF: Content Steering for DASH](https://www.etsi.org/deliver/etsi_ts/103900_103999/103998/01.01.01_60/ts_103998v010101p.pdf) diff --git a/theoplayer/how-to-guides/web/content-steering/_category_.json b/theoplayer/how-to-guides/web/content-steering/_category_.json new file mode 100644 index 000000000000..b9c9a2219768 --- /dev/null +++ b/theoplayer/how-to-guides/web/content-steering/_category_.json @@ -0,0 +1,6 @@ +{ + "label": "Content Steering", + "customProps": { + "icon": "\uD83D\uDEA6" + } +}