Convert Figma logo to code with AI

Dash-Industry-Forum logodash.js

A reference client implementation for the playback of MPEG DASH via Javascript and compliant browsers.

5,087
1,668
5,087
122

Top Related Projects

14,637

HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.

JavaScript player library / DASH & HLS client / MSE-EME player

7,076

:clapper: An extensible media player for the web.

37,823

Video.js - open source HTML5 video player

JW Player is the world's most popular embeddable media player.

Quick Overview

dash.js is an open-source MPEG-DASH player written in JavaScript. It provides a robust, cross-platform solution for adaptive streaming of multimedia content over HTTP, allowing for seamless playback of high-quality video across various devices and network conditions.

Pros

  • Highly customizable and feature-rich player for MPEG-DASH content
  • Supports multiple DRM systems for content protection
  • Active development and community support
  • Extensive documentation and examples

Cons

  • Learning curve can be steep for developers new to adaptive streaming
  • Performance may vary depending on the browser and device
  • Some advanced features require additional setup and configuration
  • Limited support for older browsers and devices

Code Examples

  1. Basic player setup:
const video = document.querySelector("video");
const player = dashjs.MediaPlayer().create();
player.initialize(video, "https://example.com/manifest.mpd", true);
  1. Enabling low latency streaming:
const player = dashjs.MediaPlayer().create();
player.updateSettings({
    streaming: {
        lowLatencyEnabled: true,
        liveDelay: 3
    }
});
player.initialize(video, "https://example.com/live-manifest.mpd", true);
  1. Adding custom filters:
player.registerMediaSourceExtension("video/mp4", CustomMSE);
player.registerMediaSourceExtension("audio/mp4", CustomMSE);
  1. Listening to events:
player.on(dashjs.MediaPlayer.events.QUALITY_CHANGE_REQUESTED, (e) => {
    console.log("Quality changed to " + e.newQuality);
});

Getting Started

To get started with dash.js, follow these steps:

  1. Include the dash.js library in your HTML:
<script src="https://cdn.dashjs.org/latest/dash.all.min.js"></script>
  1. Create a video element in your HTML:
<video id="videoPlayer" controls></video>
  1. Initialize the player in your JavaScript:
const video = document.getElementById('videoPlayer');
const url = "https://dash.akamaized.net/akamai/bbb_30fps/bbb_30fps.mpd";
const player = dashjs.MediaPlayer().create();
player.initialize(video, url, true);

This will create a basic DASH player that automatically plays the Big Buck Bunny demo stream. For more advanced usage and configuration options, refer to the official documentation.

Competitor Comparisons

14,637

HLS.js is a JavaScript library that plays HLS in browsers with support for MSE.

Pros of hls.js

  • Better support for HLS streaming, which is widely used by major streaming platforms
  • More lightweight and focused specifically on HLS playback
  • Extensive browser compatibility, including older versions

Cons of hls.js

  • Limited to HLS streaming, while dash.js supports multiple formats
  • Less comprehensive feature set compared to dash.js
  • Smaller community and potentially slower development cycle

Code Comparison

hls.js:

var video = document.getElementById('video');
var hls = new Hls();
hls.loadSource('https://example.com/playlist.m3u8');
hls.attachMedia(video);
hls.on(Hls.Events.MANIFEST_PARSED, function() { video.play(); });

dash.js:

var video = document.getElementById('video');
var player = dashjs.MediaPlayer().create();
player.initialize(video, 'https://example.com/manifest.mpd', true);
player.on(dashjs.MediaPlayer.events.PLAYBACK_STARTED, function() {
    console.log('Playback started');
});

Both libraries provide straightforward APIs for initializing and controlling video playback. hls.js focuses on HLS-specific functionality, while dash.js offers a more generic approach suitable for various streaming formats. The code snippets demonstrate the basic setup process for each library, highlighting their similarities in usage despite their different focuses.

JavaScript player library / DASH & HLS client / MSE-EME player

Pros of shaka-player

  • More extensive codec support, including VP9 and AV1
  • Better support for live streaming and low-latency streaming
  • More flexible configuration options and API

Cons of shaka-player

  • Larger file size and potentially higher memory usage
  • Steeper learning curve due to more complex API
  • Less focus on DASH-specific features

Code Comparison

shaka-player:

const player = new shaka.Player(videoElement);
player.configure({
  streaming: {
    bufferingGoal: 60,
    rebufferingGoal: 15
  }
});
player.load('https://example.com/video.mpd');

dash.js:

const player = dashjs.MediaPlayer().create();
player.initialize(videoElement, 'https://example.com/video.mpd', true);
player.setBufferToKeep(20);
player.setStableBufferTime(30);

Both libraries provide methods for initializing the player and loading content, but shaka-player offers more granular configuration options. dash.js has a simpler API for basic usage, while shaka-player provides more flexibility for advanced use cases.

7,076

:clapper: An extensible media player for the web.

Pros of Clappr

  • More flexible and modular architecture, allowing easier customization and plugin development
  • Supports a wider range of media formats, including HLS and MPEG-DASH
  • Simpler API and easier integration for basic use cases

Cons of Clappr

  • Less specialized for DASH streaming compared to dash.js
  • Smaller community and potentially slower development of new features
  • May have less robust support for advanced DASH features

Code Comparison

dash.js basic implementation:

var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#videoPlayer"), "video.mpd", true);

Clappr basic implementation:

var player = new Clappr.Player({
  source: "video.mp4",
  parentId: "#player"
});

Both libraries offer straightforward initialization, but Clappr's API is slightly more concise and intuitive for basic usage. However, dash.js provides more specific options for DASH streaming out of the box.

While dash.js focuses exclusively on DASH streaming, Clappr offers a more versatile solution for various media formats. The choice between the two depends on specific project requirements, with dash.js being the better option for DASH-centric applications and Clappr offering more flexibility for mixed media projects.

37,823

Video.js - open source HTML5 video player

Pros of video.js

  • Broader support for various video formats beyond DASH
  • More extensive plugin ecosystem and community contributions
  • Easier customization of player appearance and controls

Cons of video.js

  • Less specialized for DASH streaming, may require additional plugins
  • Larger file size due to broader feature set
  • Potentially higher learning curve for advanced DASH-specific features

Code Comparison

video.js:

var player = videojs('my-video', {
  controls: true,
  sources: [{ src: 'video.mp4', type: 'video/mp4' }]
});

dash.js:

var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#videoPlayer"), "video.mpd", true);

Summary

video.js is a versatile player with broad format support and extensive customization options, while dash.js specializes in DASH streaming. video.js may require additional setup for DASH but offers more flexibility for various video formats. dash.js provides a more streamlined approach for DASH content but with less built-in support for other formats. The choice between them depends on specific project requirements and the importance of DASH streaming versus general video playback needs.

JW Player is the world's most popular embeddable media player.

Pros of jwplayer

  • More comprehensive media player solution with support for various formats beyond DASH
  • Extensive customization options and API for advanced functionality
  • Commercial support and regular updates

Cons of jwplayer

  • Proprietary software with licensing costs for commercial use
  • Less focused on DASH-specific features and optimizations
  • Potentially heavier footprint due to broader feature set

Code Comparison

dash.js:

var player = dashjs.MediaPlayer().create();
player.initialize(videoElement, "video.mpd", true);

jwplayer:

jwplayer("myElement").setup({
    file: "video.mpd",
    type: "dash"
});

Key Differences

  • dash.js is specifically designed for DASH streaming, while jwplayer supports multiple formats
  • dash.js is open-source and free, jwplayer has both free and paid versions
  • dash.js focuses on DASH standards compliance, jwplayer offers a wider range of features

Use Cases

  • dash.js: Ideal for projects requiring a lightweight, DASH-specific player
  • jwplayer: Better suited for applications needing a versatile media player with extensive customization

Community and Support

  • dash.js: Active open-source community, primarily developer-driven support
  • jwplayer: Commercial support available, larger ecosystem of plugins and integrations

Performance Considerations

  • dash.js may have an edge in DASH-specific optimizations
  • jwplayer's broader feature set might impact performance in some scenarios

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Build status (CircleCI): CircleCI

Join #dashjs on Slack!

Migration from v3.x to v4.0

If you are migrating from dash.js v3.x to dash.js v4.x please read the migration document found here.

Overview

A reference client implementation for the playback of MPEG DASH via JavaScript and compliant browsers. Learn more about DASH IF Reference Client on our wiki.

If your intent is to use the player code without contributing back to this project, then use the MASTER branch which holds the approved and stable public releases.

If your goal is to improve or extend the code and contribute back to this project, then you should make your changes in, and submit a pull request against, the DEVELOPMENT branch. Read our CONTRIBUTION.md file for a walk-through of the contribution process.

All new work should be in the development branch. Master is now reserved for tagged builds.

Demo and reference players

All these reference builds and minified files are available under both http and https.

Samples

Multiple dash.js samples covering a wide set of common use cases.

Reference players

The released pre-built reference players if you want direct access without writing any Javascript.

The nightly build of the /dev branch reference player, is pre-release but contains the latest fixes. It is a good place to start if you are debugging playback problems.

CDN hosted files

The latest minified files have been hosted on a global CDN and are free to use in production:

In addition, all the releases are available under the following urls. Replace "vx.x.x" with the release version, for instance "v3.1.0".

Documentation

Full API Documentation is available describing all public methods, interfaces, properties, and events.

For help, join our Slack channel, our email list and read our wiki.

Tutorials

Detailed information on specific topics can be found in our tutorials:

Getting Started

The standard setup method uses javascript to initialize and provide video details to dash.js. MediaPlayerFactory provides an alternative declarative setup syntax.

Standard Setup

Create a video element somewhere in your html. For our purposes, make sure the controls attribute is present.

<video id="videoPlayer" controls></video>

Add dash.all.min.js to the end of the body.

<body>
  ...
  <script src="yourPathToDash/dash.all.min.js"></script>
</body>

Now comes the good stuff. We need to create a MediaPlayer and initialize it.


var url = "https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd";
var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#videoPlayer"), url, true);

When it is all done, it should look similar to this:

<!doctype html>
<html>
    <head>
        <title>Dash.js Rocks</title>
        <style>
            video {
                width: 640px;
                height: 360px;
            }
        </style>
    </head>
    <body>
        <div>
            <video id="videoPlayer" controls></video>
        </div>
        <script src="yourPathToDash/dash.all.min.js"></script>
        <script>
            (function(){
                var url = "https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd";
                var player = dashjs.MediaPlayer().create();
                player.initialize(document.querySelector("#videoPlayer"), url, true);
            })();
        </script>
    </body>
</html>

Module Setup

We publish dash.js to npm. Examples of how to use dash.js in different module bundlers can be found in the samples/modules directory.

MediaPlayerFactory Setup

An alternative way to build a Dash.js player in your web page is to use the MediaPlayerFactory. The MediaPlayerFactory will automatically instantiate and initialize the MediaPlayer module on appropriately tagged video elements.

Create a video element somewhere in your html and provide the path to your mpd file as src. Also ensure that your video element has the data-dashjs-player attribute on it.

<video data-dashjs-player autoplay src="https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd" controls>
</video>

Add dash.all.min.js to the end of the body.

<body>
  ...
  <script src="yourPathToDash/dash.all.min.js"></script>
</body>

When it is all done, it should look similar to this:

<!doctype html>
<html>
    <head>
        <title>Dash.js Rocks</title>
        <style>
            video {
                width: 640px;
                height: 360px;
            }
        </style>
    </head>
    <body>
        <div>
            <video data-dashjs-player autoplay src="https://dash.akamaized.net/envivio/EnvivioDash3/manifest.mpd" controls>
            </video>
        </div>
        <script src="yourPathToDash/dash.all.min.js"></script>
    </body>
</html>

Quick Start for Developers

  1. Install Core Dependencies
  2. Checkout project repository (default branch: development)
    • git clone https://github.com/Dash-Industry-Forum/dash.js.git
  3. Install dependencies
    • npm install
  4. Build, watch file changes and launch samples page, which has links that point to reference player and to other examples (basic examples, captioning, ads, live, etc).
    • npm run start

Other Tasks to Build / Run Tests on Commandline.

  • Build distribution files (minification included)
    • npm run build
  • Build and watch distribution files
    • npm run dev
  • Run linter on source files (linter is also applied when building files)
    • npm run lint
  • Run unit tests
    • npm run test
  • Generate API jsdoc
    • npm run doc

Troubleshooting

  • In case the build process is failing make sure to use an up-to-date node.js version. The build process was successfully tested with node.js version 20.10.0.

License

dash.js is released under BSD license

Tested With

Browser Stack Logo    Lambdatest Logo

NPM DownloadsLast 30 Days