### Install ktlint with curl
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/rtp/README.md
Installs the ktlint command-line utility using curl. Ensure you have execute permissions and move the binary to a system-wide location.
```bash
curl -sSLO https://github.com/pinterest/ktlint/releases/download/0.34.2/ktlint && chmod a+x ktlint && sudo mv ktlint /usr/local/bin/
```
--------------------------------
### Example curl command with jq
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Demonstrates how to fetch debug information and parse it using `jq`.
```bash
curl http://localhost:8080/debug | jq .
```
--------------------------------
### Install ktlint with curl
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/jitsi-media-transform/README.md
Install the ktlint command-line utility using curl. This command downloads the utility, makes it executable, and moves it to a system-wide location.
```bash
curl -sSLO https://github.com/pinterest/ktlint/releases/download/0.39.0/ktlint && chmod a+x ktlint && sudo mv ktlint /usr/local/bin/
```
--------------------------------
### Install ktlint with Homebrew
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/jitsi-media-transform/README.md
Install the ktlint command-line utility on macOS using Homebrew. This is a convenient alternative for users who manage their development tools with Homebrew.
```bash
brew install ktlint
```
--------------------------------
### Example Advertised Colibri WebSocket URL
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
An example of the Colibri WebSocket URL that should be advertised to clients, visible in the JavaScript console logs under 'session-initiate'. Verify this URL is correct and routes to the appropriate Jitsi Videobridge instance.
```xml
```
--------------------------------
### Stage View Example 2: Multiple Sources with High Definition
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Sets up a stage view where 'A-v0' is in high definition, 'B-v0', 'C-v0', and 'D-v0' are in 180p, and all other sources are disabled. This uses explicit constraints for each specified source and a default constraint of 0 maxHeight.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"onStageSources": ["A-v0"],
"defaultConstraints": { "maxHeight": 0 },
"constraints": {
"A-v0": { "maxHeight": 720 },
"B-v0": { "maxHeight": 180 },
"C-v0": { "maxHeight": 180 },
"D-v0": { "maxHeight": 180 }
}
}
```
--------------------------------
### Legacy Endpoint ID Format Example
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Example of the old message format using endpoint IDs instead of source names. Supports `selectedEndpoints` and `onStageEndpoints`.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"lastN": 2,
"selectedEndpoints": ["A", "B"],
"onStageEndpoints": ["C", "D"],
"defaultConstraints": { "maxHeight": 180 },
"constraints": {
"A": { "maxHeight": 720 },
"B": { "maxHeight": 360 }
}
}
```
--------------------------------
### Stage View Example 1: High Definition on Stage
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configures stage view with source 'A-v0' in high definition and all other sources limited to 180p. This is achieved by setting specific constraints for 'A-v0' and a default constraint for others.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"onStageSources": ["A-v0"],
"defaultConstraints": { "maxHeight": 180 },
"constraints": {
"A-v0": { "maxHeight": 720 }
}
}
```
--------------------------------
### Install ktlint Git pre-commit hook
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/jitsi-media-transform/README.md
Set up a Git pre-commit hook to automatically run ktlint checks before each commit. This ensures code style consistency across the project.
```bash
ktlint --install-git-pre-commit-hook
```
--------------------------------
### Nginx Proxy Configuration for Secure-Octo Relay WebSockets
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
Example Nginx configuration to proxy secure-octo relay WebSocket connections for two Jitsi Videobridge instances (jvb1 and jvb2).
```nginx
# colibri secure-octo relay websockets for jvb1
location ~ ^/colibri-relay-ws/jvb1/(.*) {
proxy_pass http://127.0.0.1:9090/colibri-relay-ws/jvb1/$1$is_args$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
tcp_nodelay on;
}
location ~ ^/colibri-relay-ws/jvb2/(.*) {
proxy_pass http://127.0.0.1:9091/colibri-relay-ws/jvb2/$1$is_args$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host alpha.jitsi.net;
tcp_nodelay on;
}
```
--------------------------------
### List XMPP Client Connections
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-muc-client.md
Lists the IDs of all previously added XMPP client connections using a GET request to the /colibri/muc-client/list endpoint.
```APIDOC
## GET /colibri/muc-client/list
### Description
Retrieves a list of IDs for all configured XMPP client connections.
### Method
GET
### Endpoint
/colibri/muc-client/list
### Response
#### Success Response (200)
Returns a list of strings, where each string is the ID of an XMPP client connection.
```
--------------------------------
### Nginx Proxy Configuration for Colibri WebSockets
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
Example Nginx configuration to proxy WebSocket connections for two Jitsi Videobridge instances (jvb1 and jvb2) running on different ports without TLS.
```nginx
# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/jvb1/(.*) {
proxy_pass http://127.0.0.1:9090/colibri-ws/jvb1/$1$is_args$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
tcp_nodelay on;
}
location ~ ^/colibri-ws/jvb2/(.*) {
proxy_pass http://127.0.0.1:9091/colibri-ws/jvb2/$1$is_args$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host alpha.jitsi.net;
tcp_nodelay on;
}
```
--------------------------------
### Update Endpoint with Transport and Sources Request Body
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-colibri2.md
This example shows how to update an endpoint with its transport details and associated media sources. It includes ICE candidates, web socket information, and fingerprints for secure communication.
```json
{
"endpoints": [
{
"id":"79f0273e",
"transport": {
"transport": {
"candidates": [
{
"generation": "0",
"rel-port": "9",
"component": "1",
"protocol": "udp",
"port": "10000",
"ip": "129.80.210.199",
"foundation": "2",
"id": "653aa1ba295b62480ffffffffdc52c0d9",
"rel-addr": "0.0.0.0",
"priority": "1694498815",
"type": "srflx",
"network": "0"
}
],
"xmlns": "urn:xmpp:jingle:transports:ice-udp:1",
"ufrag": "2ivqh1fvtf0l3h",
"rtcp-mux": true,
"pwd": "1a5ejbent91k6io6a3fauikg22",
"web-sockets": [
"wss://beta-us-ashburn-1-global-2808-jvb-83-102-26.jitsi.net:443/colibri-ws/default-id/3d937bbdf97a23e0/79f0273e?pwd=1a5ejbent91k6io6a3fauikg22"
],
"fingerprints": [
{
"fingerprint": "2E:CC:85:71:32:5B:B5:60:64:C8:F6:7B:6D:45:D4:34:2B:51:A0:06:B5:EA:2F:84:BC:7B:64:1F:A3:0A:69:23",
"setup": "actpass",
"hash": "sha-256",
"cryptex": true
}
]
}
}
}
],
"sources": [
{
"type": "audio",
"id": "jvb-a0",
"sources": [
{ "ssrc":411312308, "name": "jvb-a0", "parameters": { "msid": "mixedmslabel mixedlabelaudio0" } }
]
},
{
"type": "video",
"id": "jvb-v0",
"sources": [
{ "ssrc":3929652146, "name": "jvb-v0", "parameters": { "msid": "mixedmslabel mixedlabelvideo0" } }
]
}
]
}
```
--------------------------------
### List XMPP Client Connection IDs
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-muc-client.md
Retrieve a list of IDs for all previously added XMPP client connections by making a GET request to the /colibri/muc-client/list endpoint.
--------------------------------
### Colibri2 JSON Structure Example
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-colibri2.md
This JSON structure represents conference data, including transport details, web sockets, and fingerprints. It is used in Colibri2 API requests.
```json
{
"conference": {
"id": "79f0273d",
"participants": [
{
"id": "79f0273e",
"colibriClass": "participant",
"state": "active",
"lastN": 80,
"channels": [
{
"id": "79f0273d",
"colibriClass": "channel",
"state": "active",
"content": "audio",
"transport": {
"transport": {
"candidates": [
{
"generation": "0",
"rel-port": "10000",
"component": "1",
"protocol": "udp",
"port": "10000",
"ip": "152.58.154.133",
"foundation": "2",
"id": "c6ac5101f870f0ffffffffcb50fcba",
"rel-addr": "172.18.0.4",
"priority": "1694498815",
"type": "srflx",
"network": "0"
},
{
"generation": "0",
"rel-port": "10000",
"component": "1",
"protocol": "udp",
"port": "10000",
"ip": "152.58.154.133",
"foundation": "2",
"id": "c6ac5101f870f0ffffffffcb50fcba",
"rel-addr": "172.18.0.4",
"priority": "1694498815",
"type": "srflx",
"network": "0"
}
],
"xmlns": "urn:xmpp:jingle:transports:ice-udp:1",
"ufrag": "26ant1ioqu7qnr",
"rtcp-mux": true,
"pwd": "9q8uj7tg6j4rc4i6ulc1pmsq9",
"web-sockets": [
"wss://localhost:8443/colibri-ws/172.18.0.4/7e441eda3701676e/79f0273d?pwd=9q8uj7tg6j4rc4i6ulc1pmsq9"
],
"fingerprints": [
{
"fingerprint": "F1:05:72:F8:F3:F4:B4:65:5B:9A:FC:81:24:11:23:78:D5:42:54:B1:F2:66:2F:82:CC:2B:01:1C:DB:98:BE:C0",
"setup": "actpass",
"hash": "sha-256"
}
]
}
}
}
],
"sources": [
{
"sources": [
{
"ssrc": 3191927963,
"name": "jvb-a0"
}
],
"id": "jvb-a0",
"type": "audio"
},
{
"sources": [
{
"ssrc": 1863439907,
"name": "jvb-v0"
}
],
"id": "jvb-v0",
"type": "video"
}
]
}
]
}
}
```
--------------------------------
### Get Full Conference State via Jicofo Debug Interface
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/relay.md
Retrieve the complete state of a specific conference by providing its ID to the Jicofo debug interface. Remember to escape the '@' symbol in the conference ID.
```bash
curl "http://localhost:8888/debug/conference/test\@conference.example.com" | jq .
```
--------------------------------
### Tile View: 180p and 15fps
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure tile view for all sources to be in 180p resolution and 15 frames per second.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"defaultConstraints": { "maxHeight": 180, "maxFrameRate": 15 }
}
```
--------------------------------
### Build the entire Jitsi Videobridge project
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Use this command to build the complete project using Maven. It compiles all modules and runs tests.
```bash
mvn install
```
--------------------------------
### Get Dominant Speaker Endpoint
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Fetches the dominant speaker identification for a given meeting.
```http
GET /colibri/v2/conferences/{meetingId}/dominant-speaker-identification
```
--------------------------------
### Tile View: 360p
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure tile view for all sources to be in 360p resolution.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"defaultConstraints": { "maxHeight": 360 }
}
```
--------------------------------
### Get Endpoint State
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves the full state of a specific endpoint within a specific conference.
```APIDOC
## GET /debug/CONFERENCE_ID/ENDPOINT_ID
### Description
This includes the full state of a specific endpoint in a specific conference.
### Method
GET
### Endpoint
/debug/CONFERENCE_ID/ENDPOINT_ID
### Parameters
#### Path Parameters
- **CONFERENCE_ID** (string) - Required - The ID of the conference.
- **ENDPOINT_ID** (string) - Required - The ID of the endpoint.
```
--------------------------------
### Multi-Stage View: Two On-Stage Sources
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure multi-stage view with two on-stage sources in high definition and up to 4 other sources in 180p.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"onStageSources": ["A-v0", "B-v0"],
"lastN": 6,
"defaultConstraints": { "maxHeight": 180 },
"constraints": {
"A-v0": { "maxHeight": 720 },
"B-v0": { "maxHeight": 720 }
}
}
```
--------------------------------
### Tile View: Selective Enabling
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure tile view to disable all sources by default and then selectively enable specific sources at 180p.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"defaultConstraints": { "maxHeight": 0 },
"constraints": {
"A-v0": { "maxHeight": 180 },
"B-v0": { "maxHeight": 180 },
"C-v0": { "maxHeight": 180 }
}
}
```
--------------------------------
### Get Full State for Specific Endpoint
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves the complete state for a specific endpoint within a specific conference.
```http
GET /debug/CONFERENCE_ID/ENDPOINT_ID
```
--------------------------------
### Get Statistics via REST API
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/statistics.md
Access statistics in JSON format from the /colibri/stats endpoint. A cached version is returned, configurable by videobridge.stats.interval.
```json
{
"key": "value"
}
```
--------------------------------
### Run all tests in Jitsi Videobridge
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Execute all unit and integration tests for the Jitsi Videobridge project using Maven.
```bash
mvn test
```
--------------------------------
### Build Jitsi Videobridge package
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
This Maven command creates an archive (zip file) of the Jitsi Videobridge application, typically found in the 'jvb/target/' directory.
```bash
mvn install
# Output: jvb/target/jitsi-videobridge-2.3-SNAPSHOT-archive.zip
```
--------------------------------
### Configure Public HTTP Server (With TLS)
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
Configure the publicly-accessible HTTP server with TLS on port 443, specifying keystore path and password.
```java
videobridge {
http-servers {
public {
tls-port = 443
key-store-path=/etc/jitsi/videobridge/ssl.store
key-store-password=KEY_STORE_PASSWORD
}
}
}
```
--------------------------------
### Get Dominant Speaker Identification
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-colibri2.md
Retrieves information about dominant speaker identification within a conference, including endpoints by speech activity, dominant endpoint, and endpoints in last N order.
```APIDOC
## GET /colibri/v2/conferences/{meetingId}/dominant-speaker-identification
### Description
Retrieves dominant speaker identification data for a given conference.
### Method
GET
### Endpoint
/colibri/v2/conferences/{meetingId}/dominant-speaker-identification
### Parameters
#### Path Parameters
- **meetingId** (string) - Required - The ID of the conference.
### Response
#### Success Response (200)
- **endpointsBySpeechActivity** (array) - A list of endpoint IDs active in speech.
- **dominantEndpoint** (string) - The ID of the dominant speaker endpoint.
- **endpointsInLastNOrder** (array) - A list of endpoint IDs in the order they were last active.
- **dominantSpeakerIdentification** (object | null) - Detailed dominant speaker identification data, or null if not available.
### Response Example
```json
{
"endpointsBySpeechActivity": [
"79f0273d"
],
"dominantSpeakerIdentification": null,
"endpointsInLastNOrder": [
"79f0273d"
],
"dominantEndpoint": "null"
}
```
```
--------------------------------
### Configure Jitsi Videobridge JVM Options on Debian
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/README.md
Set Java Virtual Machine (JVM) options for Jitsi Videobridge on Debian-based systems using the `/etc/jitsi/videobridge/config` file. These settings override defaults.
```commandline
# Increase the java heap to 8GB
VIDEOBRIDGE_MAX_MEMORY=8192m
# Change the garbage collector (defaults to G1GC)
VIDEOBRIDGE_GC_TYPE=G1GC
```
--------------------------------
### Run Jitsi Videobridge Locally with Maven
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/README.md
Execute Jitsi Videobridge locally using Maven. Ensure a `~/.jvb/jvb.conf` file is created for configuration. This command sets up necessary Java system properties and library paths.
```sh
JVB_HOME="/path/to/the/cloned/repo"
JVB_CONFIG_DIR_LOCATION="~/
JVB_CONFIG_DIR_NAME=".jvb"
JVB_CONFIG_FILE="$JVB_CONFIG_DIR_LOCATION/$JVB_JVB_CONFIG_DIR_NAME/jvb.conf"
mvn compile exec:exec -Dexec.executable=java -Dexec.args="-cp %classpath org.jitsi.videobridge.MainKt -Djava.library.path=$JVB_HOME/lib/native/linux-64 -Djava.util.logging.config.file=$JVB_HOME/lib/logging.properties -Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=$JVB_CONFIG_DIR_LOCATION -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=$JVB_CONFIG_DIR_NAME -Dconfig.file=$JVB_CONFIG_FILE"
```
--------------------------------
### Stage View: High Definition and 180p
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure stage view with one source in high definition and others in 180p. Disabled sources are set to 0 height.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"onStageSources": ["A-v0"],
"defaultConstraints": { "maxHeight": 180 },
"constraints": {
"A-v0": { "maxHeight": 720 },
"B-v0": { "maxHeight": 0 },
"C-v0": { "maxHeight": 0 },
"D-v0": { "maxHeight": 0 }
}
}
```
--------------------------------
### Get Dominant Speaker Identification
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-colibri2.md
Retrieves information about speech activity and dominant speakers in a conference. The response includes lists of endpoints by speech activity, in last N order, and the dominant endpoint if identified.
```json
{
"endpointsBySpeechActivity": [
"79f0273d"
],
"dominantSpeakerIdentification": null,
"endpointsInLastNOrder": [
"79f0273d"
],
"dominantEndpoint": "null"
}
```
--------------------------------
### Map Old to New Configuration Properties
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CONFIG.md
This table shows the mapping from old `sip-communicator.properties` or program argument names to the new configuration property names used in `reference.conf` and `application.conf`.
```plaintext
org.jitsi.videobridge.health.INTERVAL | videobridge.health.interval
```
```plaintext
org.jitsi.videobridge.health.TIMEOUT | videobridge.health.timeout
```
```plaintext
org.jitsi.videobridge.health.STICKY_FAILURES | videobridge.health.sticky-failures
```
```plaintext
org.jitsi.videobridge.EndpointConnectionStatus.FIRST_TRANSFER_TIMEOUT | videobridge.ep-connection-status.first-transfer-timeout
```
```plaintext
org.jitsi.videobridge.EndpointConnectionStatus.MAX_INACTIVITY_LIMIT | videobridge.ep-connection-status.max-inactivity-limit
```
```plaintext
org.jitsi.videobridge.BWE_CHANGE_THRESHOLD_PCT | videobridge.cc.bwe-change-threshold-pct
```
```plaintext
org.jitsi.videobridge.THUMBNAIL_MAX_HEIGHT | videobridge.cc.thumbnail-max-height-px
```
```plaintext
org.jitsi.videobridge.ONSTAGE_PREFERRED_HEIGHT | videobridge.cc.onstage-preferred-height-px
```
```plaintext
org.jitsi.videobridge.ONSTAGE_PREFERRED_FRAME_RATE | videobridge.cc.onstage-preferred-framerate
```
```plaintext
org.jitsi.videobridge.ENABLE_ONSTAGE_VIDEO_SUSPEND | videobridge.cc.enable-onstage-video-suspend
```
```plaintext
org.jitsi.videobridge.TRUST_BWE | videobridge.cc.trust-bwe
```
```plaintext
org.jitsi.videobridge.PADDING_PERIOD_MS | videobridge.cc.padding-period
```
```plaintext
org.jitsi.videobridge.DISABLE_RTX_PROBING | n/a
```
```plaintext
org.jitsi.videobridge.rest.COLIBRI_WS_DISABLE | videobridge.websockets.enabled
```
```plaintext
org.jitsi.videobridge.rest.COLIBRI_WS_DOMAIN | videobridge.websockets.domain
```
```plaintext
org.jitsi.videobridge.rest.COLIBRI_WS_TLS | videobridge.websockets.tls
```
```plaintext
org.jitsi.videobridge.rest.COLIBRI_WS_SERVER_ID | videobridge.websockets.server-id
```
```plaintext
org.jitsi.videobridge.SINGLE_PORT_HARVESTER_PORT | videobridge.ice.udp.port
```
```plaintext
org.jitsi.videobridge.ICE_UFRAG_PREFIX | videobridge.ice.ufrag-prefix
```
```plaintext
org.jitsi.videobridge.KEEP_ALIVE_STRATEGY | videobridge.ice.keep-alive-strategy
```
--------------------------------
### Run tests in a specific Jitsi Videobridge module
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Navigate to a specific module directory (e.g., 'jvb') and then run tests using Maven.
```bash
cd jvb && mvn test
```
--------------------------------
### Tile View: Prioritized and Disabled Sources
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure tile view with specific sources prioritized and others disabled. Sources with maxHeight 0 are disabled.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"selectedSources": ["A-v0", "B-v0"],
"defaultConstraints": { "maxHeight": 180 },
"constraints": {
"C-v0": { "maxHeight": 0 },
"D-v0": { "maxHeight": 0 }
}
}
```
--------------------------------
### Run Checkstyle for Java code formatting
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Execute the Checkstyle Maven plugin to verify Java code adheres to formatting and style rules defined in 'jvb/checkstyle.xml'.
```bash
mvn checkstyle:check
```
--------------------------------
### Register XMPP User for Prosody
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/muc.md
Use this command to register a user account on a Prosody XMPP server that will be shared by Jitsi Videobridge instances.
```bash
prosodyctl register jvb $DOMAIN $PASSWORD
```
--------------------------------
### Run Module-Specific Tests with Maven
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Execute tests for individual modules within the Jitsi Videobridge project using Maven. Ensure you navigate to the respective module directory before running the test command.
```bash
cd jvb && mvn test
```
```bash
cd jitsi-media-transform && mvn test
```
```bash
cd rtp && mvn test
```
--------------------------------
### Configure Jitsi Videobridge Relay Settings
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/relay.md
Enable relay functionality and specify the region and a unique ID for the Jitsi Videobridge instance in its configuration file.
```properties
videobridge {
relay {
enabled=true
region="region1"
relay-id="unique-id-of-the-jitsi-videobridge-instance"
}
}
```
--------------------------------
### Version Information
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves the currently running version of the Jitsi Videobridge instance.
```APIDOC
## GET /about/version
### Description
Returns the currently running version.
### Method
GET
### Endpoint
/about/version
```
--------------------------------
### Configure XMPP Client for MUC in Videobridge
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/muc.md
Set up XMPP client configurations within the 'videobridge' config. This includes connecting to XMPP servers, specifying domains, usernames, passwords, MUC JIDs, and unique MUC nicknames for each instance.
```hocon
apis {
xmpp-client {
configs {
# Connect to the first XMPP server
xmpp-server-1 {
hostname="example.net"
domain = "auth.example.net"
username = "jvb"
password = "$PASSWORD"
muc_jids = "JvbBrewery@internal.auth.example.net"
# The muc_nickname must be unique across all jitsi-videobridge instances
muc_nickname = "unique-instance-id"
# disable_certificate_verification = true
}
# Connect to a second XMPP server
xmpp-server-2 {
hostname="another.example.net"
domain = "auth.example.net"
username = "jvb"
password = "$PASSWORD"
muc_jids = "JvbBrewery@internal.auth.example.net"
# The muc_nickname must be unique across all jitsi-videobridge instances
muc_nickname = "unique-instance-id2"
# disable_certificate_verification = true
}
}
}
}
```
--------------------------------
### Add XMPP Client Connection Configuration
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-muc-client.md
Post a JSON object with the new MucClient configuration to the /colibri/muc-client/add endpoint. If a configuration with the same ID exists, it will be updated if hostname, port, domain, and username match; otherwise, the existing client is removed and a new one is added.
```json
{
"id": "new-client-connection",
"domain":"xmpp.example.com",
"hostname":"10.0.0.1",
"username":"xmpp-username",
"password":"xmpp-password",
"muc_jids":"JvbBrewery@conference.xmpp.example.com",
"muc_nickname":"unique-resource",
"disable_certificate_verification":"false"
}
```
--------------------------------
### Enable Verbose Logging for ICE Candidates
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/network-configuration.md
Configure logging properties to enable verbose logging for ICE candidate verification. This helps in inspecting the ICE candidates being sent by the Videobridge.
```properties
org.jitsi.videobridge.xmpp.XmppConnection.level=ALL
```
--------------------------------
### Build Jitsi Videobridge project without running tests
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
This Maven command builds the project but skips the execution of all tests, which can speed up the build process.
```bash
mvn install -DskipTests
```
--------------------------------
### Auto-format Kotlin code using ktlint
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Apply automatic formatting to Kotlin code based on ktlint conventions. This command requires execution from within a submodule directory, like './jvb/'.
```bash
mvn ktlint:format
```
--------------------------------
### Autoformat Code with Maven
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/rtp/README.md
Runs ktlint for autoformatting using Maven. This command applies formatting rules to your project's code.
```bash
mvn antrun:run@ktlint-format
```
--------------------------------
### Configure Public HTTP Interface
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest.md
Configures the public HTTP interface for Jitsi-Videobridge, which is used for Colibri Web Sockets. Uses the same settings as the private interface.
```hocon
videobridge {
http-servers {
public {
// Same values as above
}
}
}
```
--------------------------------
### Configure Public HTTP Server (No TLS)
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
Configure the publicly-accessible HTTP server on port 9090 without TLS.
```java
videobridge {
http-servers {
public {
port = 9090
}
}
}
```
--------------------------------
### Stage View: Prioritized Source
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/allocation.md
Configure stage view with a prioritized source in high definition and others in 180p. Allows specifying selected endpoints for higher priority.
```json
{
"colibriClass": "ReceiverVideoConstraints",
"onStageEndpoints": ["A-v0"],
"selectedEndpoints": ["D-v0"],
"defaultConstraints": { "maxHeight": 180 },
"constraints": {
"A-v0": { "maxHeight": 720 }
}
}
```
--------------------------------
### Run ktlint for Kotlin code formatting check
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Use the ktlint Maven plugin to check Kotlin code formatting and style. This command must be run from within a submodule directory, such as './jvb/'.
```bash
mvn ktlint:check
```
--------------------------------
### Enable IPv6 in JVB Configuration
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/network-configuration.md
Add this HOCON configuration to `jvb.conf` to enable IPv6 support in dual-stack environments. Ensure `your-stun-server` and `YOUR_PRIVATE_IPV4`/`YOUR_PUBLIC_IPV4` are replaced with actual values.
```hocon
ice4j {
harvest {
use-ipv6 = true
use-link-local-addresses = false
mapping {
stun {
addresses = [ "your-stun-server:3478" ]
}
static-mappings = [
{
local-address = "YOUR_PRIVATE_IPV4"
public-address = "YOUR_PUBLIC_IPV4"
}
]
}
}
}
```
--------------------------------
### Autoformat code with ktlint
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/jitsi-media-transform/README.md
Run ktlint with the -F flag to automatically format the code. This command applies the ktlint formatting rules to the project files.
```bash
ktlint -F
```
--------------------------------
### Configure Jicofo for Relay Support
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/relay.md
Enable Octo support and set the bridge selection strategy in Jicofo's configuration. RegionBasedBridgeSelectionStrategy is recommended for production.
```properties
jicofo {
bridge {
selection-strategy = RegionBasedBridgeSelectionStrategy
}
octo {
enabled = true
}
}
```
--------------------------------
### Configure Private HTTP Interface
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest.md
Enables and configures the private HTTP interface for Jitsi-Videobridge. Specify ports, host, and TLS settings.
```hocon
videobridge {
apis {
rest {
enabled = true
}
}
http-servers {
private {
// The port for the private HTTP interface (or -1 to disable it). Defaults to 8080.
port =
// The port for the private HTTP interface if TLS is to be used (or -1 to disable). Defaults to 8443.
tls-port =
// The address on which the server will listen
host =
// The file path to the keystore to be used with HTTPS for the private interface. If this is not specified,
// HTTPS is disabled for the private interface
key-store-path =
// The password to be used by the SslContextFactory when HTTPS is used
key-store-password =
// Whether or not client certificate authentication is to be required when
// HTTPS is used
need-client-auth:
}
}
}
```
--------------------------------
### Run a specific test method in Jitsi Videobridge
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
This Maven command allows you to run a single, specific test method within a test class.
```bash
mvn test -Dtest=ClassName#methodName
```
--------------------------------
### Version Information Endpoint
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves the currently running version of the Jitsi Videobridge.
```http
GET /about/version
```
--------------------------------
### Run a specific test class in Jitsi Videobridge
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CLAUDE.md
Use this Maven command to execute tests only for a particular test class.
```bash
mvn test -Dtest=ClassName
```
--------------------------------
### Enable WebSockets on Bridge
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
Enable WebSocket support on the Jitsi Videobridge. Ensure 'tls' matches your HTTP server configuration. The 'domain' should be the publicly accessible domain and port. 'server-id' is optional but useful when multiple bridges share a domain.
```java
videobridge {
websockets {
enabled = true
tls = true # or false, depending on your HTTP server config
# The port here is the 'advertise port' for websockets, which means the publicly-accessible
# port clients will use. This may match the public http server port, but could also be different
# if a proxy is being used.
domain = "example.com:443"
# A server ID can optionally be provided. This is useful when a set of jitsi-videobridge instances
# are fronted by an HTTP proxy and they advertise the same domain.
server-id = jvb2
}
}
```
--------------------------------
### Add XMPP Client Connection
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest-muc-client.md
Adds a new XMPP client connection (MucClient) by posting its configuration to the /colibri/muc-client/add endpoint. If a configuration with the same ID exists, it will be updated if the connection details differ.
```APIDOC
## POST /colibri/muc-client/add
### Description
Adds a new XMPP client connection (MucClient) with the provided configuration.
### Method
POST
### Endpoint
/colibri/muc-client/add
### Request Body
- **id** (string) - Required - A unique identifier for the client connection.
- **domain** (string) - Required - The XMPP domain.
- **hostname** (string) - Required - The hostname of the XMPP server.
- **username** (string) - Required - The username for authentication.
- **password** (string) - Required - The password for authentication.
- **muc_jids** (string) - Required - The MUC service JID(s).
- **muc_nickname** (string) - Required - The nickname to use in MUC.
- **disable_certificate_verification** (string) - Optional - Set to "true" to disable certificate verification.
### Request Example
```json
{
"id": "new-client-connection",
"domain":"xmpp.example.com",
"hostname":"10.0.0.1",
"username":"xmpp-username",
"password":"xmpp-password",
"muc_jids":"JvbBrewery@conference.xmpp.example.com",
"muc_nickname":"unique-resource",
"disable_certificate_verification":"false"
}
```
### Response
#### Success Response (200)
Indicates the client connection was added or updated successfully.
```
--------------------------------
### Apply ktlint formatting to IntelliJ IDEA
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/jitsi-media-transform/README.md
Configure IntelliJ IDEA to use ktlint formatting rules. This command updates the IDE's formatting settings to match ktlint's standards.
```bash
ktlint --apply-to-idea-project
```
--------------------------------
### Enable Node Tracing
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Enables adding an entry to the stack trace from each Node in the packet processing pipeline. This is useful for detailed debugging.
```http
POST /debug/stats/jvb/node-tracing/true
```
--------------------------------
### Override JVB Configuration Values
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/CONFIG.md
Use an `application.conf` file to override default configuration values for Jitsi Videobridge. Values in this file will take precedence over those in `reference.conf`.
```HOCON
videobridge {
health {
// Override the health check interval
interval=60 seconds
}
cc {
// Override the onstage video suspension setting
onstage-video-suspension-enabled=true
}
}
```
--------------------------------
### List All Conferences (Full State)
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves the complete state for all conferences and their endpoints. Be aware that the output can be substantial.
```http
GET /debug?full=true
```
--------------------------------
### Run ktlint checks
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/jitsi-media-transform/README.md
Execute ktlint to perform code style checks. This command verifies that the code adheres to the defined linting rules.
```bash
ktlint
```
--------------------------------
### Enable Packet Queue Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Enables tracking of dropped packets and exceptions in various packet queues. This is enabled by default.
```http
POST /debug/stats/jvb/queue-stats/true
```
--------------------------------
### Allow Mixed Versions for Testing
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/relay.md
For testing purposes only, set this property to true in jicofo.conf to allow Jicofo to mix Jitsi Videobridge instances with different versions in the same conference.
```properties
jicofo.ocfo.allow-mixed-versions=true
```
--------------------------------
### List Available Bridges via Jicofo Debug Interface
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/relay.md
Use this curl command to query the Jicofo debug interface and list all bridges known to Jicofo, including their versions and regions.
```bash
curl "http://localhost:8888/debug" | jq .bridge_selector
```
--------------------------------
### Enable Pipeline Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Enables the tracking of processing delay, discarded packets, and packet types per Node in the packet processing pipeline. This has low overhead and is enabled by default.
```http
POST /debug/stats/jvb/node-stats/true
```
--------------------------------
### Enable PCAP Dump for Endpoint
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Enables the saving of RTP and RTCP traffic for a specific endpoint to a PCAP file. Requires `jmt.debug.pcap.enabled=true` to be set in the Jitsi Videobridge configuration.
```APIDOC
## POST /debug/features/endpoint/CONFERENCE_ID/ENDPOINT_ID/pcap-dump/true
### Description
Enables saving RTP/RTCP traffic for a specific endpoint to a PCAP file.
### Method
POST
### Endpoint
/debug/features/endpoint/CONFERENCE_ID/ENDPOINT_ID/pcap-dump/true
### Parameters
#### Path Parameters
- **CONFERENCE_ID** (string) - Required - The ID of the conference.
- **ENDPOINT_ID** (string) - Required - The ID of the endpoint.
### Request Example
POST /debug/features/endpoint/CONFERENCE_ID/ENDPOINT_ID/pcap-dump/true
```
--------------------------------
### Enable MUC Stats Broadcasting in Videobridge
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/muc.md
Configure the 'videobridge' section to enable broadcasting statistics and presence in a MUC. This requires setting 'enabled' to true and specifying 'muc' as a transport type.
```hocon
stats {
# Enable broadcasting stats/presence in a MUC
enabled = true
transports = [
{ type = "muc" }
]
}
```
--------------------------------
### Client-to-Videobridge EndpointMessage Format
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/datachannel-communication.md
This is the format for messages sent by clients to Jitsi Videobridge. The `to` field specifies the recipient endpoint ID, or an empty string for broadcast. `msgPayload` must be a valid JSON string.
```json
{
colibriClass: "EndpointMessage",
to: "",
msgPayload: ""
}
```
--------------------------------
### List Running Conferences via Jicofo Debug Interface
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/relay.md
Query the Jicofo debug interface to retrieve a list of all currently running conferences.
```bash
curl "http://localhost:8888/debug" | jq .focus_manager
```
--------------------------------
### Enable Memory Pool Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Enables the collection of statistics for application memory pools, including current size and allocation rates. This is disabled by default.
```http
POST /debug/stats/jvb/pool-stats/true
```
--------------------------------
### Enable RTP/RTCP PCAP Dumping
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Use this POST request to enable saving RTP and RTCP traffic for a specific endpoint. The bridge must be configured with `jmt.debug.pcap.enabled=true`.
```http
POST /debug/features/endpoint/CONFERENCE_ID/ENDPOINT_ID/pcap-dump/true
```
--------------------------------
### List All Conferences (Basic State)
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves a list of all active conferences and their associated endpoints, without the full state details.
```http
GET /debug
```
--------------------------------
### Videobridge-to-Client EndpointMessage Format
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/datachannel-communication.md
This is the format for messages sent by Jitsi Videobridge to clients. It includes the original `to` and `msgPayload`, with the addition of the `from` field indicating the sender's endpoint ID.
```json
{
colibriClass: "EndpointMessage",
to: "",
from: "",
msgPayload:
}
```
--------------------------------
### List Conferences (Full State)
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves a comprehensive list of all conferences and their endpoints, including their full state. The output can be substantial.
```APIDOC
## GET /debug?full=true
### Description
This includes the full state of all conferences and their endpoints. The output can be substantial (~25KB per endpoint).
### Method
GET
### Endpoint
/debug?full=true
```
--------------------------------
### Query Task Pool Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves statistics for the various task pools (CPU, IO, scheduled). This is always enabled.
```APIDOC
## GET /debug/stats/jvb/task-pool-stats
### Description
This keeps track of statistics for the various task pools (CPU, IO, scheduled). It is always enabled.
### Method
GET
### Endpoint
/debug/stats/jvb/task-pool-stats
```
--------------------------------
### Query Prometheus Metrics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/statistics.md
Retrieve Prometheus metrics from the /metrics endpoint. Different Accept headers can be used to query in openmetrics, 004, or JSON key-value formats. Conference size distribution metrics are available as histograms.
```bash
# Query prometheus metrics in openmetrics format
curl 0:8080/metrics -H 'Accept: application/openmetrics-text'
```
```bash
# Query prometheus metrics in 004 format
curl 0:8080/metrics -H 'Accept: text/plain; version=0.0.4;'
```
```bash
# Query prometheus metrics in a JSON key-value format
curl 0:8080/metrics -H 'Accept: application/json'
```
--------------------------------
### Query Task Pool Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves statistics for the various task pools (CPU, IO, scheduled). This feature is always enabled.
```http
GET /debug/stats/jvb/task-pool-stats
```
--------------------------------
### Query Memory Pool Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves statistics for the application memory pools.
```http
GET /debug/stats/jvb/pool-stats
```
--------------------------------
### Colibri WebSocket URL Format
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/web-sockets.md
This is the standard URL format for Colibri WebSocket connections to a Jitsi Videobridge.
```plaintext
wss://example.com/colibri-ws/server-id/conf-id/endpoint-id?pwd=123
```
--------------------------------
### Query XMPP Delay Statistics
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves statistics on the response time for requests received over XMPP.
```APIDOC
## GET /debug/stats/jvb/xmpp-delay-stats
### Description
This keeps track of the response time for requests received over XMPP.
### Method
GET
### Endpoint
/debug/stats/jvb/xmpp-delay-stats
```
--------------------------------
### List Conferences (Basic)
Source: https://github.com/jitsi/jitsi-videobridge/blob/master/doc/debugging.md
Retrieves a list of all active conferences and their associated endpoints, without including the full state.
```APIDOC
## GET /debug
### Description
This includes a list of all conferences and their endpoints, but not the full state.
### Method
GET
### Endpoint
/debug
```