Connect NOALBS to OpenRTMP statistics
+Configure the native OpenRTMP provider in NOALBS v2.19.0 or newer, understand bitrate and RTT values, use the XML fallback, and troubleshoot container or proxy connectivity.
+ Read the statistics guide → +Configure the native OpenRTMP provider in NOALBS v2.19.0 or newer, understand bitrate and RTT values, use the XML fallback, and troubleshoot container or proxy connectivity.
+ Read the statistics guide → +Connect NOALBS to the key-protected OpenRTMP statistics endpoint, configure bitrate and RTT triggers, and keep the nginx-compatible XML endpoint as a fallback for older NOALBS versions or existing integrations.
+OpenRTMP provider. It reads /stats?key=... directly and uses OpenRTMP's bitrate_kbps and rtt_ms values for scene switching.librtmp2-server instance with its HTTP listener reachable from NOALBS.stats_key.The OpenRTMP server and protocol stack are still alpha software. Test the exact publisher, statistics, reconnect, and scene-switching workflow before relying on it for a critical production stream.
+ +The easiest option is librtmp2-server-panel. Create a stream in the panel and copy its statistics URL or stats_key.
You can also create a stream with the REST API:
+curl -X POST http://openrtmp-server:8080/api/v1/streams \
+ -H "Authorization: Bearer <api_token>" \
+ -H "Content-Type: application/json" \
+ -d '{"id":"mobile","name":"Mobile ingest","app":"live"}'
+ The response contains three separate credentials:
+{
+ "id": "mobile",
+ "name": "Mobile ingest",
+ "app": "live",
+ "publish_key": "live_REDACTED_EXAMPLE",
+ "play_key": "play_REDACTED_EXAMPLE",
+ "stats_key": "sts_REDACTED_EXAMPLE",
+ "enabled": true
+}
+
+ | Key | Purpose | Where to use it |
|---|---|---|
publish_key | Authorizes a publisher. | OBS, FFmpeg, Moblin, or another RTMP/RTMPS publishing client. |
play_key | Authorizes playback. | OBS media sources, players, or relay consumers that pull the stream. |
stats_key | Authorizes access to statistics for one stream. | NOALBS, monitoring tools, dashboards, and direct statistics checks. |
stats_key. Never place the API bearer token, publish_key, or play_key in the NOALBS statistics URL.The public per-stream endpoint is:
+http://openrtmp-server:8080/stats?key=sts_REDACTED_EXAMPLE
+ While the publisher is live, the response is a flat JSON object suitable for the native NOALBS provider:
+{
+ "uptime": 18,
+ "bitrate_kbps": 10565.5,
+ "rtt_ms": 100.4,
+ "bytes_in": 34618510,
+ "video": {
+ "codec": "hvc1",
+ "width": 1920,
+ "height": 1080,
+ "fps": 30.0
+ },
+ "audio": {
+ "codec": "Opus"
+ }
+}
+ The key-protected public endpoint intentionally omits the stream ID, display name, application name, players, and server-wide summary. Administrative API endpoints can expose more detail when authenticated with the API bearer token.
+ +| Field | Meaning |
|---|---|
bitrate_kbps | Current incoming publisher bitrate in kilobits per second. NOALBS compares this value with the low and offline thresholds. |
rtt_ms | Current publisher round-trip time in milliseconds. NOALBS compares this value with the rtt and rttOffline thresholds. |
uptime | Publisher connection duration in seconds. |
bytes_in | Total media bytes received from the current publisher connection. |
Add an OpenRTMP stream server entry to NOALBS. The complete statsUrl must include the stream's stats_key:
{
+ "switcher": {
+ "triggers": {
+ "low": 2500,
+ "offline": 500,
+ "rtt": 200,
+ "rttOffline": 2000
+ },
+ "streamServers": [
+ {
+ "name": "openrtmp",
+ "priority": 0,
+ "enabled": true,
+ "streamServer": {
+ "type": "OpenRTMP",
+ "statsUrl": "http://openrtmp-server:8080/stats?key=sts_REDACTED_EXAMPLE"
+ }
+ }
+ ]
+ }
+}
+ The thresholds belong in switcher.triggers, not inside the provider object:
low: switch to the low-bitrate scene when bitrate_kbps is at or below this value.offline: switch to the offline scene when a positive bitrate_kbps is at or below this value.rtt: switch to the low-bitrate scene when rtt_ms is at or above this value.rttOffline: switch to the offline scene when rtt_ms is at or above this value.If the stream is offline, the endpoint does not return the live JSON object. The native provider treats a non-successful, unreachable, or non-JSON response as offline.
+ +Use the XML endpoint when running an older NOALBS release, preserving an existing Nginx provider configuration, or testing compatibility with software that expects nginx-rtmp statistics:
http://openrtmp-server:8080/stats-nginx?key=sts_REDACTED_EXAMPLE
+ OpenRTMP redacts the real application and stream names in the public XML response. Therefore, the NOALBS provider must use the fixed values live and stream:
{
+ "name": "openrtmp-xml",
+ "priority": 0,
+ "enabled": true,
+ "streamServer": {
+ "type": "Nginx",
+ "statsUrl": "http://openrtmp-server:8080/stats-nginx?key=sts_REDACTED_EXAMPLE",
+ "application": "live",
+ "key": "stream"
+ }
+}
+ The provider's key value above is the literal redacted stream name stream. It is not the OpenRTMP stats_key; that credential remains inside statsUrl.
The URL must be reachable from the machine or container running NOALBS. A URL that works in your desktop browser may still fail from inside a container.
+| Deployment | Recommended host in statsUrl |
|---|---|
| NOALBS and OpenRTMP on the same Docker network | Use the OpenRTMP service or container DNS name, for example http://openrtmp-server:8080/.... |
| NOALBS on the Docker host | Use the published host port, for example http://127.0.0.1:8080/.... |
| NOALBS on another server | Use a private network address, VPN hostname, or protected public HTTPS hostname that the NOALBS machine can resolve and reach. |
| NOALBS in a separate container | Do not use localhost unless OpenRTMP shares the same network namespace. Inside a normal container, localhost points back to NOALBS itself. |
Prefer the internal service name when both applications share a trusted Docker network. Prefer the public HTTPS URL when NOALBS runs remotely and the endpoint is intentionally exposed through a reverse proxy.
+ +sts_REDACTED before posting screenshots, logs, configuration files, or issue reports.statsUrl containing a key to a public repository.Confirm that the query parameter contains the stream's exact stats_key. Also check whether a reverse proxy has added its own authentication requirement or removed the query string while rewriting the request.
Verify the endpoint path and HTTP port. Test /stats?key=... directly against the OpenRTMP HTTP listener before testing the reverse-proxy URL. A proxy location that only forwards another prefix will return 404 even when OpenRTMP is healthy.
The reverse proxy cannot reach the OpenRTMP HTTP service. Check the upstream host, port, Docker network, container health, and whether the proxy is trying to use a public hostname that resolves back to itself. From a containerized proxy, use the correct internal service name and port.
+ +Run the request from the same machine or container as NOALBS. Check DNS resolution, firewall rules, TLS certificate trust, and whether localhost refers to the wrong container. Keep the query string intact.
Hairpin NAT, split DNS, or reverse-proxy routing may make the public hostname unusable from the internal network. Use an internal Docker DNS name, private IP, or internal DNS record in NOALBS while keeping the public URL for browsers and remote integrations.
+ +Use application: "live" and key: "stream" exactly. Do not put the real OpenRTMP application or stream ID in those fields. Confirm that the publisher is live and that the URL points to /stats-nginx, not /stats.
Open the sanitized URL with curl, confirm live bitrate and RTT values, then start NOALBS and verify each threshold with non-critical scenes.