Janus¶
Status: Current | Last reviewed: 2026-06-03
WebRTC gateway. Bridges browser surfaces to the SIP/RTP world via the SIP plugin.
Image¶
ghcr.io/meetecho/janus-gateway:1.3.x with our overlay. See apps/janus-gateway.
Ports¶
| Port | Purpose |
|---|---|
| 8088 | Admin API (HTTP) |
| 8188 | WebSocket signaling |
| 7088 | Internal admin |
| 20000–20499/UDP | RTP/SRTP for browser sessions |
Note: 8088 is Janus admin, 8087 is Asterisk ARI — the two are easy to confuse.
What it does¶
- Accepts WebRTC offers from surface-app and verizon-demo-app.
- Through the SIP plugin, registers as a SIP UA against Kamailio.
- Forwards audio between WebRTC and RTP.
Nginx WebSocket header strip¶
The Vanguard nginx ingress's /ws location must strip Cookie, User-Agent, and Referer AND re-declare Upgrade / Connection / Host. Nginx's header inheritance rules drop the latter when you proxy_set_header-out the former. Without this, Chrome 502s on SIP registration.
See the vanguard-janus-ws-header-strip memory note.
Vanguard¶
Started by docker-compose.media.yml as tsf-local-janus.
docker logs tsf-local-janus --tail 100 -f
lws (libwebsockets) needs an ulimit wrapper to avoid header-overflow crashes — see the Kind validation flow.
Production¶
Helm chart at charts/janus. hostNetwork: true on the media node pool. Downward API injects status.hostIP for the public ICE candidate.