### 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 ```