Skip to content

Plugin files ​

One file per plugin, named janus.plugin.<name>.jcfg. Plugin behaviour is on the plugin pages. The Lua and Duktape plugins only load when their file names a script in general.script.

How to read the tables

Sample is the value in the C sample file. In the port says whether the Rust source mentions the key as a string (read) or not (not found). It is a grep, not a proof: a key that is "read" may be read only in some modes, and a key that is "not found" is accepted and ignored with a warning, as the compatibility notes describe.

EchoTest ​

File: janus.plugin.echotest.jcfg in the configs folder. Sample: conf/janus.plugin.echotest.jcfg.sample in the C repo.

(top level) ​

KeySampleMeaningIn the port
eventstrue|false, whether events should be sent to event handlersread

general ​

KeySampleMeaningIn the port
eventsfalse (commented out)read

VideoRoom ​

File: janus.plugin.videoroom.jcfg in the configs folder. Sample: conf/janus.plugin.videoroom.jcfg.sample in the C repo.

}

room-<unique room ID> ​

KeySampleMeaningIn the port
descriptionThis is my awesome room (commented out)read
is_privatetrue|false (whether this room should be in the public list, default=true)read
secret<optional password needed for manipulating (e.g. destroying) the room>read
pin<optional password needed for joining the room>read
require_pvtidtrue|false (whether subscriptions are required to provide a valid private_id to associate with a publisher, default=false)read
signed_tokenstrue|false (whether access to the room requires signed tokens; default=false, only works if signed tokens are used in the core as well)read
publishers<max number of concurrent senders> (e.g., 6 for a video conference or 1 for a webinar)read
bitrate<max video bitrate for senders> (e.g., 128000)read
bitrate_captrue|false (whether the above cap should act as a hard limit to dynamic bitrate changes by publishers; default=false, publishers can go beyond that)read
fir_freq<send a FIR to publishers every fir_freq seconds> (0=disable)read
audiocodecopus|g722|pcmu|pcma|isac32|isac16 (audio codec(s) to force on publishers, default=opus can be a comma separated list in order of preference, e.g., opus,pcmu)read
videocodecvp8|vp9|h264|av1|h265 (video codec(s) to force on publishers, default=vp8 can be a comma separated list in order of preference, e.g., vp9,vp8,h264)read
vp9_profileVP9-specific profile to prefer (e.g., "2" for "profile-id=2")read
h264_profileH.264-specific profile to prefer (e.g., "42e01f" for "profile-level-id=42e01f")read
opus_fectrue|false (whether inband FEC must be negotiated; only works for Opus, default=true)read
opus_dtxtrue|false (whether DTX must be negotiated; only works for Opus, default=false)read
audiolevel_exttrue|false (whether the ssrc-audio-level RTP extension must be negotiated/used or not for new publishers, default=true)read
audiolevel_eventtrue|false (whether to emit event to other users or not, default=false)read
audio_active_packets100 (number of packets with audio level, default=100, 2 seconds)read
audio_level_average25 (average value of audio level, 127=muted, 0='too loud', default=25)read
videoorient_exttrue|false (whether the video-orientation RTP extension must be negotiated/used or not for new publishers, default=true)read
playoutdelay_exttrue|false (whether the playout-delay RTP extension must be negotiated/used or not for new publishers, default=true)read
transport_wide_cc_exttrue|false (whether the transport wide CC RTP extension must be negotiated/used or not for new publishers, default=true)read
recordtrue|false (whether this room should be recorded, default=false)read
rec_dir<folder where recordings should be stored, when enabled>read
lock_recordtrue|false (whether recording can only be started/stopped if the secret is provided, or using the global enable_recording request, default=false)read
notify_joiningtrue|false (optional, whether to notify all participants when a new participant joins the room. The Videoroom plugin by design only notifies new feeds (publishers), and enabling this may result extra notification traffic. This flag is particularly useful when enabled with require_pvtid for admin to manage listening only participants. default=false)read
require_e2eetrue|false (whether all participants are required to publish and subscribe using end-to-end media encryption, e.g., via Insertable Streams; default=false)read
dummy_publishertrue|false (whether a dummy publisher should be created in this room, with one separate m-line for each codec supported in the room; this is useful when there's a need to create subscriptions with placeholders for some or all m-lines, even when they aren't used yet; default=false)read
dummy_streamsin case dummy_publisher is set to true, array of codecs to offer, (commented out)optionally with a fmtp attribute to match (codec/fmtp properties). If not provided, all codecs enabled in the room are offered, with no fmtp. Notice that the fmtp is parsed, and only a few codecs are supported.read
dummy_e2eetrue|false (whether the dummy publisher should be advertised as supporting end-to-end encryption; default=value of room's require_e2ee)read
threadsnumber of threads to assist with the relaying of publishers in the room; as (commented out)in the Streaming plugin, this setting can help if you expect a lot of subscribers that may cause the plugin to slow down and fail to catch up (default=0)read

general ​

KeySampleMeaningIn the port
admin_key"supersecret" (commented out)If set, rooms can be created via API only if this key is provided in the requestread
lock_rtp_forwardtrue (commented out)Whether the admin_key above should be enforced for RTP forwarding requests toonot found
eventsfalse (commented out)Whether events should be sent to event handlers (default=true)read
string_idstrue (commented out)By default, integers are used as a unique ID for both rooms and participants. In case you want to use strings instead (e.g., a UUID), set string_ids to true.read

room-1234 ​

KeySampleMeaningIn the port
description"Demo Room"read
secret"adminpwd"read
publishers6read
bitrate128000This is a low cap, increase if you want to use simulcast or SVCread
fir_freq10read
audiocodec"opus" (commented out)read
videocodec"vp8" (commented out)read
recordfalseread
rec_dir"/path/to/recordings-folder" (commented out)read

VideoCall ​

File: janus.plugin.videocall.jcfg in the configs folder. Sample: conf/janus.plugin.videocall.jcfg.sample in the C repo.

(top level) ​

KeySampleMeaningIn the port
eventstrue|false, whether events should be sent to event handlersread

general ​

KeySampleMeaningIn the port
eventsfalse (commented out)read

Streaming ​

File: janus.plugin.streaming.jcfg in the configs folder. Sample: conf/janus.plugin.streaming.jcfg.sample.in in the C repo.

You can configure static mountpoints that should be made available when Janus starts in this configuration file. The syntax and the available properties are listed below. Notice that, for the sake of simplicity, only the global and legacy properties are listed in the following text: you can use the new stream-based syntax as well (see the 'multistream-test' example below for reference), but in that case all properties whose names start with audio/video/data should be renamed to have that prefix removed. Please refer to the Streaming plugin documentation for more details, as the static configuration in that case mirrors the dynamic API syntax. Note: by default, the Streaming plugin only forwards the latest packets it receives, never performing any buffering. This means that, for video streams, new viewers may initially start receiving frames they cannot decode right away, since they'd refer to keyframes that were sent before they joined. In such scenarios, they'd have to wait until the next keyframe arrives before video can be decoded and displayed, which could take a while depending on the frequency of keyframes encoded by the source. For forwarded streams (e.g., from the VideoRoom) this can be easily addressed by using the RTCP support. For sources that can't or won't honour dynamic keyframe requests, a partial and experimental solution might be storing the latest keyframe and the following deltas, to send to new viewers before new live packet are delivered. This feature can be enabled in the Streaming plugin using the 'bufferkf_ms' and/or the 'bufferkf_bytes' properties, which configure how many milliseconds or how many bytes (in total) should be stored any time a keyframe is received: data exceeding those limits won't be stored, until a new keyframe arrives. The two properties are not mutually exclusive, and can be configured at the same time: in that case, the first one that hits the limit stops the buffering of the current keyframe. Notice that, again, this feature should be considered highly experimental, and that it comes with a few considerable drawbacks: the most obvious one is that, depending on how many packets were stored, new viewers may be hit with a considerable burst of data as soon as they connect, which may negatively impact performance or even cause issues of its own. Also notice that this is a global, and not per-stream, feature: this means that if you create a mountpoint with two video streams, the feature will impact both of them, and both streams will have a buffer of their own. This also works for RTSP mountpoints. In case you want to use SRTP for your RTP-based mountpoint, you'll need to configure the SRTP-related properties as well, namely the suite to use for hashing (32 or 80) and the crypto information for decrypting the stream (as a base64 encoded string the way SDES does it). Notice that with SRTP involved you'll have to pay extra attention to what you feed the mountpoint, as you may risk getting SRTP decrypt errors: The Streaming plugin can also be used to (re)stream media that has been encrypted using something that can be consumed via Insertable Streams. In that case, we only need to be aware of it, so that we can send the info along with the SDP. How to decrypt the media is out of scope, and up to the application since, again, this is end-to-end encryption and so neither Janus nor the Streaming plugin have access to anything. DO NOT SET THIS PROPERTY IF YOU DON'T KNOW WHAT YOU'RE DOING! To allow mountpoints to negotiate the playout-delay RTP extension, you can set the 'playoutdelay_ext' property to true: this way, any subscriber can customize the playout delay of incoming video streams, assuming the browser supports the RTP extension in the first place. To allow mountpoints to negotiate the abs-capture-time RTP extension, you can set the 'abscapturetime_src_ext_id' property to value in range 1..14 inclusive: this way, any subscriber can receive the abs-capture-time of incoming RTP streams, assuming the browser supports the RTP extension in the first place. Incoming RTP stream should provide abs-capture-time exactly in the same header id. The following options are only valid for the 'rtsp' type: Notice that, for 'rtsp' mountpoints, normally the plugin uses the exact SDP codec and fmtp attributes the remote camera or RTSP server sent. In case the values set remotely are known to conflict with WebRTC viewers, you can override both using the settings introduced above. To test the 'gstreamer-sample' example, check the test_gstreamer.sh script in the plugins/streams folder. The live and on-demand audio file streams, use a couple of files (radio.alaw, music.mulaw) that are provided in the plugins/streams folder. }

stream-name ​

KeySampleMeaningIn the port
typertp|live|ondemand|rtsp rtp = stream originated by an external tool (e.g., gstreamer or ffmpeg) and sent to the plugin via RTP live = local file streamed live to multiple listeners (multiple listeners = same streaming context) ondemand = local file streamed on-demand to a single listener (multiple listeners = different streaming contexts) rtsp = stream originated by an external RTSP feed (only available if libcurl support was compiled)read
id<unique numeric ID> (if missing, a random one will be generated)read
descriptionThis is my awesome stream (commented out)read
metadataAn optional string that can contain any metadata (e.g., JSON) associated with the stream you want users to receiveread
is_privatetrue|false (private streams don't appear when you do a 'list' request)read
secret<optional password needed for manipulating (e.g., destroying or enabling/disabling) the stream>read
pin<optional password needed for watching the stream>read
filenamepath to the local file to stream (only for live/ondemand)read
audiotrue|false (do/don't stream audio)read
videotrue|false (do/don't stream video) The following options are only valid for the 'rtp' type:read
datatrue|false (do/don't stream text via datachannels)read
audioportlocal port for receiving audio frames (commented out)read
audiortcpportlocal port, if any, for receiving and sending audio RTCP feedback (commented out)read
audiomcastmulticast group port for receiving audio frames, if any (commented out)read
audioifacenetwork interface or IP address to bind to, if any (binds to all otherwise)read
audiopt<audio RTP payload type> (e.g., 111)read
audiocodecname of the audio codec (e.g., opus)read
audioskewtrue|false (whether the plugin should perform skew analisys and compensation on incoming audio RTP stream, EXPERIMENTAL)read
videoportlocal port for receiving video frames (commented out)read
videortcpportlocal port, if any, for receiving and sending video RTCP feedback (commented out)read
videomcastmulticast group port for receiving video frames, if any (commented out)read
videoifacenetwork interface or IP address to bind to, if any (binds to all otherwise)read
videopt<video RTP payload type> (e.g., 100)read
videocodecname of the video codec (e.g., vp8)read
videosimulcasttrue|false (do|don't enable video simulcasting)read
videoport2second local port for receiving video frames (only for rtp, and simulcasting)read
videoport3third local port for receiving video frames (only for rtp, and simulcasting)read
videoskewtrue|false (whether the plugin should perform skew analisys and compensation on incoming video RTP stream, EXPERIMENTAL)read
videosvctrue|false (whether the video will have SVC support; works only for VP9-SVC, default=false)read
h264spsif using H.264 as a video codec, value of the sprop-parameter-sets (commented out)that would normally be sent via SDP, but that we'll use to instead manually ingest SPS and PPS packets via RTP for streams that miss itread
collisionin case of collision (more than one SSRC hitting the same port), the plugin will discard incoming RTP packets with a new SSRC unless this many milliseconds passed, which would then change the current SSRC (0=disabled)read
dataportlocal port for receiving data messages to relay (commented out)read
dataifacenetwork interface or IP address to bind to, if any (binds to all otherwise)read
datatypetext|binary (type of data this mountpoint will relay, default=text)read
databuffermsgtrue|false (whether the plugin should store the latest message and send it immediately for new viewers)read
threadsnumber of threads to assist with the relaying part, which can help (commented out)if you expect a lot of viewers that may cause the RTP receiving part in the Streaming plugin to slow down and fail to catch up (default=0)read
bufferkf_mshow many milliseconds of packets to store, starting (commented out)from a new keyframe (default=0)read
bufferkf_byteshow many bytes of packets to store, starting (commented out)from a new keyframe (default=0)read
srtpsuite32 (commented out)read
srtpcryptoWbTBosdVUZqEb6Htqhn+m3z7wUh4RJVR8nE15GbN (commented out)read
e2eetrue (commented out)read
playoutdelay_exttrue (commented out)read
abscapturetime_src_ext_id1 (commented out)read
urlRTSP stream URL (only for restreaming RTSP)read
rtsp_userRTSP authorization username (only if type=rtsp)read
rtsp_pwdRTSP authorization password (only if type=rtsp)read
rtsp_quirkSome RTSP servers offer the stream using only the path, instead of the fully qualified URL. (commented out)If set true, this boolean informs Janus that we should try a path-only DESCRIBE request if the initial request returns 404.read
rtsp_failcheckwhether an error should be returned if connecting to the RTSP server fails (default=true)read
rtspifacenetwork interface or IP address to bind to, if any (binds to all otherwise), when receiving RTSP streamsread
rtsp_reconnect_delayafter n seconds passed and no media assumed, the RTSP server has gone and schedule a reconnect (default=5s)read
rtsp_session_timeoutby default the streaming plugin will check the RTSP connection with an OPTIONS query, (commented out)the value of the timeout comes from the RTSP session initializer and by default this session timeout is the half of this value In some cases this value can be too high (for example more than one minute) because of the media server. In that case this plugin will calculate the timeout with this formula: timeout = min(session_timeout, rtsp_session_timeout / 2). (default=0s)read
rtsp_timeoutcommunication timeout (CURLOPT_TIMEOUT) for cURL call gathering the RTSP information (default=10s)read
rtsp_conn_timeoutconnection timeout for cURL (CURLOPT_CONNECTTIMEOUT) call gathering the RTSP information (default=5s)read
rtsp_notify_changesif set to true, will send an event to connected users when the RTSP session (commented out)gets disconnected, and when it's reconnected (default=false)read
rtsp_fmtp_spswhat the plugin should do it if finds SPS/PPS info in an SDP fmtp attribute sent by the RTSP server; (commented out)the default value is "always", to manually inject them in RTP traffic, as that's what WebRTC endpoints need; to disable this behaviour (e.g., if the camera already sends SPS/PPS in-stream via RTP too) use "never"read

general ​

KeySampleMeaningIn the port
admin_key"supersecret" (commented out)If set, mountpoints can be created via API only if this key is provided in the requestread
rtp_port_range"20000-40000" (commented out)Range of ports to use for RTP/RTCP when '0' is passed as port for a mountpoint (default=10000-60000)read
eventsfalse (commented out)Whether events should be sent to event handlers (default=true)read
string_idstrue (commented out)By default, integers are used as a unique ID for both mountpoints. In case you want to use strings instead (e.g., a UUID), set string_ids to true.read

rtp-sample ​

KeySampleMeaningIn the port
type"rtp"read
id1read
description"Opus/VP8 live stream coming from external source"read
metadata"You can use this metadata section to put any info you want!"read
audiotrueread
videotrueread
audioport5002read
audiopt111read
audiocodec"opus"read
videoport5004read
videopt100read
videocodec"vp8"read
secret"adminpwd"read

multistream-test ​

KeySampleMeaningIn the port
type"rtp"read
id123read
description"Multistream test (1 audio, 2 video)"read
metadata"This is an example of a multistream mountpoint: you'll get an audio stream and two video feeds"read
media(read
mid"a"read
label"Audio stream"read
port5102read
pt111read
codec"opus"read
secret"adminpwd"read

file-live-sample ​

KeySampleMeaningIn the port
type"live"read
id2read
description"Pseudo-live radio broadcast (a-law file source)"read
metadata"This is a pseudo-live stream, whose source is actually a static Opus file on the disk: the Streaming plugin goes through the file in real-time, and sends the frames via RTP. It's pseudo-live because it progresses even when there are no subscribers, and all subscribers get the same audio."read
filename"@streamdir@/radio.alaw"read
audiotrueread
videofalseread
secret"adminpwd"read

file-ondemand-sample ​

KeySampleMeaningIn the port
type"ondemand"read
id3read
description"Remembrance, by Lorenzo Miniero (stereo music, Opus)"read
metadata"This is an on-demand stream, whose source is actually a static Opus file on the disk: when a subscriber opens it, the Streaming plugin starts from the beginning and goes through the file in real-time, and sends the frames via RTP. Unlike the pseudo-live sample, each subscriber opening it will experience a personal playout."read
filename"@streamdir@/remembrance.opus"read
audiotrueread
audiopt100read
audiortpmap"opus/48000/2"read
audiofmtp"stereo=1"read
videofalseread
secret"adminpwd"read

h264-sample ​

KeySampleMeaningIn the port
type"rtp" (commented out)read
id10 (commented out)read
description"H.264 live stream coming from gstreamer" (commented out)read
audiofalse (commented out)read
videotrue (commented out)read
videoport8004 (commented out)read
videopt126 (commented out)read
videocodec"h264" (commented out)read
videofmtp"profile-level-id=42e01f;packetization-mode=1" (commented out)read
secret"adminpwd" (commented out)read

data-example ​

KeySampleMeaningIn the port
type"rtp" (commented out)read
id15 (commented out)read
description"Datachannel stream from an UDP source" (commented out)read
audiofalse (commented out)read
videofalse (commented out)read
datatrue (commented out)read
dataport5008 (commented out)read
datatype"text" (commented out)read
secret"adminpwd" (commented out)read

rtp-multicast ​

KeySampleMeaningIn the port
type"rtp" (commented out)read
id20 (commented out)read
description"Opus/VP8 live multicast stream sample" (commented out)read
audiotrue (commented out)read
videotrue (commented out)read
audioport5002 (commented out)read
audiomcast"232.3.4.5" (commented out)read
audiopt111 (commented out)read
audiocodec"opus" (commented out)read
videoport5004 (commented out)read
videomcast"232.3.4.5" (commented out)read
videopt100 (commented out)read
videocodec"vp8" (commented out)read
secret"adminpwd" (commented out)read

rtsp-test ​

KeySampleMeaningIn the port
type"rtsp" (commented out)read
id99 (commented out)read
description"RTSP Test" (commented out)read
audiofalse (commented out)read
videotrue (commented out)read
url"rtsp://127.0.0.1:8554/unicast" (commented out)read
rtsp_user"username" (commented out)read
rtsp_pwd"password" (commented out)read
secret"adminpwd" (commented out)read
rtsp_reconnect_delay5 (commented out)read
rtsp_session_timeout0 (commented out)read
rtsp_timeout10 (commented out)read
rtsp_conn_timeout5 (commented out)read

RecordPlay ​

File: janus.plugin.recordplay.jcfg in the configs folder. Sample: conf/janus.plugin.recordplay.jcfg.sample.in in the C repo.

(top level) ​

KeySampleMeaningIn the port
pathwhere to place recordings in the file system (commented out)read
admin_keyplugin management secret; if set, private recordings can (commented out)be listed only if this key is provided in the requestread
privatetrue|false, whether recordings should be marked as private by default, meaning they're not returned to users connecting to the plugin unless they provide the right 'admin_key' in the requestread
eventstrue|false, whether events should be sent to event handlersread

general ​

KeySampleMeaningIn the port
path"@recordingsdir@"read
admin_key"supersecret" (commented out)read
privatetrue (commented out)read
eventsfalse (commented out)read

TextRoom ​

File: janus.plugin.textroom.jcfg in the configs folder. Sample: conf/janus.plugin.textroom.jcfg.sample in the C repo.

}

room-<unique room ID> ​

KeySampleMeaningIn the port
descriptionThis is my awesome room (commented out)read
is_privatetrue|false (whether this room should be in the public list, default=true)read
secret<optional password needed for manipulating (e.g. destroying) the room>read
pin<optional password needed for joining the room>read
history<number of messages to store as a history, and send back to new participants (default=0, no history)>read
post<optional backend to contact via HTTP post for all incoming messages>read

general ​

KeySampleMeaningIn the port
admin_key"supersecret" (commented out)If set, rooms can be created via API only if this key is provided in the requestread
json"compact"Whether the data channel JSON messages should be indented (pretty), plain (no indentation) or compact (no indentation and no spaces)read
eventsfalse (commented out)Whether events should be sent to event handlers (default=true)read
string_idstrue (commented out)By default, integers are used as a unique ID for rooms. In case you want to use strings instead (e.g., a UUID), set string_ids to true.read

room-1234 ​

KeySampleMeaningIn the port
description"Demo Room"read
is_privatetrue (commented out)read
secret"adminpwd"read
pin"roompwd" (commented out)read
history10 (commented out)read
post"http://example.com/forward/here" (commented out)read

AudioBridge ​

File: janus.plugin.audiobridge.jcfg in the configs folder. Sample: conf/janus.plugin.audiobridge.jcfg.sample in the C repo.

}

room-<unique room ID> ​

KeySampleMeaningIn the port
description"This is my awesome room" (commented out)read
is_privatetrue|false (whether this room should be in the public list, default=true)read
secret"<optional password needed for manipulating (e.g. destroying) the room>"read
pin"<optional password needed for joining the room>"read
signed_tokenstrue|false (whether access to the room requires signed tokens; default=false, only works if signed tokens are used in the core as well)read
sampling_rate<sampling rate> (e.g., 16000 for wideband mixing)read
spatial_audiotrue|false (if true, the mix will be stereo to spatially place users, default=false)read
use_limitertrue|false (whether to use a limiter to avoid clipping, default=false)read
audiolevel_exttrue|false (whether the ssrc-audio-level RTP extension must be negotiated/used or not for new joins, default=true)read
audiolevel_eventtrue|false (whether to emit event to other users or not, default=false)read
audio_active_packets100 (number of packets with audio level, default=100, 2 seconds)read
audio_level_average25 (average value of audio level, 127=muted, 0='too loud', default=25)read
default_expectedlosspercent of packets we expect participants may miss, to help with outgoing FEC (default=0, max=20; automatically used for forwarders too)read
default_bitratedefault bitrate in bps to use for the all participants (default=0, which means libopus decides; automatically used for forwarders too)read
denoisetrue|false (whether denoising via RNNoise should be performed for each participant by default)read
recordtrue|false (whether this room should be recorded, default=false)read
record_file"/path/to/recording.wav" (where to save the recording)read
record_dir"/path/to/" (path to save the recording to, makes record_file a relative path if provided)read
mjrstrue|false (whether all participants in the room should be individually recorded to mjr files, default=false)read
mjrs_dir"/path/to/" (path to save the mjr files to)read
allow_rtp_participantstrue|false (whether participants should be allowed to join via plain RTP as well, rather than just WebRTC, default=false)read
groupsoptional, non-hierarchical, array of groups to tag participants, for external forwarding purposes only (commented out)The following lines are only needed if you want the mixed audio to be automatically forwarded via plain RTP to an external component (e.g., an ffmpeg script, or a gstreamer pipeline) for processing By default plain RTP is used, SRTP must be configured if neededread
rtp_forward_idnumeric RTP forwarder ID for referencing it via API (optional: random ID used if missing)read
rtp_forward_host"<host address to forward RTP packets of mixed audio to>"read
rtp_forward_host_family"<ipv4|ipv6; by default, first family returned by DNS request>"read
rtp_forward_portport to forward RTP packets of mixed audio to (commented out)read
rtp_forward_ssrcSSRC to use to use when streaming (optional: stream_id used if missing)read
rtp_forward_codecopus (default), pcma (A-Law) or pcmu (mu-Law)read
rtp_forward_ptypepayload type to use when streaming (optional: only read for Opus, 100 used if missing)read
rtp_forward_groupgroup of participants to forward, if enabled in the room (optional: forwards full mix if missing)read
rtp_forward_srtp_suitelength of authentication tag (32 or 80)read
rtp_forward_srtp_crypto"<key to use as crypto (base64 encoded key as in SDES)>"read
rtp_forward_always_ontrue|false, whether silence should be forwarded when the room is empty (optional: false used if missing)read

general ​

KeySampleMeaningIn the port
admin_key"supersecret" (commented out)If set, rooms can be created via API only if this key is provided in the requestread
lock_rtp_forwardtrue (commented out)Whether the admin_key above should be enforced for RTP forwarding requests tooread
lock_play_filetrue (commented out)Whether the admin_key above should be enforced for playing .opus files tooread
record_tmp_ext"tmp" (commented out)Optional temporary extension to add to filenames while recording: e.g., setting "tmp" would mean .wav --> .wav.tmp until the file is closedread
eventsfalse (commented out)Whether events should be sent to event handlers (default=true)read
string_idstrue (commented out)By default, integers are used as a unique ID for both rooms and participants. In case you want to use strings instead (e.g., a UUID), set string_ids to true.read
rtp_port_range"50000-60000" (commented out)Normally, all AudioBridge participants will join by negotiating a WebRTC PeerConnection: the plugin also supports adding participants that will use plain RTP, though, be it for supporting legacy users (e.g., SIP participants who an orchestrator can add to the bridge) or more simply to temporarily inject external audio in a room from a live source. To support plain RTP, the plugin needs to have a range of ports it can bind to: notice this should be configured so that it doesn't conflict with other plugins (e.g., Streaming, SIP, NoSIP) and applications (e.g., Janus itself). The default if you don't specify anything is 10000-60000. In case we need to support plain RTP participants, we'll also need to know what local IP address to bind to for media. If no address is set in the property below, then one will be automatically guessed from the system.read
local_ip"1.2.3.4" (commented out)read

room-1234 ​

KeySampleMeaningIn the port
description"Demo Room"read
secret"adminpwd"read
sampling_rate16000read
recordfalseread
use_limiterfalseread
record_dir"/path/to/" (commented out)read
record_file"recording.wav" (commented out)read

SIP ​

File: janus.plugin.sip.jcfg in the configs folder. Sample: conf/janus.plugin.sip.jcfg.sample in the C repo.

general ​

KeySampleMeaningIn the port
local_ip"1.2.3.4" (commented out)Specify which local IP address to bind to for SIP stack. If not set it will be automatically guessed from the systemread
local_media_ip"1.2.3.4" (commented out)Specify which local IP address to bind for the media stack. If not set it will be automatically set to the value of local_ipread
sdp_ip"1.2.3.4" (commented out)Specify which (public) IP address to advertise in the SDP. If not set, the value above or anything autodetected will be usedread
keepalive_interval120Enable local keep-alives to keep the registration open. Keep-alives are sent in the form of OPTIONS requests, at the given interval inseconds. (0 to disable)read
behind_natfalseIndicate if the server is behind NAT. If so, the server will use STUN to guess its own public IP address and use it in the Contact header of outgoing requestsread
user_agent"Cool WebRTC Gateway" (commented out)User-Agent string to be usedread
register_ttl3600Expiration time for registrationsread
rtp_port_range"20000-40000"Range of ports to use for RTP/RTCP (default=10000-60000)read
eventsfalse (commented out)Whether events should be sent to event handlers (default=true)read
dscp_audio_rtp46 (commented out)If you need DSCP packet marking and prioritization, you can configure the 'dscp_audio_rtp' and/or 'dscp_video_rtp' property to specific values, and the plugin will set it on all outgoing audio/video RTP packets. No packet marking is done if this parameter is undefined or equal to 0read
dscp_video_rtp26 (commented out)read
sips_certs_dir"/etc/sip/certs" (commented out)In case you want to use SIPS for some sessions, Sofia may need to have access to a certificate to use: this is especially true for Sofia >= 1.13, which will fail to create the agent if no certificate is available. By default, Sofia looks for 'agent.pem' and 'cafile.pem' in the '$HOME/.sip/auth' folder, but you can specify a different one by uncommenting and setting the property below.read
sip_timer_t1x6432000Set the T1x64 timeout value (in milliseconds) used by the SIP transaction engine (default 32000 milliseconds)read
admin_key"supersecret" (commented out)If set, management requests (e.g., creating, listing and destroying RTP forwarders) only work if this key is provided as part of the the requestread

NoSIP ​

File: janus.plugin.nosip.jcfg in the configs folder. Sample: conf/janus.plugin.nosip.jcfg.sample in the C repo.

general ​

KeySampleMeaningIn the port
local_ip"1.2.3.4" (commented out)Specify which local IP address to bind to for media. If not set it will be automatically guessed from the systemread
sdp_ip"1.2.3.4" (commented out)Specify which (public) IP address to advertise in the SDP. If not set, the value above or anything autodetected will be usedread
rtp_port_range"20000-40000"Range of ports to use for RTP/RTCP (default=10000-60000)read
eventsfalse (commented out)Whether events should be sent to event handlers (default=true)read
dscp_audio_rtp46 (commented out)If you need DSCP packet marking and prioritization, you can configure the 'dscp_audio_rtp' and/or 'dscp_video_rtp' property to specific values, and the plugin will set it on all outgoing audio/video RTP packets. No packet marking is done if this parameter is undefined or equal to 0read
dscp_video_rtp26 (commented out)not found
admin_key"supersecret" (commented out)If set, management requests (e.g., creating, listing and destroying RTP forwarders) only work if this key is provided as part of the the requestread

Lua ​

File: janus.plugin.lua.jcfg in the configs folder. Sample: conf/janus.plugin.lua.jcfg.sample.in in the C repo.

The only things you configure in here are which lua script to load and, optionally, the paths to add for searching libraries and a configuration file, if the script will need it. For what concerns the libraries path, by default this configuration file adds a path to where the Lua samples have been installed, as it contains a couple of helper libraries the samples use; should you be interested in adding more, just add other paths separated by a semicolon. Due to the syntax of the configuration file, make sure you escape all semicolons with a trailing slash, in case. The 'config' property is entirely script specific, instead: if your script will need to rely on an XML configuration file in its initialization, for instance, then set the 'config' property as the path to the file; it will be passed, as is, to your script in the init() call. None of the samples use this property, which is why it's commented out.

general ​

KeySampleMeaningIn the port
path"@luadir@"read
script"@luadir@/echotest.lua"read
config"/path/to/configfile" (commented out)read

Duktape (JavaScript) ​

File: janus.plugin.duktape.jcfg in the configs folder. Sample: conf/janus.plugin.duktape.jcfg.sample.in in the C repo.

The only things you configure in here are which JavaScipt file to load and, optionally, the paths to add for searching libraries and a configuration file, if the script will need it. For what concerns the libraries path, by default this configuration file adds a path to where the JS samples have been installed, as it contains a couple of helper libraries the samples use; should you be interested in adding more, just add other paths separated by a semicolon. Due to the syntax of the configuration file, make sure you escape all semicolons with a trailing slash, in case. The 'config' property is entirely script specific, instead: if your script will need to rely on an XML configuration file in its initialization, for instance, then set the 'config' property as the path to the file; it will be passed, as is, to your script in the init() call. None of the samples use this property, which is why it's commented out.

general ​

KeySampleMeaningIn the port
path"@duktapedir@"read
script"@duktapedir@/echotest.js"read
config"/path/to/configfile" (commented out)read

GPL-3.0-or-later, like the Janus gateway it ports.