Blank Screen while Screensharing in Chrome, in serperate video bridge with octa

I have installed the Jitsi Meet in Server 1. Everything works fine including screensharing in all browsers.

But after disabling the JVB in Jitsi Meet Installation and enabled the Separate JVB with Octa.

Now screen sharing works only with Mozilla Firefox and Not with Chromium Based browsers such as Google Chrome & Brave.

Nothing changed in Jitsi Meet Server except adding the octa configs.

Not able to find in forum such issue, need help to solve the issue.

You may websocket issue. Is everything fine if you don’t enable OCTO on the additional JVB?
Do you have websocket errors in the browser console log?

These are the console information

Not sure to address the issue, if possible share a step by step guidlines.

Thanks

This is my nginx config, where to update to sortout this websocket issue.

server_names_hash_bucket_size 64;

types {

nginx’s default mime.types doesn’t include a mapping for wasm

application/wasm     wasm;

}
server {
listen 80;
listen [::]:80;
server_name ;

location ^~ /.well-known/acme-challenge/ {
    default_type "text/plain";
    root         /usr/share/jitsi-meet;
}
location = /.well-known/acme-challenge/ {
    return 404;
}
location / {
    return 301 https://$host$request_uri;
}

}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name ;

# Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-S$
ssl_prefer_server_ciphers off;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;  # about 40000 sessions
ssl_session_tickets off;

add_header Strict-Transport-Security "max-age=63072000" always;
set $prefix "";

ssl_certificate /etc/letsencrypt/live/<domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<domain>/privkey.pem;

root /usr/share/jitsi-meet;
# ssi on with javascript for multidomain variables in config.js
ssi on;
ssi_types application/x-javascript application/javascript;

index index.html index.htm;
error_page 404 /static/404.html;

gzip on;
gzip_types text/plain text/css application/javascript application/json image/x-icon application/octet-stream application/wasm;
gzip_vary on;
gzip_proxied no-cache no-store private expired auth;
gzip_min_length 512;

location = /config.js {
    alias /etc/jitsi/meet/<domain>-config.js;
}

location = /external_api.js {
    alias /usr/share/jitsi-meet/libs/external_api.min.js;
}

# ensure all static content can always be found first
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
{
    add_header 'Access-Control-Allow-Origin' '*';
    alias /usr/share/jitsi-meet/$1/$2;

    # cache all versioned files
    if ($arg_v) {
        expires 1y;
    }
}

# BOSH
location = /http-bind {
    proxy_pass http://127.0.0.1:5280/http-bind?prefix=$prefix&$args;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $http_host;
}
# xmpp websockets
location = /xmpp-websocket {
    proxy_pass http://127.0.0.1:5280/xmpp-websocket?prefix=$prefix&$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    tcp_nodelay on;
}

# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/default-id/(.*) {
    proxy_pass http://127.0.0.1:9090/colibri-ws/default-id/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    tcp_nodelay on;
}

# load test minimal client, uncomment when used
#location ~ ^/_load-test/([^/?&:'"]+)$ {
#    rewrite ^/_load-test/(.*)$ /load-test/index.html break;
#}
#location ~ ^/_load-test/libs/(.*)$ {
#    add_header 'Access-Control-Allow-Origin' '*';
#    alias /usr/share/jitsi-meet/load-test/libs/$1;
#}

location ~ ^/([^/?&:'"]+)$ {
    try_files $uri @root_path;
}

location @root_path {
    rewrite ^/(.*)$ / break;
}

location ~ ^/([^/?&:'"]+)/config.js$
{
    set $subdomain "$1.";
    set $subdir "$1/";

    alias /etc/jitsi/meet/<domain>-config.js;
}

# BOSH for subdomains
location ~ ^/([^/?&:'"]+)/http-bind {
    set $subdomain "$1.";
    set $subdir "$1/";
    set $prefix "$1";

    rewrite ^/(.*)$ /http-bind;
}
# websockets for subdomains
location ~ ^/([^/?&:'"]+)/xmpp-websocket {
    set $subdomain "$1.";
    set $subdir "$1/";
    set $prefix "$1";

    rewrite ^/(.*)$ /xmpp-websocket;
}

# Anything that didn't match above, and isn't a real file, assume it's a room name and redirect to /
location ~ ^/([^/?&:'"]+)/(.*)$ {
    set $subdomain "$1.";
    set $subdir "$1/";
    rewrite ^/([^/?&:'"]+)/(.*)$ /$2;
}

}

What about your jvb config?

Videobridge Settings:

sudo nano /etc/jitsi/videobridge/jvb.conf

videobridge {
http-servers {
public {
port = 9090
}
}
websockets {
enabled = true
domain = “:443”
tls = true
}

cc {
    trust-bwe = false
}

}

sudo nano /etc/jitsi/videobridge/sip-communicator.properties

org.ice4j.ice.harvest.DISABLE_AWS_HARVESTER=true
#org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES=meet-jit-si-turnrelay.jitsi.net:443
org.jitsi.videobridge.ENABLE_STATISTICS=true
org.jitsi.videobridge.STATISTICS_TRANSPORT=muc, colibri
org.jitsi.videobridge.xmpp.user.shard.HOSTNAME=
org.jitsi.videobridge.xmpp.user.shard.DOMAIN=auth.
org.jitsi.videobridge.xmpp.user.shard.USERNAME=jvb
org.jitsi.videobridge.xmpp.user.shard.PASSWORD=TYMcbGvW
org.jitsi.videobridge.xmpp.user.shard.MUC_JIDS=JvbBrewery@internal.auth.
org.jitsi.videobridge.xmpp.user.shard.MUC_NICKNAME=videobridgewcf1

org.jitsi.videobridge.xmpp.user.shard.DISABLE_CERTIFICATE_VERIFICATION=true

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=Local IP of Videobridge
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=Public IP of Videobridge

#org.jitsi.videobridge.ENABLE_STATISTICS=true
#org.jitsi.videobridge.STATISTICS_TRANSPORT=pubsub
#org.jitsi.videobridge.PUBSUB_SERVICE=
#org.jitsi.videobridge.PUBSUB_NODE=sharedStatsNode

org.jitsi.videobridge.octo.BIND_ADDRESS=Local IP
org.jitsi.videobridge.octo.PUBLIC_ADDRESS=Public IP of Videobridge
org.jitsi.videobridge.octo.BIND_PORT=4096
org.jitsi.videobridge.REGION=Region

You have websocket issues. Your nginx configuration is wrong. You disabled your local JVB, but your nginx config does not factor for remote JVBs. You need another colibri block in nginx for remote JVBs.

Is there any procedure / tutorials / documentations to create a colibri in nginx for remote JVBs.?

Tried to add colibri block in nginx using the following:

  1. jitsi-videobridge/web-sockets.md at master · jitsi/jitsi-videobridge · GitHub
  2. FAQ | Jitsi Meet

jvb.conf in Videobridge:

videobridge {
http-servers {
public {
port = 9090
}
}

websockets {
    enabled = true
    domain = "wcf8.jit.ac.in:443"
    tls = true
    server-id = jvb1
}
cc {
    trust-bwe = false
}

}

colibri block in nginx:

# colibri (JVB) websockets for jvb + Meet
location ~ ^/colibri-ws/default-id/(.*) {
    proxy_pass http://127.0.0.1:9090/colibri-ws/default-id/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    tcp_nodelay on;
}

# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/jvb1/(.*) {
    proxy_pass http://10.10.44.81:9090/colibri-ws/server-id/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host domain;
    tcp_nodelay on;
}

But the screen sharing is not working with same wss socket error

That should probably say proxy_pass http://10.10.44.81:9090/colibri-ws/jvb1/$1$is_args$args;

Thanks to community, now webscoket has been configured properly.
This is the working config. change the domain with actual domain.
Add ```

colibri (JVB) websockets for jvb1 & similarly for more JVB

sudo nano /etc/nginx/sites-available/domain.conf

# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/jvb1/(.*) {
    proxy_pass http://10.10.44.81:9090/colibri-ws/jvb1/$1$is_args$args;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host domain;
    tcp_nodelay on;
}

sudo nano /etc/jitsi/videobridge/jvb.conf

videobridge {
http-servers {
public {
port = 9090
}
}

websockets {
    enabled = true
    domain = "domain:443"
    tls = true
    server-id = jvb1
}

cc {
    trust-bwe = false
}

}

1 Like