JW Player is the world's most popular embeddable media player.
JavaScript CSS HTML
Switch branches/tags
Latest commit e1f8e7d Dec 7, 2017 @robwalch robwalch Merge pull request #2589 from jwplayer/v8.0.x
Sync master with v8.0.x
Permalink
Failed to load latest commit information.
.github Hook: Run Karma Locally (#2284) Aug 29, 2017
assets Remove old font icons Sep 26, 2017
docs 8.0.0-rc.3 Oct 10, 2017
libs-external Fix playlist error handling after api.load Nov 12, 2015
src Merge pull request #2589 from jwplayer/v8.0.x Dec 7, 2017
test Remove redundant edition checks (#2574) Dec 6, 2017
.eslintignore Remove .eslintignore entries that have been de-linted Aug 1, 2017
.eslintrc Add eslint rule to forbid for-of loops Jun 19, 2017
.gitignore Update ignore files Sep 22, 2017
.npmignore Update npmignore file Sep 22, 2017
.project.default default FlashBuilder files May 15, 2014
.stylelintrc Improve timeslider UI and controlbar background (#2246) Aug 21, 2017
.travis.yml Click to Play Setup (#2347) Sep 19, 2017
CONTRIBUTING.md New docs (#1654) Jan 5, 2017
Gruntfile.js Improve timeslider UI and controlbar background (#2246) Aug 21, 2017
LICENSE Adding our CC license, human-readable version below Jul 1, 2014
README.md Update README.md Oct 18, 2017
_config.yml Set theme jekyll-theme-minimal Jul 6, 2017
accessibility.md Deprecate Dock Jul 25, 2017
browserslist Improve timeslider UI and controlbar background (#2246) Aug 21, 2017
karma.conf.js Unit Tests Cleanup (#2221) Aug 16, 2017
package-lock.json Update intersection-observer polyfill to 0.4.3 Nov 29, 2017
package.json Update intersection-observer polyfill to 0.4.3 Nov 29, 2017
postcss.config.js Place postcss config in a place thats easier for processes to find. Apr 4, 2017
test-context.js updated unit tests Aug 24, 2017
webpack.config.js Remove old font icons Sep 26, 2017

README.md

JW Player Logo

Plays everywhere, every time.

Live on over 2 million sites with 1.3 billion unique plays per month, JW Player is the solution for seamless video playback across browsers and media types. It empowers the developer to interact with video programmatically to create unique and awesome user experiences.

Disclaimer

This is the non-commercial version of JW Player. It does not contain the same features as the commercial-use player available from jwplayer.com. Commercial use and access to features requires a license. Learn more at https://www.jwplayer.com/pricing/. If you are a paid customer and want a player, please download it from the "Downloads" section of your JW Dashboard.

Official Documentation

A Simple Example

The example below will render a video player into the div with the player id, listens to an event, and makes a few calls using the API.

<!DOCTYPE html>
<html>
<head>
    <script src='LINK_TO_YOUR_PLAYER'></script>
    <script>jwplayer.key='YOUR_KEY';</script>
</head>
<body>
    <div id="player">Loading the player...</div>
    <script>
        // Setup the player
        const player = jwplayer('player').setup({
            file: 'LINK_TO_YOUR_FILE.mp4'
        });

        // Listen to an event
        player.on('pause', (event) => {
            alert('Why did my user pause their video instead of watching it?');
        });

        // Call the API
        const bumpIt = () => {
            const vol = player.getVolume();
            player.setVolume(vol + 10);
        }
        bumpIt();
    </script>
</body>
</html>

Check out an interactive example in this JSFiddle.

Contributing

We appreciate all contributions towards the player! Before submitting an issue or PR, please see our contributing docs here.

Building the Player

We use grunt and a few npm scripts to build the player, lint code, and run tests. Debug code is built to /bin-debug, while minified & uglified code is built to /bin-release. Code is built with webpack, linted with eslint, and tested with karma, mocha and chai.

Requirements:

  1. Node.js and npm

Steps:

  1. Fork the project, clone your fork, and set up the remotes:
# Clone your fork of the repo into the current directory
git clone https://github.com/<your-username>/jwplayer
# Navigate to the newly cloned directory
cd jwplayer
# Assign the original repo to a remote called "upstream"
git remote add upstream https://github.com/jwplayer/jwplayer
  1. Install the dependencies:
# Install grunt globally
npm install -g grunt
npm install
# Optionally, install webpack-dev-server
npm install -g webpack-dev-server
  1. Build the player:
# Build once
grunt
# Complete Watch - builds JS, lints, and tests on each change
grunt serve
# Quick JS Watch - build only. Requires webpack-dev-server to be installed globally
webpack-dev-server -w --env.debug --port 8888 --output-public-path /bin-debug/
  1. Test your code:
# All browsers
grunt test
# Individual browsers - chrome, firefox, ie11, ie10, ie9
grunt karma:{BROWSER} e.g. grunt karma:chrome
  1. Lint your code:
npm run lint
  1. Setup git pre-push hook

Will lint and run unit tests on the branch before any push to remote

grunt hooks

Software License

The use of this library is governed by a Creative Commons license. You can use, modify, copy, and distribute this edition as long as it’s for non-commercial use, you provide attribution, and share under a similar license. http://www.jwplayer.com/license/