-
Notifications
You must be signed in to change notification settings - Fork 1.7k
Home
BOLA: Near-Optimal Bitrate Adaptation for Online Videos
Note Dec 23rd 2015 The ES6 Refactor has been merged into dev branch and is open for PR requests again. If you have and existing PR please close, refactor it and re-issue the PR against dev.
dash.js is an initiative of the DASH Industry Forum to establish a production quality framework for building video and audio players that play back MPEG-DASH content using client-side JavaScript libraries leveraging the Media Source Extensions API set as defined by the W3C. The core objectives of this project are to build an open source JavaScript library for the playback of DASH which:
- Is robust in a real-world production environment
- Has the best performing adaption algorithms
- Is free for commercial use
- Is both codec and browser agnostic
- Implements best practices in the playback of MPEG DASH
- Supports a wide array of features including in-band events, multiple-periods and cross-browser DRM.
For an up-to-date view as to the state of MSE support in browsers, look here.
All code in the dash.js project is covered by the BSD-3 license. This permissive license allows redistribution and use in source and binary forms, with or without modification, without cost or any license fees. It is our intent that you use this code to freely build DASH players for personal, company internal, or commercial purposes.
- Download 'master' or latest tagged release.
- Extract dash.js and move the entire folder to localhost (or run any http server instance such as python's SimpleHTTPServer at the root of the dash.js folder).
- Open samples/dash-if-reference-player/index.html in your MSE capable web browser.
- install nodejs
- install grunt - npm install -g grunt-cli
(1) Change directories to the build folder
- cd build/
(2) Install all Node Modules defined in package.json
- npm install
(3) Run all the GruntFile.js task (Complete Build and Test)
- grunt
(4) You can also target individual tasks:
-
grunt uglify
-
grunt jsdoc
-
grunt
If you just want a DASH player to use and don't need to see the code or commit to this project, then follow the instructions below. If you are a developer and want to work with this code base, then skip down to the "Quick Start for Developers" section.
Put the following code in your web page
<script src="http://cdn.dashjs.org/latest/dash.all.js"></script>
...
<body onLoad="Dash.createAll()">
<div>
<video class="dashjs-player" autoplay preload="none" controls="true">
<source src="http://dash.edgesuite.net/envivio/Envivio-dash2/manifest.mpd" type="application/dash+xml"/>
</video>
</div>
</body>
Then place your page under a web server (do not try to run from the file system) and load it via http in a MSE-enabled browser. The video will start automatically. Switch out the manifest URL to your own manifest once you have everything working. If you prefer to use the latest code from this project (versus the last tagged release) then download dash.all.js file from the development/dist folder, mount it on a web server and change your script tag to refer to it.
View the /samples folder for many other examples of embedding and using the player. For help, join our email list and read our wiki.
Create a video element somewhere in your html. For our purposes, make sure to set the controls property to true.
<video id="videoPlayer" controls="true"></video>
Now comes the good stuff. We need to create a dash context. Then from that context we create a media player, initialize it, attach it to our "videoPlayer" and then tell it where to get the video from. We will do this in an anonymous self executing function, that way it will run as soon as the page loads. So, here is how we do it:
(function(){
var url = "http://dash.edgesuite.net/dash264/TestCases/1c/qualcomm/2/MultiRate.mpd";
var context = new Dash.di.DashContext();
var player = new MediaPlayer(context);
player.startup();
player.attachView(document.querySelector("#videoPlayer"));
player.attachSource(url);
})();
When it is all done, it should look similar to this:
<!doctype html>
<html>
<head>
<title>Dash.js Rocks</title>
</head>
<body>
<div>
<video id="videoPlayer" controls="true"></video>
</div>
<script src="yourPathToDash/dash.all.js"></script>
<script>
(function(){
var url = "http://dash.edgesuite.net/akamai/test/caption_test/ElephantsDream/elephants_dream_480p_heaac5_1.mpd";
var context = new Dash.di.DashContext();
var player = new MediaPlayer(context);
player.startup();
player.attachView(document.querySelector("#videoPlayer"));
player.attachSource(url);
})();
</script>
</body>
</html>
This project is organized by the Dash Industry Forum, a non-profit industry association established to catalyze the adoption of MPEG-DASH. Membership includes many large media companies, including Microsoft, Qualcomm, Ericsson, Adobe, Sony, Cisco, Intel and Akamai.