Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Can we put this in how-to-guides/web/content-steering to make this a web-only guide? Or does that not work yet? 😅

Copy link
Member Author

Choose a reason for hiding this comment

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

Riiight I forgot that was possible!, Done ✅

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"label": "Content Steering",
"customProps": {
"icon": "\uD83D\uDEA6"
}
}