Feature Overview
The work in dash.js is closely aligned with the work on the DASH Interoperability Points and the DASH Live Simulator 2 in DASH-IF.
DASH-IF IOP Alignment
| IOP Documentation | dash.js | LiveSim 2 |
|---|---|---|
| Live2VoD | Supported | Supported |
| L3D | Supported, see also here | Supported via chunked delivery (chunkdur) and availabilityTimeOffset |
| Content Steering | Supported but needs some updates to be compliant with version 1.0.0. See also here | Supported: multiple service locations, trigger and rotate modes, queryBeforeStart |
| MPD Patch | Supported, see also here | Supported via configurable Patch TTL |
| CMCD | Version 1 fully supported, version 2 including event and response mode reporting, see also here | Not supported |
| CMSD | Implementation completed for two attributes etp and mb, see also here | Not supported |
| Variable Substitution / DASH Annex I | Basic support, no support for templating mechanism. See also here | Supported: query parameters are propagated to segment requests |
| Server Guided Ad Insertion | Not supported | Supported: DASH 6th edition Alternative-MPD Replace events, break schedules, skippability signaling |
| DRM / CPIX | Supported, see also here | Supports on-the-fly encryption (ECCP cbcs/cenc) and EZDRM (Widevine, PlayReady, FairPlay) |
| LC-EVC | Basic support, see also here | Not supported |
dash.js Features
Core Playback
| Feature | Notes |
|---|---|
| VoD and live playback | MPEG-DASH playback via the Media Source Extensions (MSE) |
| Multi-period streams | Seamless transitions between periods, see Multiperiod Streams |
| Track selection | Initial and runtime selection by language, role, codec and custom filters, see Track Selection |
| Gap handling | Automatic detection and handling of buffer gaps and missing segments |
| Microsoft Smooth Streaming | Playback of Smooth Streaming assets via a separate bundle, see MSS |
| Multiple players per page | Each MediaPlayer instance runs in its own scope |
Live & Low Latency
| Feature | Notes |
|---|---|
| Low latency streaming | CMAF chunked transfer playback with configurable target latency, see Low Latency |
| Catchup mechanisms | Playback rate adjustment to reach and hold the live edge |
| Clock synchronization | UTCTiming support to align client and server clocks, see Clock Synchronization |
| MPD patching | Delta manifest updates instead of full MPD reloads, see MPD Patching |
| Live streaming settings | Time-shift buffer, live delay and update handling, see Live Streaming |
Adaptive Bitrate (ABR)
| Feature | Notes |
|---|---|
| Default ABR rules | ThroughputRule, BolaRule, InsufficientBufferRule, SwitchHistoryRule, DroppedFramesRule, AbandonRequestRule, see ABR |
| Low latency ABR rules | L2A and LoL+ for chunked low latency streams |
| Custom rules | Own ABR rules are pluggable via the rules API |
| Manual quality selection | Explicit representation selection per media type, see Manual Quality Selection |
| Buffer management | Configurable buffer targets and pruning, see Buffer Management |
DRM & Content Protection
| Feature | Notes |
|---|---|
| Key systems | Widevine, PlayReady, FairPlay and ClearKey via the Encrypted Media Extensions (EME), see DRM |
| Encryption schemes | CENC (cenc) and CBCS (cbcs) |
| License configuration | Custom license server URLs, request/response filters, priority per key system |
| Robustness levels | Configurable audio/video robustness |
Subtitles & Captions
| Feature | Notes |
|---|---|
| Segmented TTML / IMSC1 | Fragmented and non-fragmented TTML, see Subtitles & Captions |
| WebVTT | Including custom rendering, see Custom WebVTT Rendering |
| CEA-608/708 | In-band closed captions embedded in the video stream |
| External subtitles | Attaching external subtitle files at runtime |
| DVB font downloading | Downloadable fonts signaled in the MPD, see DVB Font Downloading |
Data, Events & Reporting
| Feature | Notes |
|---|---|
| CMCD | Common Media Client Data version 1 and 2, see CMCD |
| CMSD | Common Media Server Data (etp, mb), see CMSD |
| MPD and inband events | EventStream and emsg handling with application callbacks, see Event Handling |
| Metrics and player events | Extensive playback metrics and event API, see Player Events |
Advanced
| Feature | Notes |
|---|---|
| Content steering | Multi-CDN switching driven by a steering server, see Content Steering |
| Network interceptors | Custom request/response interceptors in the loading stack, see Network Interceptor |
| URL parameter insertion | DASH Annex I flexible insertion of URL parameters, see Flexible Insertion of URL Parameters |
| Preloading | Buffering content before a video element is attached, see Preloading |
| Thumbnails | Thumbnail tracks based on image adaptation sets, see Thumbnails |
| LC-EVC | Basic support for LC-EVC enhanced streams, see LCEVC |
| Offline playback | Downloading streams for offline playback |
Testing with LiveSim2
LiveSim2 is the DASH-IF live source simulator. It turns VoD assets into wall-clock synchronized, infinite live streams and is publicly hosted at livesim2.dashif.org. The URL generator allows interactive configuration of test streams, which makes it a good companion for testing dash.js:
- Segment addressing:
SegmentTemplatewith$Number$or$Time$, andSegmentTimelinevariants - Low latency: chunked delivery with configurable chunk duration and
availabilityTimeOffset - Multi-period: configurable number of periods per hour, period continuity signaling
- Timing: all common
UTCTimingmethods (direct, HTTP head, xsdate, iso, NTP, SNTP) - Ad insertion: SCTE-35
emsgevents and Server-Guided Ad Insertion with Alternative-MPD Replace events - Subtitles: generated
stppandwvttsubtitles for any number of languages, CEA-608 in-band captions - Encryption: on-the-fly ECCP (
cbcs/cenc) encryption and EZDRM integration (Widevine, PlayReady, FairPlay) - Content steering: multiple service locations with trigger or rotate mode
- MPD Patch: delta manifest updates with configurable Patch TTL
- Negative testing: cyclic segment error codes (404/403) and traffic patterns (down, slow, hang) for robustness testing
- CMAF ingest: acts as a CMAF ingest source (version 1.1) pushing segments to a configurable destination
