OvenPlayer: a WebRTC and LLHLS player built for OvenMediaEngine
OvenPlayer is JavaScript-based LLHLS and WebRTC Player for OvenMediaEngine.
At a glance
- What is it?
- OvenPlayer is a JavaScript player for low latency HLS and WebRTC streams, built to sit in front of OvenMediaEngine, with automatic protocol fallback, a customisable UI and SDK, advertising in the VAST and VMAP formats and subtitles in SMI, VTT and SRT. It ships as a webpack bundle, ovenplayer.js, and is MIT licensed.
- Who is it for?
- OvenPlayer suits a team running OvenMediaEngine who wants a player that already speaks its WebRTC signalling and its LLHLS output, and who want to hand the UI to their own designers rather than ship a stock player. It does not suit a project that only needs ordinary HLS playback, since video.js and hls.js cover that with far less code, and it is a single vendor's front end for a single vendor's server.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A player written for one streaming server
OvenPlayer is a JavaScript based player that can play Low Latency HLS and WebRTC streams optimized for OvenMediaEngine, and it provides various APIs so you can build and operate your media service more easily.
That last clause is the whole design brief. This is not a general purpose HTML5 video player with a WebRTC plugin bolted on. It is the front end for OvenMediaEngine, the streaming server from the same vendor, and the WebRTC path uses a signalling protocol that conforms to the OME specification, which is the part that makes it interoperable with that server rather than with arbitrary signalling servers.
The feature list is organised by what the player does with the stream. There is an HTML5 standard video player as the base. For live streaming with various protocols there are three tiers: sub-second latency with WebRTC, low latency with LLHLS and LLDASH over chunked CMAF, and legacy with HLS and MPEG-DASH.
The three tiers are a latency ladder rather than a menu, and the third item in the list, automatic fallback streaming, is what turns it into a ladder. A player that only spoke WebRTC would be the lowest latency and the least compatible, and a player that only spoke HLS would be the most compatible and the slowest, and most viewers do not care about the difference. Falling back means the page keeps playing while the protocol changes underneath it.
Beyond the stream, there is a fully customisable UI and SDK, advertising insertion in several formats, and subtitle support. The advertising formats listed are VAST4, VAST3, VAST2 and VPAID2 for HTML5, plus VMAP1.0.1. Subtitles are supported in SMI, VTT and SRT. VMAP is the one worth noting, because it is the container format for multiple ad creatives, which is what a service with a real ad sales team needs rather than a single pre-roll slot.
A webpack bundle you ship yourself
OvenPlayer is distributed as a single JavaScript file, and the build is plain webpack with no framework in the loop.
The package manifest gives the entry point as dist/ovenplayer.js, and the scripts section has exactly two entries. The build script runs webpack with webpack.config.js, and the watch script runs webpack with webpack.development.js in watch mode, which is the development loop for someone editing the source.
The dependency list is short and tells you the shape of the project. Babel with preset-env and babel-loader handles the transpilation, core-js provides the polyfills, and less with less-loader and css-loader and style-loader handles the styles. webpack-merge combines the development and production configurations, and webpack-bundle-analyzer is there to inspect the bundle size. A small utility library and the media-captions package are the two runtime-ish pieces among the development dependencies, and the Google interactive media ads types are present for the advertising support.
A single-file bundle is a deliberate distribution choice, and it has consequences in both directions. For deployment, there is one artefact to copy and no module resolution to configure, which matters if you are embedding the player inside a page that already has other scripts. For maintenance, you are shipping a compiled blob rather than source, so upgrading means replacing a file and re-testing your integration, and the readme points you at the build documentation for creating ovenplayer.js for deployment or for development after modifying the source.
The top-level listing shows the whole shape of the repository: src/ for the source, packages/ for the sub-packages, dist/ for the built output, demo/ with several demo pages, docs/ for the documentation, build/ for the build scripts, a .gitbook.yaml for the docs site, and a CNAME file for the documentation domain.
The demo is the documentation, and the ecosystem is the guide
There is no tutorial in the readme, and that is deliberate. The quick start section simply says to read the Quick Start on the documentation site, and the API and configuration section says to start the demo and see the API and Configuration page for more details.
That points you at the running demo, and there are two of them, one plain and one with TLS:
Without TLS the demo is at http://demo.ovenplayer.com, and with TLS at https://demo.ovenplayer.com.
For a player, a live demo is a better document than a code sample, because the thing being configured is a user interface and the only way to know whether a setting does what you want is to see it. The docs site also carries the user guide for customising the UI, the API reference and examples.
The other part of the documentation is the surrounding stack, and the readme lists it explicitly. OvenMediaEngine is the sub-second latency streaming server with LLHLS and WebRTC. OvenLiveKit is the JavaScript based live streaming encoder for that server. OvenSpace is a sub-second latency streaming demo service built with all three, and it is available to try at space.ovenplayer.com, with the examples in a separate OvenSpace repository.
The company behind all of it, OvenMedia Labs, describes its aim as making it easier to build a stable broadcasting or streaming service with sub-second latency, and the readme lists other projects: OvenMediaEngine Enterprise, OvenVideo and AirenBlog. The homepage is ovenmedia.com.
That ecosystem is a strength and a constraint at the same time. If you are already using OvenMediaEngine, the player is the obvious choice because the signalling and the low latency paths already match. If you are not, the player is a capable HTML5 player with a narrow reason to exist.
What OvenPlayer is not: a general purpose HTML5 player
It is worth saying what this project is not, because the name invites a wrong comparison.
It is not a video.js or hls.js replacement for ordinary progressive video or ordinary HLS. Those libraries are smaller, more widely used, and cover the common case with a fraction of the code. Choosing a player that supports WebRTC signalling, LLHLS with chunked CMAF, ad insertion in five formats and three subtitle formats in order to play an MP4 over HTTP would be over-engineering.
The justification for the extra weight is the streaming server. OvenMediaEngine is built around sub-second latency, and the player is the piece that makes that latency usable, because the WebRTC path needs a signalling server that speaks the vendor's own protocol and the LLHLS path needs a player that understands how that server emits partial segments. A player written by the same people as the server removes the class of bug where the two disagree about what a chunk boundary is.
The second justification is the SDK. The readme's claim is that the player provides various APIs so you can build and operate your media service more easily, and a fully customisable UI and SDK is listed as a feature. For a service with its own brand, its own layout and its own player controls, a shell with a documented API is a better starting point than a stock player with a stylesheet hacked over it.
So the honest framing is that OvenPlayer is a good fit when your origin is OvenMediaEngine, and an expensive default when it is not.
An active project with a steady release rhythm
The maintenance picture is good, and it is the kind of good that comes from a product with a commercial owner behind it.
The three most recent releases are v0.10.54 from 2026-08-25, v0.10.53 from 2026-07-27 and v0.10.52 from 2026-06-23. The version in the package manifest matches the newest tag at 0.10.54, so the published package and the release line are in step, and the cadence is roughly monthly with patch-level increments on a 0.x version.
The version staying at 0.10.x while the fourth component increments tells you the project is still changing shape within a minor version, which is normal for a player whose API surface is documented on a separate site and evolves with the server it talks to.
The repository is not archived, the default branch is master, and the last push was on 2026-10-20, two days before the current date. The licence is MIT, with the LICENSE file at the root.
The contribution process is spelled out in more detail than most readmes give. The project asks you to read the Guidelines in CONTRIBUTING.md, the Rules in CODE_OF_CONDUCT.md and the contribute page on the vendor site, and it lists seven ways to help: finding bugs, reviewing code, sharing ideas, testing, improving documentation, spreading and use cases, and recurring donations. Each links into the relevant section of the contributing guide, so the readme is a menu rather than a paragraph.
The tooling in the repository is also a signal. There is a .claude/ directory at the root, which means the project has been set up for work with coding assistants, and a .npmignore alongside the .gitignore to keep the development tree out of the published package.
Editorial conclusion
OvenPlayer suits a team running OvenMediaEngine who wants a player that already speaks its WebRTC signalling and its LLHLS output, and who want to hand the UI to their own designers rather than ship a stock player. It does not suit a project that only needs ordinary HLS playback, since video.js and hls.js cover that with far less code, and it is a single vendor's front end for a single vendor's server. Before adopting it, compare its protocol support against your source, check whether the automatic fallback behaves the way you want, and confirm that the ad and subtitle formats you need are in the supported list rather than in a roadmap.
Frequently asked questions
What is OvenPlayer?
It is a JavaScript based player that can play Low Latency HLS and WebRTC streams optimized for OvenMediaEngine, providing various APIs so you can build and operate your media service more easily. It is an HTML5 standard video player with a customisable UI and SDK, licensed under MIT.
Which streaming protocols does OvenPlayer support?
Three tiers: sub-second latency with WebRTC using a signalling protocol that conforms to the OME specification, low latency with LLHLS and LLDASH over chunked CMAF, and legacy with HLS and MPEG-DASH. It also offers automatic fallback streaming between them.
How do I build OvenPlayer from source?
The package has two scripts. The build script runs webpack with webpack.config.js, and the watch script runs webpack with webpack.development.js in watch mode. The build documentation explains how to create ovenplayer.js for deployment or for development after modifying the source.
Which ad and subtitle formats does OvenPlayer handle?
Advertising insertion supports VAST4, VAST3, VAST2 and VPAID2 for HTML5, plus VMAP1.0.1 for multiple ad creatives. Subtitle support covers SMI, VTT and SRT.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/ovenmedialabs-ovenplayer)Was this useful?