Jibri hostnames


#1

I have 2 servers, Jitsi and Jibri. Can someone please clarify which hostnames need to point to which servers? There are so many. This may be due to my lack of understanding of XMPP, but guidance around hostnames would be helpful.


#2

There’s information about this here. Generally speaking, Jibri needs to be configured to point to an XMPP server/domain that matches the other pieces of the installation (Jicofo, etc). And both Jicofo and Jibri need to be configured to join the same MUC, so that Jicofos can discover Jibris to be used for recording/live streaming.


#3

Is it the case, when there is 2 servers, one Jitsi Meet(videobridge, jicofo, meet,prosody, etc) and one jibri — where all references to hostnames practically point back to the single Jitsi Meet server? Is there a diagram that I can reference? I find myself creating A records simply pointing back to the single Meet VM.


#4

jibri gets configured to point at the prosody server–is that what you mean by the Jitsi Meet server? (it would be if that’s where you’re hosting the prosody server)


#5

@bbaldino that’s correct. Can you direct me on how I can test/check if jibri had successfully made a connection to prosody?


#6

The Jibri logs will show when it’s connected.


#7

Thanks @bbaldino

root@ip-10-0-0-66:/etc/jitsi# tail -f /var/log/jitsi/jibri/log.0.txt
2019-01-16 18:29:31.539 INFO: [1] org.jitsi.jibri.Main.main() Using config file /etc/jitsi/jibri/config.json
2019-01-16 18:29:32.077 INFO: [1] org.jitsi.jibri.Main.loadConfig() Parsed config:
JibriConfig(recordingDirectory=/tmp/recordings, enabledStatsD=true, finalizeRecordingScriptPath=/etc/jitsi/jibri/fiplan.tv, username=jibri, password=jibriauthpass), controlMuc=XmppMuc(domain=internal.auth.convo.domain.tv, roomNa., usageTimeoutMins=0, trustAllXmppCerts=true)])
2019-01-16 18:29:32.495 WARNING: [1] org.glassfish.jersey.internal.inject.Providers.checkProviderRuntime() A provide provider org.jitsi.jibri.api.http.internal.InternalHttpApi will be ignored.
2019-01-16 18:29:32.703 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to xmpp environment on convo.me=jibri, password=jibriauthpass), controlMuc=XmppMuc(domain=internal.auth.convo.domain.tv, roomName=JibriBreweryMins=0, trustAllXmppCerts=true)
2019-01-16 18:29:32.709 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() The trustAllXmppCerts config is enabled
2019-01-16 18:29:32.967 INFO: [1] class org.jitsi.xmpp.mucclient.MucClient.connected() [prod environment: auth.conv
2019-01-16 18:29:33.019 INFO: [1] class org.jitsi.xmpp.mucclient.MucClient.authenticated() [prod environment: auth.
2019-01-16 18:29:38.028 SEVERE: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Error connecting to xmpp environment: ter: (IQTypeFilter: type=error, IQTypeFilter: type=result), StanzaIdFilter: id=gXD6g-18)), : fromFilter (OrFilter:
2019-01-16 18:29:38.057 WARNING: [1] org.glassfish.jersey.internal.inject.Providers.checkProviderRuntime() A providtsi.jibri.api.http.HttpApi will be ignored.

Looks like xmpp connection is being made partially?

If I check the prosody config:

-- Plugins path gets uncommented during jitsi-meet-tokens package install - that's where token plugin is located
--plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }

VirtualHost "convo.domain.tv"
        -- enabled = false -- Remove this line to enable this host
        authentication = "anonymous"
        -- Properties below are modified by jitsi-meet-tokens package config
        -- and authentication above is switched to "token"
        --app_id="example_app_id"
        --app_secret="example_app_secret"
        -- Assign this host a certificate for TLS, otherwise it would use the one
        -- set in the global section (if any).
        -- Note that old-style SSL on port 5223 only supports one certificate, and will always
        -- use the global one.
        ssl = {
                key = "/etc/prosody/certs/convo.domain.tv.key";
                certificate = "/etc/prosody/certs/convo.domain.tv.crt";
        }
        -- we need bosh
        modules_enabled = {
            "bosh";
            "pubsub";
            "ping"; -- Enable mod_ping
        }

        c2s_require_encryption = false

Component "conference.convo.domain.tv" "muc"
    storage = "null"
    --modules_enabled = { "token_verification" }
admins = { "focus@auth.convo.domain.tv" }

Component "jitsi-videobridge.convo.domain.tv"
    component_secret = "Ixe2hNzk"

VirtualHost "auth.convo.domain.tv"
    ssl = {
        key = "/etc/prosody/certs/auth.convo.domain.tv.key";
        certificate = "/etc/prosody/certs/auth.convo.domain.tv.crt";
    }
    authentication = "internal_plain"

Component "focus.convo.domain.tv"
    component_secret = "Dtv4EUTd"

All FQDN essentially points back to the single Jitsi meet server. Is this OK?


#8

2019-01-16 18:29:38.028 SEVERE: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Error connecting to xmpp environment: ter: (IQTypeFilter: type=error, IQTypeFilter: type=result), StanzaIdFilter: id=gXD6g-18)), : fromFilter (OrFilter:

Hm, I have no idea what this error is. I haven’t seen it before and it looks like it’s truncated in some way. Maybe an issue with adding the IQ handler? Either way, it doesn’t seem to be an issue with the connection itself, but some things we do after being connected.


#9

@bbaldino

Looks like I was able to get rid of the severe error by renaming FQDN by setting internal.auth.domain from auth.domain
can you share how I can troubleshoot why my Jitsi would throw a Live Streaming failed message? Not sure where to begin.


#10

I’d need to see the logs.


#11

@bbaldino can you tell me which relevant logs could be helpful?


#12

Are you talking about the log file? Or specific log statements? Jibri logs go to a single file (log.#.txt). as for specific statements, Jibri doesn’t log much and I’ve tried to make the logs pretty reasonable, so I’d expect an error to stand out.


#13

@bbaldino in terms of hitting the start stream button to seeing the error tooltip message.

As far as Jibri errors, here’s what I have after restarting jibri jibri-xorg jibri-icewm

2019-01-16 21:10:58.556 INFO: [1] org.jitsi.jibri.Main.main() Using config file /etc/jitsi/jibri/config.json
2019-01-16 21:10:59.054 INFO: [1] org.jitsi.jibri.Main.loadConfig() Parsed config:
JibriConfig(recordingDirectory=/tmp/recordings, enabledStatsD=true, finalizeRecordingScriptPath=/etc/jitsi/jibri/finalize_recording.sh, xmppEnvironments=[XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[convo.domain.tv], xmppDomain=convo.domain.tv, controlLogin=XmppCredentials(domain=auth.convo.domain.tv, username=jibri, password=jibriauthpass), controlMuc=XmppMuc(domain=internal.auth.convo.domain.tv, roomName=JibriBrewery, nickname=jibri-nickname), sipControlMuc=null, callLogin=XmppCredentials(domain=recorder.convo.domain.tv, username=recorder, password=jibrirecorderpass), stripFromRoomDomain=conference., usageTimeoutMins=0, trustAllXmppCerts=true)])
2019-01-16 21:10:59.506 WARNING: [1] org.glassfish.jersey.internal.inject.Providers.checkProviderRuntime() A provider org.jitsi.jibri.api.http.internal.InternalHttpApi registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider org.jitsi.jibri.api.http.internal.InternalHttpApi will be ignored.
2019-01-16 21:10:59.732 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to xmpp environment on convo.domain.tv with config XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[convo.domain.tv], xmppDomain=convo.domain.tv, controlLogin=XmppCredentials(domain=auth.convo.domain.tv, username=jibri, password=jibriauthpass), controlMuc=XmppMuc(domain=internal.auth.convo.domain.tv, roomName=JibriBrewery, nickname=jibri-nickname), sipControlMuc=null, callLogin=XmppCredentials(domain=recorder.convo.domain.tv, username=recorder, password=jibrirecorderpass), stripFromRoomDomain=conference., usageTimeoutMins=0, trustAllXmppCerts=true)
2019-01-16 21:10:59.738 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() The trustAllXmppCerts config is enabled for this domain, all XMPP server provided certificates will be accepted
2019-01-16 21:10:59.965 INFO: [1] class org.jitsi.xmpp.mucclient.MucClient.connected() [prod environment: auth.convo.domain.tv@convo.domain.tv] Xmpp connection status: connected
2019-01-16 21:11:00.038 INFO: [1] class org.jitsi.xmpp.mucclient.MucClient.authenticated() [prod environment: auth.convo.domain.tv@convo.domain.tv] Xmpp connection status: authenticated (resume from previous? false)
2019-01-16 21:11:00.098 WARNING: [1] org.glassfish.jersey.internal.inject.Providers.checkProviderRuntime() A provider org.jitsi.jibri.api.http.HttpApi registered in SERVER runtime does not implement any provider interfaces applicable in the SERVER runtime. Due to constraint configuration problems the provider org.jitsi.jibri.api.http.HttpApi will be ignored.

#14

Those logs show that Jibri hasn’t gotten anything, so I’m guessing your Jicofo isn’t seeing the Jibri at all and returning the error itself. Do you have the jibri brewery muc configured on both Jibri and Jicofo?


#15

@bbaldino

I think that goes back to the original struggle of understand which host names should reflect which servers.
Effectively, every FQDN I have routes back to the IP of the Jitsi meet VM.

internal.auth
auth
conference
focus
jitsi-videobridge
recorder

Jibri config:

{
    // NOTE: this is a *SAMPLE* config file, it will need to be configured with
    // values from your environment

    // Where recording files should be temporarily stored
    "recording_directory":"/tmp/recordings",
    // The path to the script which will be run on completed recordings
    "finalize_recording_script_path": "/etc/jitsi/jibri/finalize_recording.sh",
    "xmpp_environments": [
        {
            // A friendly name for this environment which can be used
            //  for logging, stats, etc.
            "name": "prod environment",
            // The hosts of the XMPP servers to connect to as part of
            //  this environment
            "xmpp_server_hosts": [
                "convo.domain.tv"
            ],
            // The xmpp domain we'll connect to on the XMPP server
            "xmpp_domain": "convo.domain.tv",
            // Jibri will login to the xmpp server as a privileged user
            "control_login": {
                // The domain to use for logging in
                "domain": "auth.convo.domain.tv",
                // The credentials for logging in
                "username": "jibri",
                "password": "jibriauthpass"
            },
            // Using the control_login information above, Jibri will join
            //  a control muc as a means of announcing its availability
            //  to provide services for a given environment
            "control_muc": {
                "domain": "internal.auth.convo.domain.tv",
                "room_name": "JibriBrewery",
                "nickname": "jibri-nickname"
            },
            // All participants in a call join a muc so they can exchange
            //  information.  Jibri can be instructed to join a special muc
            //  with credentials to give it special abilities (e.g. not being
            //  displayed to other users like a normal participant)
            "call_login": {
                "domain": "recorder.convo.domain.tv",
                "username": "recorder",
                "password": "jibrirecorderpass"
            },
            // When jibri gets a request to start a service for a room, the room
            //  jid will look like:
            //  roomName@optional.prefixes.subdomain.xmpp_domain
            // We'll build the url for the call by transforming that into:
            //  https://xmpp_domain/subdomain/roomName
            // So if there are any prefixes in the jid (like jitsi meet, which
            //  has its participants join a muc at conference.xmpp_domain) then
            //  list that prefix here so it can be stripped out to generate
            //  the call url correctly
            "room_jid_domain_string_to_strip_from_start": "conference.",
            // The amount of time, in minutes, a service is allowed to continue.
            //  Once a service has been running for this long, it will be
            //  stopped (cleanly).  A value of 0 means an indefinite amount
            //  of time is allowed
            "usage_timeout": "0"
        }
    ]
}

And jicofo config:

# Jitsi Conference Focus settings
# sets the host name of the XMPP server
JICOFO_HOST=localhost

# sets the XMPP domain (default: none)
JICOFO_HOSTNAME=convo.domain.tv

# sets the secret used to authenticate as an XMPP component
JICOFO_SECRET=Dtv4EUTd

# sets the port to use for the XMPP component connection
JICOFO_PORT=5347

# sets the XMPP domain name to use for XMPP user logins
JICOFO_AUTH_DOMAIN=auth.convo.domain.tv

# sets the username to use for XMPP user logins
JICOFO_AUTH_USER=focus

# sets the password to use for XMPP user logins
JICOFO_AUTH_PASSWORD=t5AEouEm

# extra options to pass to the jicofo daemon
JICOFO_OPTS=""

# adds java system props that are passed to jicofo (default are for home and logging config file)
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jicofo -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/jicofo/logging.properties"

#16

You don’t have the jibri brewery set in your jicofo config, so I’d start there:

org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.convo.domain.tv


#17

@bbaldino

I have

org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.convo.domain.tv
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

in my /etc/jitsi/jicofo/sip-communicator.properties file

Can you direct me on how the line you posted should live in the jicofo config file?


#18

Ok, that’s where it should be. Can you attach Jicofo log files?


#19

@bbaldino

Sure thing:

Jicofo 2019-01-16 21:41:31.169 INFO: [26] org.jitsi.jicofo.ComponentsDiscovery.discoverServices().267 New component discovered: jitsi-videobridge.convo.domain.tv, IQ Stanza (query jabber:iq:version) [to=focus@auth.convo.domain.tv/focus20815792791802,from=jitsi-videobridge.convo.domain.tv,id=9T4mr-29,type=result,]
Jicofo 2019-01-16 21:41:31.169 INFO: [26] org.jitsi.jicofo.BridgeSelector.addJvbAddress().215 Added videobridge: jitsi-videobridge.convo.domain.tv v: IQ Stanza (query jabber:iq:version) [to=focus@auth.convo.domain.tv/focus20815792791802,from=jitsi-videobridge.convo.domain.tv,id=9T4mr-29,type=result,]
Jicofo 2019-01-16 21:41:31.169 WARNING: [26] org.jitsi.jicofo.BridgeSelector.addJvbAddress().227 No pub-sub node mapped for jitsi-videobridge.convo.domain.tv
Jicofo 2019-01-16 21:41:31.171 INFO: [42] org.jitsi.jicofo.JvbDoctor.log() Scheduled health-check task for: jitsi-videobridge.convo.domain.tv
Jicofo 2019-01-16 21:41:31.173 INFO: [26] org.jitsi.jicofo.ComponentsDiscovery.discoverServices().267 New component discovered: auth.convo.domain.tv, IQ Stanza (query jabber:iq:version) [to=focus@auth.convo.domain.tv/focus20815792791802,from=auth.convo.domain.tv,id=9T4mr-34,type=result,]
Jicofo 2019-01-16 21:41:31.173 INFO: [26] org.jitsi.jicofo.JitsiMeetServices.newNodeDiscovered().208 Detected XMPP server version: IQ Stanza (query jabber:iq:version) [to=focus@auth.convo.domain.tv/focus20815792791802,from=auth.convo.domain.tv,id=9T4mr-34,type=result,]
Jicofo 2019-01-16 21:41:31.176 INFO: [26] org.jitsi.jicofo.ComponentsDiscovery.discoverServices().267 New component discovered: recorder.convo.domain.tv, IQ Stanza (query jabber:iq:version) [to=focus@auth.convo.domain.tv/focus20815792791802,from=recorder.convo.domain.tv,id=9T4mr-39,type=result,]
Jicofo 2019-01-16 21:41:31.176 INFO: [26] org.jitsi.jicofo.ComponentsDiscovery.scheduleRediscovery().189 Services re-discovery interval: 30000
Jicofo 2019-01-16 21:41:31.177 INFO: [26] org.jitsi.jicofo.FocusManager.log() XMPP provider reg state: RegistrationState=Registered
Jicofo 2019-01-16 21:41:31.186 INFO: [26] org.jitsi.impl.protocol.xmpp.XmppProtocolProvider.doConnect().309 XMPP provider Jabber:focus@auth.convo.domain.tv/focus20815792791802@localhost connected (JID: focus@auth.convo.domain.tv/focus20815792791802)

#20

Is that just from Jicofo starting up? I mean when you reproduce the issue. If you can:

stop Jibri
stop Jicofo
clear Jicofo logs
clear Jibri logs
start Jicofo
start Jibri
try to start a recording/livestream
capture jicofo and jibri logs