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.

Start Free

The migration, step by step

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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

Migrate against your own stream

The free plan is enough to prove the migration on the same manifest, the same DRM servers and your own devices. If you get stuck, an engineer answers.