Video.js vs JW Player is a comparison between both video & audio players, showing their advantages and disadvantages. For over 11 years, I worked with JW Player and shipped it with my WordPress plugin and Joomla extension under the name S3Media Stream. Since 2019, I use video.js because I got disenchanted with JW Player’s license policies and restrictions in usage. As such, I started to look around for an alternative and found Video.js. That said, both players have tons of options and some are quite advanced. Let me first introduce both of them before I jump into the differences:
Video.js
Video.js is an open source video and audio player sponsored by BrightCove. It has a large community that actively improves the player and there is wide range of plugins available to extend the player. This makes Video.js a powerful and versatile player. Videosjs had a few years back quite some bugs, but it improved over the years and currently it is even more popular than JW Player.
It is completely free and you are allowed to adapt it in any way you like as long as you respect the Apache 3 license agreement.
JW Player
JW Player is an excellent player, originally created by Jeroen Wijering, it was even used by YouTube in the old days. Now it is proprietary software, although it makes use of Open Source libraries, like dash.js,…. and others. Before 2012, JW Player was affordable, but when a top man of Google was hired to run the marketing department the license became more and more expensive and restrictive. The company grew from 0 to 100 employees in a few years time and began to target big media groups. As such JW Player is today no longer the obvious choice for small businesses and artists. However, I have to repeat, it is a top notch player and in some ways superior to Video.js.
Advertising
I will not discuss advertising options for both players because I find there are better ways to make money than pestering viewers with irritating inline ads. But if you are into this sort of thing and you are non-technical, JW Player is probably your best option. You will pay a hefty yearly fee for it, though.
Comparison table Video.js vs JW Player
Here is a comparison table for Video.js and JW Player. The items with a star are explained below the comparison table.
The blue dollar sign means that a feature can be obtained for a yearly fee. The plugin sign means that you need to install a plugin to make a feature work.
Features | Video.js | JW Player |
Cloud Player available* | ![]() |
![]() |
Self-hosted player* (on your site) |
![]() |
![]() |
HLS adaptive streaming* (video/audio) |
![]() |
![]() |
HLS bandwidth selector* | ![]() |
![]() |
Mpeg-dash streaming* (video/audio) |
![]() |
![]() |
Mpeg-dash bandwidth selector | ![]() |
![]() |
Live streaming* | ![]() |
![]() |
Pseudo streaming* (video/audio) |
![]() |
![]() |
Audio waveform* | ![]() |
![]() |
360 video | ![]() |
![]() |
Playlist option (video/audio) |
![]() |
![]() |
Unlimited video/audio plays | ![]() |
![]() |
Poster image | ![]() |
![]() |
Logo/Watermark with link to any page | ![]() |
![]() |
Multilingual Captions/subtitles | ![]() |
![]() |
Custom skins | ![]() |
![]() |
Speed selector | ![]() |
![]() |
Rewind/forward 10 seconds | ![]() |
![]() |
AES_128k encryption * | ![]() |
![]() |
DRM protection* | ![]() |
![]() |
AWS signed URL support* | ![]() |
![]() |
Performance Analytics | ![]() |
![]() |
Support* | ![]() |
![]() |
WordPress Plugin available | ![]() |
![]() |
Joomla extension available | ![]() |
![]() |
Drupal add-on available | ![]() |
![]() |
At this time of writing. JW Player still tends to experiment a lot with license policies, so check their site, regularly.
their Enterpise license is à la carte, that is to say, you explain what you need and they propose a yearly fee, usually starting from $800.
Cloud Player
Both Video.js and JW Player have a Cloud Player available. This means that you don’t have to download the player, you just link to the player. For Video.js, you simply have to add the following in the header of your page(s):
<link href="//vjs.zencdn.net/7.8.2/video-js.min.css" rel="stylesheet"> <script src="//vjs.zencdn.net/7.8.2/video.min.js"></script>
and then add the embedding code for the video or audio. If you work with WordPress, Drupal or Joomla, you make life a lot easier by installing a plugin for video.js
With JW Player, you first need to create a customizable player which is done via your JW player account. Once you selected the properties of the player it generates a link for the Cloud player.
I never used the cloud player of Video.js myself but their website shows and example of the embedding code on the home page.
Self-hosted player
Meaning that you can install the player on your own website, which makes you less dependent on changes, that could possibly break your player if the embedding code needs to change. This can be important if you have a lot of videos and audios on your website.
Live streaming
I haven’t tested this personally. Live streaming appears to be possible out of the box with Video.js: https://docs.videojs.com/tutorial-live.html
With JW Player you need an Enterprise license.
Pseudo streaming or progressive download
Is the simplest form of embedding a video or audio. Only a part of the video needs to be downloaded before the media starts to play.
Disadvantage is that video may stutter if the internet connection is slow, therefore long videos
HLS adaptive streaming & bandwidth selector
HLS adaptive streaming is quite advanced but it has the advantage of serving the best bandwidth version of a video/audio depending on the speed of your internet connection. Youtube, Vimeo and other streaming services use this method. See HLS adaptive streaming for more info.
Works flawless with both players, although with Video.JS not out of the box, you need to install two plugins, one for streaming and one for the bandwidth selector.
Mpeg-dash streaming
Is more or less the same as HLS adaptive streaming, except that Mpeg-dash videos are not broken up into segments.
Audio wave
Shows an audio wave like you can see in Spotify. Only Video.js offers this option.
AES_128k encryption
AES_128k encryption is supposed to make it harder to pirate an mpeg-dash video but in practice it makes little difference. Both players support this, but JW player blocks this, except in the Enterprise version.
DRM protection
Requires an external service like Widevine or others. It makes downloading and screen capturing almost impossible.
AWS signed URL support
Signed URLs are temporary links to media (or any file type) on AWS Amazon. This prevents hotlinking to your media, so that other parties cannot link to your media while you pay for the bandwidth. Both players support this out of the box but you need to set this up in AWS. For more info see What is an expiring link
Support
For Video.js, support isn’t really organized. People may answer your questions on github.com or via stackoverflow.com, both are not exactly known for their user friendly nature. You often get technically complex answers, presuming you are a web developer. This is why I indicated that video.js has no support.
JW Player has an excellent support system, they usually answer within 24 hours except weekends. They also have a forum but I find it more effective to use e-mail support.
About licensing
Video.js is very clear about this: you have to accept the Apache 3 license agreement. The player is open source and makes use of other libraries that are open source as well. You can adapt it as you like and there are no limitations in use, no fees.
JW Player is at least ambiguous. It makes use of open source libraries, yet it claims that their software is proprietary. How can that be? Well, they use a loophole. When you provide only a link to a player (like a Cloud player) instead of a player you have to download, you do not have to expose the source code and you can claim that your player is proprietary even if it makes use code from open source librairies. This is why you can no longer download JW Player unless you have an Enterprise license. In short, you may not adapt the player and usage is limited according to the license fee you are willing to pay.
Conclusion
Embedding player code into your site is’t that easy. Luckily, there are plugins available for WordPress, Joomla and Drupal for both players, so that this is made a lot easier for you. If you have a html site, that is to say, a site with hand coded pages, you have to embed the player’s code yourself. Both Video.js and JW Player have rather complex embedding code, unless you are happy with minimum features, but then you might as well use YouTube, to be frank.
JW Player has its own CDN (cloud space for media), although it supports AWS CloudFront and other CDN’s as well. Video.js has no CDN for users but it supports AWS CloudFront and all other CDN’s.
PS: Don’t even think about putting videos on your own domain, it slows down performance immensely.
I’m currently using Video.js on my own art videos & presentations. Here is a progressive download(pseudo streaming) example: https://www.raboo.info/human-error-series/
And here is an HLS adaptive streaming example with multilingual subtitles in English, Dutch and French: https://www.raboo.info/introduction-lost-corners/