Video Quality Issue - Multiple JVB's - Switch between Tile-/Full-View

Version: Current unstable Release


I have trouble with multiple jvb’s and the video quality. When i’m connected to my first jvb1 which is located on the jms (local) the receiver/sender requests for different resolutions works flawless - tile view 360p and full view 720p. But when i force the jvb1 to stop so that the clients connect to jvb2 i have trouble upscaling to 720p. When once in tile view it drops to 180p (not 360p) and when i switch back to fullview it keeps the 180p. I also noticed that there is a sender/receiver video request on the console for 720p while i switch to full view but immediate drops to 180p. The weird thing is…if i click on my own filmstrip “top right” -> “me” and click back to the filmstrip of the second user in the room the full view gets 720p again and i also see the request for 720p in the console. Once going back to tile view…the same happens again.

Maby someone has an idea or solution to my problem.



Thanks @emrah for your relpy. I already setup the nginx changes in the config file. I can also see the websocket change requests in the console on both sides…also the informations for dominant speakers are announced etc. So i would think that the websocket communication works. But i still have the problem with falling back to 180p in tile view even if the console requests 360p because of the height of the picture.

# colibri (JVB) websockets for jvb1
location ~ ^/colibri-ws/default-id/(.*) {
    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 additional JVBs
location ~ ^/colibri-ws/([0-9.]*)/(.*) {
    proxy_pass http://$1:9090/colibri-ws/$1/$2$is_args$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;

And the Server-ID in the jvb.conf is the local subnet ip of the jvb server.

In the Network Console of the Browser i can also see one successfull wss get request 101 switchting protocoll.



  • Are your clients in the same network or remote?

  • If there are remote clients, do you use different IPs or different ports for JVBs?

Hi @emrah!

All the JVB’s devices and NGINX are in the same subnet and reachable.

Each JVB ist having its own external and internal ip and each jvb ist having the same ports and basic setup to listen on port 9090.

Do you have a TURN service? If yes, could you test the system with the following conditions:

  • TURN is off
  • JVB1 is off
  • 3 participants in a single meeting room

@emrah With your recommended conditions the jvb2 acts correct and the change requests of resolution between tile view and full view works. It switches between 360p and 720p as expected and only 180p if thumbnail is needed.

So is it the TURN Server ist causing get problem? What can i do to make it work with TURN?

IIUC there is a missing rule on your router which redirects the incoming internal request to the internal network when the external IP is used.

For example:

               dest: jvb2-external-ip:udp/10000
client  --------------- NAT ---------------------------------> TURN
                            relay: jvb2-external-ip:udp/10000
                        NAT <--------------------------------- TURN

                        NAT ? missing rule, failed

edit: This explanation didn’t make much sense to me after thinking a little more

@emrah But what makes it differ to jvb1? the turn is running on a separate server and jvb1 has the same config setup than jvb2 and also connects to the external ip of the jms, same like jvb2 und jvb3. And when the room is created on jvb1 the change requests work out of the box :face_with_raised_eyebrow:

What are the external and internal ports for JVBs?


External: UDP 10000
Internal subnet: TCP 8080,9090 UDP 5000,4096,9090

  • Are the external port for all JVBs UDP/10000?

  • Are the internal port for all JVBs UDP/10000?

  • If all UDP/10000, are the external IPs different for each JVB?

@emrah Yes. All servers have seperate external ip’s and each JVB ist usig UDP/10000 and are directly reachable without nat.

Has each JVB a different MUC_NICKNAME?

@emrah Yes. Every system is having it’s on nickname as octo + multiple jvbs worked before in my setup. i could narrow it down that in a session of two people with p2p set to false the problem occurs…as soon as there are 3 or more people in the meeting everything works normal.

i will continue to monitor the logs and session in the next couple of days to see if i can get more details on the behavior.

then this may be a TURN related problem