JPPS

Ports and Troubleshooting

Ports and Troubleshooting

Firewall / port reference

WhatPortDirectionNotes
Web dashboard8080Inbound to gatewayYour browser connects here
Source ingest (SRT/RTMP/UDP-TS/RIST)5000 + NInbound to gateway, from the fieldShown on each source's card
Return feed (all sources, shared)5000Inbound to gateway, from the fieldOne shared port, sources tell themselves apart by a stream ID — nothing you need to configure
vMix/OBS destination slots12000 + (N × 10) + slot (e.g. the first destination's 3 slots are 12011/12012/12013)Outbound from gateway, to your local networkShown on each destination's card
vMix/OBS destination program-out14000 (fixed)Outbound from gatewaySame port on every vMix/OBS destination, always — not overridable from the dashboard (two destinations sharing one physical host will collide; see below)
Single-feed destination (Epiphan/RTMP/RIST)whatever you setOutbound from gatewayYou choose this when adding the destination

What N means, and whether it's stable: each source and each destination gets a slot number the first time you add it (1st added = 1, 2nd = 2, and so on), and that number — and therefore its port — never changes for as long as that entry exists. Deleting an entry frees its number for reuse; the next new source/destination you add takes the lowest free number, which could be one a deleted entry used to have. So: your existing sources/destinations never have their ports move out from under them, but a brand-new one can land on a port a previous, now-deleted one used to occupy — worth knowing if you keep your own notes on which physical encoder uses which port.

Key thing to remember: sources always call in to the gateway (so the gateway's public-facing firewall needs those inbound rules); everything on the destination side, the gateway always calls out — nothing on your local vMix/OBS network needs an inbound rule from the internet, only from the gateway itself.

Which IP those inbound ports actually listen on is picked in the Setup tab's "Gateway interface" column — one network interface, chosen from a list of what's actually detected on the machine (never a freehand IP entry, so a typo can't wedge ingest onto an address that doesn't exist):

Setup tab — picking the gateway's network interface, alongside Sources and Destinations

One NIC or two? For N sources and D destinations (each destination has 3 slots), every routed stream's bytes pass through the gateway once per hop: ingest = N, slot push = D×3, program-out pull = D×1, and — only if you're using return feeds back to the field — up to N more. A single NIC carries all of it. If you have two network interfaces available, splitting onto both instead (one dedicated to internet-facing source/return traffic, one dedicated to your local vMix/OBS network, picked independently as each destination's own interface) isolates internet jitter/loss from local production traffic and roughly halves what either interface has to carry. Using 6 Mbps as a reference 1080p60 SRT contribution bitrate:

ScaleSingle NIC (no return feeds)Single NIC (return feeds active)Internet-facing NICLocal-network NIC
3 sources, 1 destination42 Mbps60 Mbps36 Mbps24 Mbps
8 sources, 3 destinations120 Mbps168 Mbps96 Mbps72 Mbps

A single 1 Gbps NIC stays comfortably headroomed up to roughly 60 sources and 3 destinations with return feeds active — well past most real deployments. Past that scale, or at a much higher per-source bitrate, splitting across two 1 Gbps interfaces raises the practical ceiling substantially before faster hardware is actually necessary.

Status dots

Every dot reflects a live connection right now, never a cached or saved state. On the Operate tab, this same red/yellow/green signal is shown as a colored border around each tile (a "tally light") instead of a small dot — same three states, same meaning, just more visible at a glance across a busy matrix. The Diagnostics tab shows the same red/yellow/green as a colored dot in its Status column, grouped by source/destination name instead of laid out spatially — see Diagnostics and Signal Flow for what else that view adds beyond just status.

A destination on UDP MPEG-TS doesn't have real connection state (UDP has no handshake) — its dot reflects whether a packet has arrived in the last 2 seconds, not a true connected/disconnected signal. Not configurable.

A source or destination on RTMP/RIST is bridged through an external tool (ffmpeg) rather than handled directly — its dot reflects whether that bridge process is currently running, which is slightly coarser than SRT/UDP's precise per-packet tracking: it can't always distinguish "waiting for a connection" from "actively receiving."

Traffic counters and connection health

Next to the status dot on each source, destination slot, and program-out, you'll see a small traffic stat — bytes transferred, a live bitrate, uptime since the current connection started, and (from the Diagnostics tab) reconnect count and, for native SRT connections, real RTT/packet loss/retransmit numbers. This is the thing that actually proves media is flowing, since a green dot only means a connection is open, not that valid data is coming through it. If a dot is green but the traffic stat stays at 0 B, something upstream is connected but not actually sending — check the encoder's own output status, not the gateway.

Traffic counters exist for every native SRT/UDP relay (source ingest, vMix/OBS destination slots, program-out, the return feed); RTT/packet loss/retransmits specifically only exist for native SRT (not plain UDP-TS) — see Diagnostics and Signal Flow for the full column reference. None of the above exists for single-feed (Epiphan/RTMP/RIST) destinations, which don't have per-packet visibility into the ffmpeg bridge.

Live thumbnails (Operate tab)

Every source and station-program-out tile on Operate shows an actual preview frame from its incoming video, refreshed roughly every 5 seconds — not just a status color. This is the fastest way to confirm "is this actually the right camera/feed," not just "is something connected." A tile that's been green for a while but still shows "no preview" usually means the connection itself is fine but the source isn't sending decodable video yet (e.g. an encoder that connected before it started actually encoding).

Two things worth knowing:

No-signal slate

If a feed has nothing real to send for 5 seconds, the gateway automatically shows a "technical difficulties" slate instead of sending silence — and switches back to the real picture the instant it resumes, with no action needed from you.

Why this matters: a field decoder that receives nothing at all often just reports a plain "connection timed out," which looks exactly like a network problem even when the real cause is something mundane like "the station this return is fed from hasn't started streaming yet." The slate turns that into a clear, visible signal instead — if a field operator sees "technical difficulties" on their return monitor, that alone tells you the problem is on the gateway/production side, not the network.

You can replace the slate image from the Setup tab — the "No-signal slate image" panel sits directly under the gateway interface picker, and shows a live preview of whatever's currently set so you're never uploading blind. Any common image format works, and it's automatically scaled to fit the screen without stretching, whatever its original shape. "Reset to default" restores the built-in one at any time.

Each source's return feed also gets its own live thumbnail now, shown right next to its return-routing control on the Operate tab — so you can see at a glance, right from the dashboard, whether a site is currently getting real content or the slate, without needing to check the field decoder itself.

This is a different thumbnail from a destination's own "Program Out" tile, and they behave differently on purpose:

So if a station goes down: its own Program Out tile goes blank (no change there), while any site whose return is fed from that station switches to showing the slate on its return thumbnail. Once the station's Program Out tile shows real content again, the return thumbnail should follow shortly after.

SRT latency/passphrase overrides

Click SRT settings on a source's card, or Edit ports on a vMix/OBS destination's card, to override the gateway's default SRT latency (120ms) or require a passphrase — only meaningful for SRT-protocol sources/destinations. If a passphrase is set and the other side doesn't present it, the connection is refused outright (not just flagged) — if a source or destination that used to connect suddenly can't, check whether someone set a passphrase here first, before digging into networking.

("SRT settings" and "Edit ports" are different labels for the same kind of thing — both open that card's endpoint configuration overrides, just named for what's most relevant on a source's card vs. a destination's.)

The return feed does not inherit a source's passphrase. A source's SRT settings only protect that source's ingest — the shared return-feed listener (port 5000, every source multiplexed through it) has no per-source latency/passphrase of its own.

Troubleshooting checklist

Source won't connect:

  1. Confirm you're using the exact IP/port shown on the source's card — these are generated per-source, not fixed.
  2. Confirm your encoder is in caller mode (dialing out), not listener — the gateway is always the listener for sources.
  3. For RTMP, double check the stream key/path matches exactly what's shown on the source's own card — a mismatched path is silently rejected.
  4. For RIST, confirm your encoder is in caller mode, not listener — the gateway is always the listener for sources, same as every other protocol.
  5. Check the source's card for SRT settings — if a passphrase is set there, your encoder needs the exact same one or the connection is refused (not just flagged).
  6. Check Diagnostics for that source's Last Error — a bind/listener failure or a rejected connection shows the exact reason there, not just "offline."

Destination won't connect:

  1. Confirm the destination software (vMix/OBS Media Source) is configured as a listener, not a caller — the gateway always calls out to destinations.
  2. Confirm there's no firewall between the gateway and your local network blocking the relevant port.
  3. If you have two destinations on the same physical box, check they aren't both trying to use the shared program-out port (14000) — there's currently no dashboard control to override this per destination. Two options: run the second one on a different host/VM, or (power users) set program_out_port_override for one of the destinations directly in app_config.json and restart the gateway — it isn't exposed in the dashboard yet, but the backend already supports it.
  4. Check the destination's SRT settings (via Edit ports) for a passphrase mismatch, same as sources above.
  5. Check Diagnostics for that destination slot's Last Error — same as sources, a dial failure shows the actual reason (e.g. connection refused, timeout) there.

Video connects but looks wrong / stutters:

Something changed and now nothing works:

Events tab