Skip to content

DASH

DASH streaming via dash.js.

Install

sh
npm install @videts/vide dashjs

dashjs is an optional peer dependency.

Usage

ts
import { createPlayer } from "@videts/vide";
import { dash } from "@videts/vide/dash";

const player = createPlayer(document.querySelector("video")!);
player.use(dash());

player.src = "https://example.com/stream.mpd";

Options

OptionTypeDescription
dashConfigRecord<string, unknown>Settings passed to dashjs.updateSettings()
recoveryPartial<RecoveryConfig> | falseError recovery settings. Defaults to enabled
ts
player.use(dash({
  dashConfig: {
    streaming: { buffer: { bufferTimeDefault: 20 } }
  }
}));

Error Recovery

Fatal dash.js errors trigger automatic retry with exponential backoff. Recovery is enabled by default.

SettingDefaultDescription
maxRetries3Maximum retry attempts before giving up
retryDelay3000Initial delay in milliseconds
backoffMultiplier2Multiplier per retry (3s → 6s → 12s)

Recovery uses mediaPlayer.reset() followed by mediaPlayer.initialize() to reinitialize the player.

ts
// Custom config
player.use(dash({ recovery: { maxRetries: 5, retryDelay: 1000 } }));

// Disable recovery
player.use(dash({ recovery: false }));

The error event includes recoverable and retryCount fields during recovery:

ts
player.on("error", (e) => {
  if (e.recoverable) {
    console.log(`Retrying... (${e.retryCount})`);
  } else {
    console.error("Fatal error:", e.message);
  }
});

Quality Levels

When a DASH stream loads, the plugin automatically detects available quality levels and exposes them through the player API.

ts
player.on("qualitiesavailable", ({ qualities }) => {
  console.log(qualities);
  // [{ id: 0, width: 1920, height: 1080, bitrate: 5000000, label: "1080p" }, ...]
});

// Get current state
player.qualities;      // QualityLevel[]
player.currentQuality; // QualityLevel | null
player.isAutoQuality;  // boolean

// Switch quality (use -1 for auto)
player.setQuality(2);  // select specific level
player.setQuality(-1); // back to auto

player.on("qualitychange", ({ from, to }) => {
  console.log(`${from?.label} → ${to.label}`);
});

Events

The DASH plugin emits qualitiesavailable when the stream initializes and qualitychange when the active bitrate switches. Fatal dash.js errors are mapped to player error events.

Notes

  • The plugin registers a SourceHandler — setting player.src to a .mpd URL is handled automatically.
  • The dash.js instance is exposed via player.getPluginData("dash") for advanced use cases.
  • Works with the DRM plugin — plugin order doesn't matter.
  • Not supported on Safari/iOS — Safari lacks full MSE support required by dash.js.
  • Size: 1.4 KB gzip (wrapper only, dashjs is a separate peer dependency).