Node-Media-Server is a free, open source digital asset management (dam) project written in JavaScript and released under Apache-2.0. It has 6,244 GitHub stars, 1,535 forks and 432 open issues, and was last pushed 8 days ago. On this registry it ranks #6 of 25 tracked projects in Digital Asset Management (DAM), with 5 head-to-head comparisons available.

What is Node-Media-Server?

What it is

Node-Media-Server is a live streaming media server written in JavaScript and distributed through npm, the Node.js package registry. Version 4 is built as an enhanced RTMP FLV v1 implementation with native support for HEVC, VP9, and AV1 codecs, alongside the H.264 support carried over from earlier releases. It ships under the Apache-2.0 license and has accumulated roughly 6,244 stars and 1,535 forks on GitHub over a repository history of about twelve years, with recent commits dated September 2026.

The problem it solves is the cost and rigidity of hosted streaming infrastructure. Operators who need RTMP ingest, HTTP-FLV and WebSocket-FLV playback, and optional recording can run a single Node.js process instead of paying for a managed video platform. It also serves as an origin for pushing streams into other systems: RTSP and RTMP pull or pull-push relay tasks can be defined, persisted, and managed through an API. Static file serving means the same daemon can hand out recorded FLV files as video-on-demand, so no separate web server is required for playback of archived material.

Key capabilities

  • HTTP and HTTP/2-FLV push and play, plus WebSocket and secure WebSocket FLV transport.
  • RTMP and RTMPS ingest and playback.
  • GOP cache for lower join latency on live streams.
  • Authentication for publish and play, with command-line flags to force each on.
  • Notification hooks that POST events to a configured webhook URL.
  • Recording of live streams to FLV files, either automatically on every publish or on demand through the webadmin or POST /api/v1/streams/{app}/{name}/record.
  • REST API system introduced in v4.2.0, covering stream and session management, relay tasks, monitoring, statistics, and health checks.
  • Web Admin UI introduced in v4.3.0 with dashboard, streams, records, history, relay, and settings pages.

Who uses it and how

  • Broadcasters ingesting from OBS or similar RTMP clients through the RTMP or RTMPS port, then distributing playback to browsers over HTTP-FLV or WebSocket-FLV.
  • Operators running relay tasks that pull an RTSP or RTMP source and republish it to another endpoint, with task definitions persisted and managed via the REST API.
  • Teams recording streams to FLV and serving them back as on-demand video by pointing the recording path inside the static file server root, addressed as /record/live/stream/unix_time.flv.
  • Administrators using the webadmin console at /admin, protected by username and password login with scrypt hashing and login rate limiting, to inspect sessions, download recorded files, search history by stream path, IP, or time range, and review bandwidth statistics.
  • Deployments that need JWT-based API authentication and graceful shutdown, typically alongside external monitoring that consumes the health endpoints.

Getting started

Install globally with npm install node-media-server -g, or run without installing via npx node-media-server. Configuration is read from a JSON file (default `

project readme (upstream, from github) — read inline

Node-Media-Server v4

npm npm npm npm

Introduction

Node-Media-Server is a high-performance/low-latency/open-source Live Streaming Server developed based on Nodejs.
v4 is design to implement enhanced RTMP FLV v1 support for native HEVC, VP9, AV1.
v4 is no longer compatible with the cn_cdn extension id flv_265 standard.
v4 is no longer compatible with flashplayer's rtmp protocol.
v4 is incompatible with v2. Do not upgrade across major versions.

Installation

npm install node-media-server -g

or run directly

npx node-media-server

Cli Options

Options:
  -c, --config <path>    Path to the config file (default: bin/config.json)
  -b, --bind <addr>      Bind address, overrides the "bind" config value
      --rtmp-port <n>    RTMP port, overrides rtmp.port
      --rtmps-port <n>   RTMPS port, overrides rtmps.port
      --http-port <n>    HTTP/WebSocket port, overrides http.port
      --https-port <n>   HTTPS/WSS port, overrides https.port
      --data-path <path> Runtime data directory, overrides store.path
      --record-path <p>  Record output directory, overrides record.path
      --record-auto      Enable auto recording, forces record.auto on
      --notify-url <url> Event webhook URL, overrides notify.url
      --auth-play        Enable play authentication, forces auth.play on
      --auth-publish     Enable publish authentication, forces auth.publish on
      --no-admin         Disable the webadmin console (/admin), media only
  -h, --help             Show this help

Command line values take precedence over config file values and are
never written back to the config file.

WebAdmin

Features

  • HTTP/HTTP2-flv Push/Play
  • WS/WSS-flv Push/Play
  • RTMP/RTMPS Push/Play
  • GOP cache
  • Notification
  • Authentication
  • Static file server
  • Record to flv file
  • REST API System (New in v4.2.0)
  • JWT-based Authentication (New in v4.2.0)
  • Real-time Monitoring & Statistics (New in v4.2.0)
  • Session Management (New in v4.2.0)
  • Session Deletion (New in v4.2.0)
  • Advanced Health Monitoring (New in v4.2.0)
  • RTSP/RTMP Relay Tasks with persistence and management API (New in v4.3.0)
  • Web Admin UI with Dashboard, Streams, Records, History, Relay and Settings (New in v4.3.0)
  • Username/Password Login with scrypt hashing and login rate limiting (New in v4.3.0)
  • Configuration Management API with validation (New in v4.3.0)
  • Change Password API (New in v4.3.0)
  • Record File Download (New in v4.3.0)
  • Record Session Resume within publish grace period (New in v4.3.0)
  • History Search by stream path, IP and time range (New in v4.3.0)
  • Network Bandwidth Statistics (New in v4.3.0)
  • Graceful Shutdown (New in v4.3.0)

Static file services

Node-Media-Server can provide static file services for a directory.

"static": {
    "router": "/",
    "root": "./html"
}

Record to flv file

Node-Media-Server can record live streams as FLV files.
When the static file server is enabled and recordings are saved in its directory.
It can provide video-on-demand services.

"record": {
    "path": "./html/record",
    "auto": true
}

Set "auto": false to disable auto-recording of every published stream; streams can then be recorded on demand via the webadmin streams page or POST /api/v1/streams/{app}/{name}/record.

http://server_ip:8000/record/live/stream/unix_time.flv
or
https://server_ip:8443/record/live/stream/unix_time.flv

REST API System (New in v4.2.0)

Node-Media-Server v4.2.0 provides a REST API system for server management and monitoring, featuring:

  • JWT-based authentication with challenge-response login
  • Stream and session management
  • Relay (RTSP pull / RTMP pull-push) task management
  • Real-time monitoring & statistics
  • Advanced health monitoring

See the full API documentation in docs/api.md.

Supported clients

Client H.264 HEVC VP9 AV1
OBS_29.1+
FFmpeg/FFplay_6.1+
NodePlayer.js_1.0+
NodeMediaClient_3.0+

QLive

Free Android Live Streaming App

NodePlayer.js pure javascript implementation live streaming player

Online Demo

  • ASM.js, WASM, SIMD, WebWorker, WebCodecs, MediaSource multiple technical implementations
  • H.264/H.265+AAC/G711 software and hardware decoder
  • Ultra-low latency, Under extreme conditions less than 100 milliseconds
  • Enhanced HTTP/WS-FLV Protocol, Natively support h.265
  • Android/iOS/HarmonyOS/Chrome/Edge/Firefox/Safari, All modern browsers or platforms

NodePublisher.js pure javascript implementation live streaming publisher

  • WebSocket-FLV Protocol
  • H.264+AAC hardware encoder
  • Only chrome or chromium based browsers are supported at the moment
  • wss is required

NodeMediaClient-iOS iOS live streaming player and publisher SDK

  • Objective-C/Swift
  • RTMP/HTTP-FLV/RTSP
  • H.264/H.265+AAC/OPUS/G711
  • Ultra-low latency, Under extreme conditions less than 100 milliseconds
  • Enhanced RTMP/FLV Protocol, Natively support H.265/OPUS
  • Built-in beauty filter

NodeMediaClient-Android Android live streaming player and publisher SDK

  • JAVA/Kotlin
  • armv7/arm64/x86/x86_64
  • RTMP/HTTP-FLV/RTSP
  • H.264/H.265+AAC/OPUS/G711
  • Ultra-low latency, Under extreme conditions less than 100 milliseconds
  • Enhanced RTMP/FLV Protocol, Natively support H.265/OPUS
  • Built-in beauty filter

expo-nodemediaclient Expo module for NodeMediaClient

  • iOS and Android
  • player and publisher

License

Apache 2.0

Frequently asked questions

Is Node-Media-Server free to use?

Node-Media-Server is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does Node-Media-Server do?

A Node.js implementation of RTMP/HTTP-FLV Media Server

What is Node-Media-Server written in?

Node-Media-Server is primarily written in JavaScript. Its source is publicly available at https://github.com/illuspas/Node-Media-Server, and it has 6,244 GitHub stars.