[Solved] OCTO Minor Issue [Regular Installation]

@tusharsonawane Did you do this? Do you see errors in your console when you’re running a 3-party call?

@Freddie

Thanks for the reply.

  1. I kindoff dont know where do I do the websocket settings, can you guide me here ?

  2. What is happening now is, I am operating my instance from inside the firewall network. I have switched off the other 4 jvbs and only 1 jvb i.e the main JMS stack is working. Now for a single meeting, I have added 3-4 participants ( from the device which is inside the firewall network, same browser (4 tabs) )

They all are getting placed on the same jvb which is expected.

But when I join the 5th participant from a completely different network ( From outside the firewall ), the participant joins, can be seen that it is placed on Region1 ( JVB1 ) but no audio/ video

image

Also the interesting thing is, when I join the 6th participant from a different device which is IN the same network, again the same thing. Participant joins but no audio/ video from any participant

P.S - As mentioned above, I have added the NAT Settings

To view your javascript console, in Chrome, click on:

View-->Developer-->Javascript Console

This brings up the js console tab. Monitor the tab while running a 3-party meeting, see if there are errors.

My bad. The same device different browser test case works, I guess it was a camera issue, I can hear/ see video. Cancelling it from the above comment.

I checked the javascript logs, didnt really get anything that states why the external ( out of the firewall participant ) or the different device in same network participant cannot see or hear anything.

@Freddie

Got this relevant from jvb logs

Unable to find endpoint to send EndpointMessage to: <participant id>

any idea ?

Try disabling e2eping in config.js and see if that helps with this error.

Can you take a screenshot of your js console while running a 3-party call and post?

@Freddie

Disabled e2eipng like this

image

restarted jvb and jicofo, still the same issue

This is what I see on my PC browser

Does this help ?

Are you saying you’re still seeing the "Unable to find endpoint to send EndpointMessage" error?

We need to make sure you’re making a successful websocket connection with the bridge first before tackling the Octo issue. Your js console should show websocket connection information, that’s what I’m looking for.

Hi @Freddie

Seems there was a firewall port forwarding issue, which is resolved.

So the scenario as of now

I have only one JVB ( The one in the JMS Stack Machine, working on port 10001 )

UDP Traffic is forwarded from the firewall and now I can connect internal as well as external network clients to the public endpoints

However, I am seeing this strange log in jvb1.log

Is this something to worry about ?

Plus, when I add the second JVB to the main JMS stack, I still cannot see the participant video from jvb1. Let me know if I can share any files

@Freddie Strange observation

after forwarding all the ports, this is what I did

enabled jvb only on machine 3 (10003) which is port forwarded to public IP:10003

Stopeed jvb on machine 1,2,4 and 5

When I initiate a conference and join another participant from outside the network, or even from inside the network, all get placed on the same jvb but cannot see each other.

Repeating - I have only jvb2 installed on the machine.

[EDIT]

I have added NAT settings in machine 3

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<local-ip>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<jms-public-ip>

and the video is working. lets see if octo works now

Nope. Still the same issue. Just 2 participants, both placed on different jvbs, cannot see each other

@damencho @Freddie @metadata @corby @rn1984 @emrah

My OCTO is SUCCESSFULLY Running!!!

Thank you soo much for all your help.

I have successfully configured it to run behind a firewall using only 1 public IP

I am writing a guide on the same and once done, I’ll share it here

4 Likes

Could you please share the configuration/steps?

Is OCTO not supported in new update ?

I accidently updated to the new jitsi and my OCTO ( splitting participants from single meeting to different bridges ) stopped working

It would be great if you please share the steps you followed for OCTO configuration.

have you any news here?

Hi Guys, the vanilla OCTO installation was successful, up and running. After that I wanted to achieve docker OCTO and this is the scenario. Please note - All everything happening below is done on a single VM

Version - 5870 - Release stable-5870 · jitsi/docker-jitsi-meet · GitHub

My virtual machine is One-to-one NAT’ed with the Public IP and all ports are forwarded as expected.

Looking at the environment variables listed in JVB service in the docker-compose, I have added some missing environment variables in .env file which can be seen below

# OCTO SETTINGS

TESTING_OCTO_PROBABILITY=1
ENABLE_OCTO=true
OCTO_BRIDGE_SELECTION_STRATEGY=SplitBridgeSelectionStrategy
JVB_OCTO_BIND_ADDRESS=0.0.0.0
JVB_OCTO_PUBLIC_ADDRESS=<PUBLIC-IP>
JVB_OCTO_BIND_PORT=4096
JVB_OCTO_REGION=Region1

In the same folder, I have the main docker-compose.yaml file for the JMS Stack which looks similar to the github repo.

    # Video bridge
    jvb:
        image: jitsi/jvb:stable-5870
        restart: ${RESTART_POLICY}
        ports:
            - '${JVB_PORT}:${JVB_PORT}/udp'
            - '${JVB_TCP_PORT}:${JVB_TCP_PORT}'
        volumes:
            - ${CONFIG}/jvb:/config:Z
        environment:
            - ENABLE_COLIBRI_WEBSOCKET
            - ENABLE_OCTO
            - DOCKER_HOST_ADDRESS
            - XMPP_AUTH_DOMAIN
            - XMPP_INTERNAL_MUC_DOMAIN
            - XMPP_SERVER
            - JVB_AUTH_USER
            - JVB_AUTH_PASSWORD
            - JVB_BREWERY_MUC
            - JVB_PORT
            - JVB_TCP_HARVESTER_DISABLED
            - JVB_TCP_PORT
            - JVB_TCP_MAPPED_PORT
            - JVB_STUN_SERVERS
            - JVB_ENABLE_APIS
            - JVB_WS_DOMAIN
            - JVB_WS_SERVER_ID
            - PUBLIC_URL
            - JVB_OCTO_BIND_ADDRESS
            - JVB_OCTO_PUBLIC_ADDRESS
            - JVB_OCTO_BIND_PORT
            - JVB_OCTO_REGION
            - TZ
        depends_on:
            - prosody
        networks:
            meet.jitsi:
                aliases:
                    - jvb.meet.jitsi

For convenience, I have added a second jvb.yaml file besides .env which looks something like this

version: '3'

services:

    # Video bridge
    jvb2:
        container_name: jvb2
        image: jitsi/jvb:stable-5870
        restart: ${RESTART_POLICY}
        ports:
            - '10001:10001/udp'
            #- '${JVB_TCP_PORT}:${JVB_TCP_PORT}'
        volumes:
            - ${CONFIG}/jvb2:/config:Z
        environment:
            - ENABLE_COLIBRI_WEBSOCKET
            - ENABLE_OCTO
            - DOCKER_HOST_ADDRESS
            - XMPP_AUTH_DOMAIN
            - XMPP_INTERNAL_MUC_DOMAIN
            - XMPP_SERVER
            - JVB_AUTH_USER
            - JVB_AUTH_PASSWORD
            - JVB_BREWERY_MUC
            - JVB_PORT=10001
            - JVB_TCP_HARVESTER_DISABLED
            - JVB_TCP_PORT
            - JVB_TCP_MAPPED_PORT
            - JVB_STUN_SERVERS
            - JVB_ENABLE_APIS
            - JVB_WS_DOMAIN
            - JVB_WS_SERVER_ID
            - PUBLIC_URL
            - JVB_OCTO_BIND_ADDRESS
            - JVB_OCTO_PUBLIC_ADDRESS
            - JVB_OCTO_BIND_PORT
            - JVB_OCTO_REGION=Region2
            - TZ
        networks:
            meet.jitsi:
                aliases:
                    - jvb2.meet.jitsi

# Custom network so all services can communicate using a FQDN
networks:
    meet.jitsi:

Changes in jvb2.yaml

  1. Service, Container Name = jvb2
  2. Changed UDP port to 10001 / udp
  3. Commented - '${JVB_TCP_PORT}:${JVB_TCP_PORT}'
  4. Changed config directory
  5. In environment variables -
    a. Changed - JVB_PORT=10001
    b. Changed - JVB_OCTO_REGION=Region2
  6. Changed aliases to - jvb2.meet.jitsi

All this can be seen in the file **jvb2.yaml** above, and I up this docker-compose

At this stage, from prosody logs, I can see that the new JVB connects to prosody

info       Client connected
info       Authenticated as jvb@auth.meet.jitsi

The container (jvb2) is UP and running without the jvb-tcp port because commented in jvb2.yaml

97c697318dce   jitsi/jvb:stable-5870                             "/init"                  About a minute ago   Up About a minute   0.0.0.0:10001->10001/udp, :::10001->10001/udp                                              jvb2
00aa119d2079   jitsi/jvb:stable-5870                             "/init"                  7 minutes ago        Up 7 minutes        0.0.0.0:4443->4443/tcp, :::4443->4443/tcp, 0.0.0.0:10000->10000/udp, :::10000->10000/udp   jvb

Disabled p2p from config.js

Good thing -

All the participants that join the meeting are split on JVB1 and JVB2 round-robin way

Smalll Issue

Participants placed on JVB1 cannot see participants placed on JVB2

Web Screenshot

App Screenshot

@Freddie @metadata @emrah @damencho I think I might have missed some small setting here.

Surprisingly, I don’t see port 4096 exposed internally when I do docker ps for both the jvb’s

Firewall doesn’t seem to be an issue

nc -z -u -v <public IP> 10000
Connection to <public IP> 10000 port [udp/*] succeeded!

nc -z -u -v <public IP> 10001
Connection to <public IP> 10001 port [udp/*] succeeded!

Inside both the jvb’s

Solved. Issue is resolved