Migration guide
Migrating from Shaka Player to Bradmax
Shaka Player is a strong, standards-led DASH player, and plenty of teams ship it. They usually come to Bradmax when DRM integration keeps landing on their own team, or when a TV or Flutter target falls outside the browser player. Ad insertion is the other common trigger.
Your manifests, licence servers and ad tags stay as they are. What changes is the layer that owns them.
The migration, step by step
-
Keep your DASH manifests
Multi-period DASH, LL-DASH and CMAF content all play as they are. There is no repackaging step in this migration.
-
Swap the player source
Replace the Shaka bundle with the player source generated for your account, and give the player a container element instead of a <video> you manage yourself.
-
Move the manifest into the configuration
player.load(manifestUri) becomes dataProvider.source: [{ url: manifestUri }]. Additional representations, such as an HLS variant for Apple devices, are listed as further source entries.
-
Port the DRM configuration
Shaka's drm.servers map becomes the per-source drm object, with licence URLs and authentication data split by key system. Configured once, it applies to every source that needs it.
-
Drop the manual ABR and track plumbing
Variant selection, quality ladders and recovery are handled by the player. Keep only the product decisions (initial quality caps, for example) and expose them through the JavaScript API.
-
Add the ad layer if you need it
If monetization is in scope, ad tags move into the player configuration for VAST, VMAP, VPAID, SGAI or server-side insertion, including SCTE-35 driven breaks for live content.
-
Validate on the devices you ship to
Use the free plan against your own stream and check the TV, mobile and browser targets in your support matrix before cutting over.
Before: the Shaka Player integration
<script src="https://ajax.googleapis.com/ajax/libs/shaka-player/4.7.0/shaka-player.compiled.js"></script>
<video id="video" controls></video>
<script>
var manifestUri = "https://cdn.example.com/stream/manifest.mpd";
shaka.polyfill.installAll();
var video = document.getElementById("video");
var player = new shaka.Player(video);
player.configure({
drm: {
servers: {
"com.widevine.alpha": "https://drm-widevine.example.com/getkey",
"com.microsoft.playready": "https://drm-playready.example.com/rightsmanager.asmx"
}
}
});
player.load(manifestUri).then(function () {
video.play();
});
</script>
After: the same manifest in Bradmax
<!-- The source URL is generated for your account in the client panel. -->
<script src="PLAYER_SOURCE.js"></script>
<div id="player" style="width: 100%; height: 100%; background: #000;"></div>
<script>
var config = {
dataProvider: {
source: [
{ url: "https://cdn.example.com/stream/manifest.mpd" },
{ url: "https://cdn.example.com/stream/master.m3u8" }
],
title: "My stream"
}
};
window.bradmax.player.create(document.getElementById("player"), config);
</script>
The same streams, with DRM configured in Bradmax
// The licence servers and authentication data you already use, moved into the
// Bradmax source object. One entry per manifest you serve.
var authenticationXmlBase64Encoded = "PEtleU9TQXV0aGVudGljYXRpb25YTUw+...";
var drmConfig = {
provider: "default",
widevine: {
laUrl: "https://drm-widevine.example.com/getkey",
customData: authenticationXmlBase64Encoded
},
playready: {
laUrl: "https://drm-playready.example.com/rightsmanager.asmx",
customData: authenticationXmlBase64Encoded
},
fairplay: {
laUrl: "https://drm-fairplay.example.com/getkey",
certUrl: "https://drm-fairplay.example.com/cert/server-cert.der",
customData: authenticationXmlBase64Encoded
}
};
var config = {
dataProvider: {
source: [
{ url: "https://cdn.example.com/stream/manifest.mpd", drm: drmConfig },
{ url: "https://cdn.example.com/stream/master.m3u8", drm: drmConfig }
],
title: "My stream"
}
};
window.bradmax.player.create(document.getElementById("player"), config);
Shaka Player concepts and their Bradmax equivalents
| Concept | Shaka Player | Bradmax |
|---|---|---|
| Script source | shaka-player.compiled.js | Player source generated per account in the client panel |
| Polyfills | shaka.polyfill.installAll() | Handled inside the player |
| Player instance | new shaka.Player(video) | window.bradmax.player.create(container, config) |
| Manifest | player.load(manifestUri) | dataProvider.source: [{ url: manifestUri }] |
| DRM licence servers | drm.servers keyed by key-system ID | Per-source drm object keyed by widevine, playready, fairplay |
| DRM authentication data | Request filters and custom headers | customData on each key system, with certUrl for FairPlay |
| Track and ABR selection | player.configure() and track APIs | Built-in adaptive switching plus quality API events |
| Text tracks | TextTrack APIs | In-manifest subtitles plus VTT and SRT sidecar files |
| Ads | Separate integration outside the player | VAST, VMAP, VPAID, SGAI and server-side insertion |
| TV and CTV | Browser targets only | Tizen, webOS, Android TV, Chromecast, AirPlay |
Worth knowing
- Your DASH packaging, licence servers and ad tags are unchanged by this migration.
- If your deployment is browser-only DASH without DRM or ads, Shaka Player is a perfectly good answer and there is no urgency to move.
Frequently asked questions
Do I keep my DASH manifest?
Yes. Bradmax plays your existing MPEG-DASH manifest, including multi-period content and LL-DASH, without repackaging.
How does Shaka's DRM configuration map to Bradmax?
Shaka configures licence servers under drm.servers with key-system IDs. Bradmax configures the same information per source under drm, split by key system name (widevine, playready, fairplay) with laUrl, certUrl and customData.
What about Shaka's ABR and track selection?
Adaptive switching is built into the Bradmax player. Where you need explicit control, the JavaScript API exposes quality selection and playback events instead of Shaka's configure() calls.
I use Shaka on a TV platform. Does Bradmax cover it?
Bradmax targets Tizen, webOS and Android TV as web apps, plus Chromecast and AirPlay. That coverage is one of the main reasons teams move off a browser-only player.
References
- Bradmax player configuration reference Bradmax player documentation, configuration.html
- Bradmax DRM integration reference Bradmax player documentation, DRM default provider
- Player source and embed code generation Bradmax client panel