JANUS(1)

πŸ“¦
version 1.4.3 Β· 3 versions
, in alpine 3.24, fedora 43, fedora 44, nixpkgs unstable, ubuntu stonking

πŸ’– JANUS(1) β€” bestie's guide to the WebRTC server/gateway πŸ’–

General Commands Manual ✨ ok so real talk, this is janus(1), and she is that girl.


πŸ¦‹ NAME πŸ¦‹

janus β€” a WebRTC server/gateway, no cap πŸ’…


✨ SYNOPSIS ✨

janus [options]

🌸 DESCRIPTION 🌸

okay so bestie, janus is a WebRTC server/gateway, developed by Meetecho, and the whole vibe is that it's meant to be general purpose. Like, it doesn't do any one thing on its own β€” what it does is implement the means to set up a WebRTC media communication with a browser or application, exchange JSON messages with it over different transports, and relay RTP/RTCP and messages between clients and the server-side application logic they're attached to. Periodt. 🫢

All the actual features? Those come from server side plugins β€” browsers contact them via the server to take advantage of whatever functionality they provide. Examples of such plugins are implementations of things like echo tests, conference bridges, media recorders, SIP gateways and the like. Iconic. πŸ‘‘

And the reason for all of this is simple, fr fr: they wanted something with a small footprint (hence a C implementation) that could only be equipped with what was really needed (hence pluggable modules). It's giving "deploy a full-fledged WebRTC server on the cloud OR a tiny nettop/box to handle one specific use case" β€” and honestly? Versatile. We love her. πŸŽ€


πŸ’… OPTIONS πŸ’…

  • -h, --help β€” print help and exit. Your lil "what do I do" button πŸ₯Ί
  • -V, --version β€” print version and exit ✨
  • -b, --daemon β€” launch Janus in background as a daemon (default=off) 🐚
  • -p, --pid-file=path β€” open the specified PID file when starting Janus (default=none)
  • -N, --disable-stdout β€” disable stdout based logging (default=off) 🀫
  • --log-stdout β€” log to stdout, even when the process is daemonized (default=off)
  • -L, --log-file=path β€” log to the specified file (default=stdout only) πŸ“
  • -R, --log-rotate-sig=signal β€” signal to trigger log reloading (e.g., SIGUSR1) (default=none) πŸ”„
  • -l, --check-openfiles-limits=value β€” check if the current limit on the maximum number of allowed open file descriptors matches this value (if not, Janus will close with a failure; default=none) πŸ’€
  • -H, --cwd-path=path β€” working directory for Janus daemon process (default=/)
  • -i, --interface=ipaddress β€” interface to use (will be the public IP) 🌐
  • -P, --plugins-folder=path β€” plugins folder (default=./plugins) 🧩
  • -C, --config=filename β€” configuration file to use
  • -F, --configs-folder=path β€” configuration files folder (default=./conf) πŸ“
  • -c, --cert-pem=filename β€” DTLS certificate πŸ”
  • -k, --cert-key=filename β€” DTLS certificate key πŸ”‘
  • -K, --cert-pwd=text β€” DTLS certificate key passphrase (if needed)
  • -S, --stun-server=address:port β€” STUN server(:port) to use, if needed (e.g., Janus behind NAT, default=none) πŸ›°οΈ
  • -1, --nat-1-1=ips β€” comma-separated list of public IPs to put in all host candidates, assuming a 1:1 NAT is in place (e.g., Amazon EC2 instances, default=none)
  • -2, --keep-private-host β€” when nat-1-1 is used (e.g., Amazon EC2 instances), don't remove the private host, but keep both to simulate STUN (default=off)
  • -E, --ice-enforce-list=list β€” comma-separated list of the only interfaces to use for ICE gathering; partial strings are supported (e.g., eth0 or eno1,wlan0, default=none)
  • -X, --ice-ignore-list=list β€” comma-separated list of interfaces or IP addresses to ignore for ICE gathering; partial strings are supported (e.g., vmnet8,192.168.0.1,10.0.0.1 or vmnet,192.168., default=vmnet)
  • -6, --ipv6-candidates β€” whether to enable IPv6 candidates or not (default=off)
  • -O, --ipv6-link-local β€” whether IPv6 link-local candidates should be gathered as well (default=off)
  • -l, --libnice-debug β€” whether to enable libnice debugging or not (default=off) πŸ›
  • -f, --full-trickle β€” do full-trickle instead of half-trickle (default=off)
  • -I, --ice-lite β€” whether to enable the ICE Lite mode or not (default=off)
  • -T, --ice-tcp β€” whether to enable ICE-TCP or not (warning: only works with ICE Lite) (default=off) ⚠️
  • -Q, --min-nack-queue=number β€” minimum size of the NACK queue (in ms) per user for retransmissions, no matter the RTT
  • -t, --no-media-timer=number β€” time (in s) that should pass with no media (audio or video) being received before Janus notifies you about this ⏰
  • -W, --slowlink-threshold=number β€” number of lost packets (per s) that should trigger a slowlink Janus API event to users (default=0, feature disabled)
  • -r, --rtp-port-range=min-max β€” port range to use for RTP/RTCP
  • -B, --twcc-period=number β€” how often (in ms) to send TWCC feedback back to senders, if negotiated (default=200ms)
  • -n, --server-name=name β€” public name of this Janus instance (default=MyJanusInstance) πŸ’«
  • -s, --session-timeout=number β€” session timeout value, in seconds (default=60)
  • -m, --reclaim-session-timeout=number β€” reclaim session timeout value, in seconds (default=0)
  • -d, --debug-level=1-7 β€” debug/logging level (0=disable debugging, 7=maximum debug level; default=4) πŸ”
  • -D, --debug-timestamps β€” enable debug/logging timestamps (default=off) πŸ•°οΈ
  • -o, --disable-colors β€” disable color in the logging (default=off) 🌈➑️⬜
  • -M, --debug-locks β€” enable debugging of locks/mutexes (very verbose! default=off) πŸ—£οΈ
  • -a, --apisecret=randomstring β€” API secret all requests need to pass in order to be accepted by Janus (useful when wrapping Janus API requests in a server, none by default) πŸ”
  • -A, --token-auth β€” enable token-based authentication for all requests (default=off) 🎟️
  • -e, --event-handlers β€” enable event handlers (default=off) πŸ“£
  • -w, --no-webrtc-encryption β€” disable WebRTC encryption, so no DTLS or SRTP (only for debugging!) (default=off)
bestie listen. that last one? -w? that is for DEBUGGING ONLY. do not ship that. do not. I'm begging. πŸ™ˆ

🌈 EXAMPLES 🌈

janus

Launch Janus with all options from configurations files 🫢

janus -b -L /tmp/januslog

Launch Janus as a daemon and log to the specified file πŸ“

janus -6

Launch Janus with IPv6 support enabled 🌐

janus -f

Launch Janus with full-trickle enabled ✨


πŸ› BUGS πŸ›

If you think you found a bug or want to contribute a feature, you can issue or a pull request on https://github.com/meetecho/janus-gateway/issues.

Anyway, before doing that make sure you read the documentation at https://janus.conf.meetecho.com/docs/ and that it has not been discussed already at https://janus.discourse.group/. We only use Github for code issues, and NOT for configuration or usage issues: use the group for that. πŸ‘€ (fr fr, read first, then post β€” the way that saves everyone's time is unmatched)


πŸ‘€ SEE ALSO πŸ‘€


πŸ’œ AUTHORS πŸ’œ

Lorenzo Miniero (lorenzo@meetecho.com) 🫢


and that's the whole page, bestie!! this lil beauty lives in the General Commands Manual, filed under JANUS(1) β€” footer says JANUS(1) too, so you know it's official πŸ’… go build something iconic with her, mwah πŸ’–βœ¨πŸŽ€

πŸ“¦ where this page comes from