Jibri Failed to Start

I followed instructions in TUTORIAL - How to Install the NEW JIBRI and when I started Jibri I got the following error :

● jibri.service - Jibri Process
Loaded: loaded (/etc/systemd/system/jibri.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Fri 2022-03-25 23:08:50 EET; 6s ago
Process: 29261 ExecStart=/opt/jitsi/jibri/launch.sh (code=exited, status=203/EXEC)
Main PID: 29261 (code=exited, status=203/EXEC)

mar 25 23:08:50 jibri-virtual-machine systemd[1]: jibri.service: Scheduled restart job, restart counter is at 5.
mar 25 23:08:50 jibri-virtual-machine systemd[1]: Stopped Jibri Process.
mar 25 23:08:50 jibri-virtual-machine systemd[1]: jibri.service: Start request repeated too quickly.
mar 25 23:08:50 jibri-virtual-machine systemd[1]: jibri.service: Failed with result ‘exit-code’.
mar 25 23:08:50 jibri-virtual-machine systemd[1]: Failed to start Jibri Process.

jibri.conf:

jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = “”
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of ‘true’
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
}
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = “prod environment”
xmpp-server-hosts = [“myDomain”]
xmpp-domain = “myDomain”

        control-muc {
            domain = "internal.auth.myDomian"
            room-name = "JibriBrewery"
            nickname = "jibri-nickname"
        }

        control-login {
            domain = "auth.myDomain"
            username = "jibri"
            password = "password"
        }

        call-login {
            domain = "recorder.myDomain"
            username = "recorder"
            password = "password"
        }

        strip-from-room-domain = "conference."
        usage-timeout = 0
        trust-all-xmpp-certs = true
     }
  ]

}
}
recording {
recordings-directory = “/srv/recordings”

TODO: make this an optional param and remove the default

finalize-script = “/path/to/finalize”
}
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
“.*”
]
}
ffmpeg {
resolution = “1920x1080”
// The audio source that will be used to capture audio on Linux
audio-source = “alsa”
// The audio device that will be used to capture audio on Linux
audio-device = “plug:bsnoop”
}
chrome {
// The flags which will be passed to chromium when launching
flags = [
“–use-fake-ui-for-media-stream”,
“–start-maximized”,
“–kiosk”,
“–enabled”,
“–disable-infobars”,
“–autoplay-policy=no-user-gesture-required”
]
}
stats {
enable-stats-d = true
}
webhook {
// A list of subscribers interested in receiving webhook events
subscribers =
}
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.

signing-key-path = “/path/to/key.pem”

// The kid to use as part of the JWT

kid = “key-id”

// The issuer of the JWT

issuer = “issuer”

// The audience of the JWT

audience = “audience”

// The TTL of each generated JWT. Can’t be less than 10 minutes.

ttl = 1 hour

}
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds

// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes

// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds

}
}

Currently I’m using Ubuntu 20.04 vmware for Jibri and Ubuntu 20.04 Azure vm for Jitsi meet.

No log file found. /var/log/jitsi/jibri is empty.

Java:

/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java -version
openjdk version “1.8.0_292”
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_292-b10)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.292-b10, mixed mode)

Also: usermod -aG adm,audio,video,plugdev jibri

Can you please help figuring out the issue?

Did you install as root user?
Share the output of

sudo nano /opt/jitsi/jibri/launch.sh

I tried to avoid the installation with root user however some commands can’t be done without the root privilege. For Jibri I remember that I used sudo without root.

sudo nano /opt/jitsi/jibri/launch.sh

#!/bin/bash

exec /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java -Djava.util.logging.config.file=/etc/jitsi/jibri/logging.properties -Dconfig.file="/etc/jitsi/jibri/jibri.conf" -jar /opt/jitsi/jibri/jibri.jar --config “/etc/jitsi/jibri/config.json”

Naw, trying installing as root user. It says so right there at the beginning of the tutorial.

Will do and share the result. Thank you very much.

Restarted the installation and got the same error:

jibri.service - Jibri Process
Loaded: loaded (/etc/systemd/system/jibri.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2022-03-26 00:20:40 EET; 4s ago
Process: 28662 ExecStart=/opt/jitsi/jibri/launch.sh (code=exited, status=203/EXEC)
Main PID: 28662 (code=exited, status=203/EXEC)

mar 26 00:20:40 jibri-virtual-machine systemd[1]: jibri.service: Scheduled restart job, restart counter is at 3.
mar 26 00:20:40 jibri-virtual-machine systemd[1]: Stopped Jibri Process.
mar 26 00:20:40 jibri-virtual-machine systemd[1]: jibri.service: Start request repeated too quickly.
mar 26 00:20:40 jibri-virtual-machine systemd[1]: jibri.service: Failed with result ‘exit-code’.
mar 26 00:20:40 jibri-virtual-machine systemd[1]: Failed to start Jibri Process.

Any suggestions please!

Run this script as root, then try to start recording. You should generate some logs in Jibri then. Share the logs.

/opt/jitsi/jibri/launch.sh

root@jibri-virtual-machine:~# /opt/jitsi/jibri/launch.sh

Exception in thread “main” java.lang.ExceptionInInitializerError
at org.jitsi.jibri.MainKt.handleCommandLineArgs(Main.kt:193)
at org.jitsi.jibri.MainKt.main(Main.kt:53)
Caused by: com.typesafe.config.ConfigException$Parse: /etc/jitsi/jibri/jibri.conf: 60: List should have ended with ] or had a comma, instead had token: ‘’ (Reserved character '’ is not allowed outside quotes) (if you want ‘’ (Reserved character '’ is not allowed outside quotes) to be part of a string value, then double-quote it)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseError(ConfigDocumentParser.java:201)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseError(ConfigDocumentParser.java:197)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseArray(ConfigDocumentParser.java:586)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseValue(ConfigDocumentParser.java:249)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.consolidateValues(ConfigDocumentParser.java:152)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseObject(ConfigDocumentParser.java:473)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseValue(ConfigDocumentParser.java:247)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseObject(ConfigDocumentParser.java:458)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseValue(ConfigDocumentParser.java:247)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseObject(ConfigDocumentParser.java:458)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parse(ConfigDocumentParser.java:648)
at com.typesafe.config.impl.ConfigDocumentParser.parse(ConfigDocumentParser.java:14)
at com.typesafe.config.impl.Parseable.rawParseValue(Parseable.java:262)
at com.typesafe.config.impl.Parseable.rawParseValue(Parseable.java:250)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:180)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:174)
at com.typesafe.config.impl.Parseable.parse(Parseable.java:301)
at com.typesafe.config.ConfigFactory.parseFile(ConfigFactory.java:790)
at com.typesafe.config.DefaultConfigLoadingStrategy.parseApplicationConfig(DefaultConfigLoadingStrategy.java:51)
at com.typesafe.config.ConfigFactory.defaultApplication(ConfigFactory.java:529)
at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:261)
at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:258)
at com.typesafe.config.impl.ConfigImpl$LoaderCache.getOrElseUpdate(ConfigImpl.java:66)
at com.typesafe.config.impl.ConfigImpl.computeCachedConfig(ConfigImpl.java:93)
at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:258)
at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:234)
at org.jitsi.jibri.config.Config.(Config.kt:26)
… 2 more

I can see syntax error! I copied the exact template and did not change anything except domain name and passwords.

Possibly you edited the file with an advanced editor that used a bad character for “”. there is a difference between true quotes “” and false ones, aka ‘smart quotes’. Not sure I can insert smart quotes in this post. Look up smart quotes.

I tried to fix this syntax issue but every time it came up with a new line with issues. I used instead this one which I found it in github:

jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = “”
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of ‘true’
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
}
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
// A user-friendly name for this environment
name = “xmpp environment”

        // A list of XMPP server hosts to which we'll connect
        xmpp-server-hosts = [ "myDomain" ]

        // The base XMPP domain
        xmpp-domain = "myDomain"

        // The MUC we'll join to announce our presence for
        // recording and streaming services
        control-muc {
            domain = "internal.auth.myDomain"
            room-name = "JibriBrewery"
            nickname = "jibri-nickname"
        }

        // The login information for the control MUC
        control-login {
            domain = "auth.myDomain"
            username = "jibri"
            password = "Password"
        }

        // An (optional) MUC configuration where we'll
        // join to announce SIP gateway services
        // sip-control-muc {
           // domain = domain
           // room-name = room-name
           // nickname = nickname
        // }

        // The login information the selenium web client will use
        call-login {
            domain = "recorder.myDomain"
            username = "recorder"
            password = "Password"
        }

        // The value we'll strip from the room JID domain to derive
        // the call URL
        strip-from-room-domain = "conference."

        // How long Jibri sessions will be allowed to last before
        // they are stopped.  A value of 0 allows them to go on
        // indefinitely
        usage-timeout = 0

        // Whether or not we'll automatically trust any cert on
        // this XMPP domain
        trust-all-xmpp-certs = true
    }
]
}

}
recording {
recordings-directory = “/srv/recordings”
# TODO: make this an optional param and remove the default
finalize-script = “”
}
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
“.*”
]
}
chrome {
// The flags which will be passed to chromium when launching
flags = [
“–use-fake-ui-for-media-stream”,
“–ignore-certificate-errors”,
“–start-maximized”,
“–kiosk”,
“–enabled”,
“–disable-infobars”,
“–autoplay-policy=no-user-gesture-required”
]
}
stats {
enable-stats-d = true
}
webhook {
// A list of subscribers interested in receiving webhook events
subscribers =
}
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = “/path/to/key.pem”

// The kid to use as part of the JWT
# kid = "key-id"

// The issuer of the JWT
# issuer = "issuer"

// The audience of the JWT
# audience = "audience"

// The TTL of each generated JWT.  Can't be less than 10 minutes.
# ttl = 1 hour

}
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds

// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes

// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds

}
}

The same error, Jibri failed to start

root@jibri-virtual-machine:~# systemctl restart jibri.service
root@jibri-virtual-machine:~# systemctl status jibri.service
● jibri.service - Jibri Process
Loaded: loaded (/etc/systemd/system/jibri.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Sat 2022-03-26 02:02:31 EET; 1s ago
Process: 29887 ExecStart=/opt/jitsi/jibri/launch.sh (code=exited, status=203/EXEC)
Main PID: 29887 (code=exited, status=203/EXEC)

mar 26 02:02:31 jibri-virtual-machine systemd[1]: jibri.service: Scheduled restart job, restart counter is at 5.
mar 26 02:02:31 jibri-virtual-machine systemd[1]: Stopped Jibri Process.
mar 26 02:02:31 jibri-virtual-machine systemd[1]: jibri.service: Start request repeated too quickly.
mar 26 02:02:31 jibri-virtual-machine systemd[1]: jibri.service: Failed with result ‘exit-code’.
mar 26 02:02:31 jibri-virtual-machine systemd[1]: Failed to start Jibri Process.

root@jibri-virtual-machine:~# /opt/jitsi/jibri/launch.sh
SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See SLF4J Error Codes for further details.

And here maybe an interesting finding:

journalctl -xe

– Subject: A stop job for unit jibri-icewm.service has finished
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– A stop job for unit jibri-icewm.service has finished.

– The job identifier is 16667 and the job result is done.
mar 26 02:02:32 jibri-virtual-machine systemd[1]: jibri-xorg.service: Start request repeated too quickly.
mar 26 02:02:32 jibri-virtual-machine systemd[1]: jibri-xorg.service: Failed with result ‘exit-code’.
– Subject: Unit failed
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– The unit jibri-xorg.service has entered the ‘failed’ state with result ‘exit-code’.
mar 26 02:02:32 jibri-virtual-machine systemd[1]: Failed to start Jibri Xorg Process.
– Subject: A start job for unit jibri-xorg.service has failed
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– A start job for unit jibri-xorg.service has finished with a failure.

– The job identifier is 16731 and the job result is failed.
mar 26 02:02:32 jibri-virtual-machine systemd[1]: Dependency failed for Jibri Window Manager.
– Subject: A start job for unit jibri-icewm.service has failed
– Defined-By: systemd
– Support: Enterprise open source support | Ubuntu

– A start job for unit jibri-icewm.service has finished with a failure.

– The job identifier is 16667 and the job result is dependency.
mar 26 02:02:32 jibri-virtual-machine systemd[1]: jibri-icewm.service: Job jibri-icewm.service/start failed with result ‘dependency’.

You still have smart quotes in there. There might be an issue with the editor you’re using.

In your command line, type this:

rm /etc/jitsi/jibri/jibri.conf

Then,

nano /etc/jitsi/jibri/jibri.conf

This creates a new file. Then with the new file still open on your command line, go back to this tutorial, copy the jibri.conf from there and paste it directly into your command line. Make the necessary changes (domain e.t.c…) while in the command line, save and exit.

I did exactly what you have written.

root@jibri-virtual-machine:~# /opt/jitsi/jibri/launch.sh

Exception in thread “main” java.lang.ExceptionInInitializerError
at org.jitsi.jibri.MainKt.handleCommandLineArgs(Main.kt:193)
at org.jitsi.jibri.MainKt.main(Main.kt:53)
Caused by: com.typesafe.config.ConfigException$Parse: /etc/jitsi/jibri/jibri.conf: 87: Expecting a value but got wrong token: ‘}’ (if you intended ‘}’ to be part of a key or string value, try enclosing the key or value in double quotes, or you may be able to rename the file .properties rather than .conf)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseError(ConfigDocumentParser.java:201)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseError(ConfigDocumentParser.java:197)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseValue(ConfigDocumentParser.java:251)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseObject(ConfigDocumentParser.java:475)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseValue(ConfigDocumentParser.java:247)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseObject(ConfigDocumentParser.java:458)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseValue(ConfigDocumentParser.java:247)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parseObject(ConfigDocumentParser.java:458)
at com.typesafe.config.impl.ConfigDocumentParser$ParseContext.parse(ConfigDocumentParser.java:648)
at com.typesafe.config.impl.ConfigDocumentParser.parse(ConfigDocumentParser.java:14)
at com.typesafe.config.impl.Parseable.rawParseValue(Parseable.java:262)
at com.typesafe.config.impl.Parseable.rawParseValue(Parseable.java:250)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:180)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:174)
at com.typesafe.config.impl.Parseable.parse(Parseable.java:301)
at com.typesafe.config.ConfigFactory.parseFile(ConfigFactory.java:790)
at com.typesafe.config.DefaultConfigLoadingStrategy.parseApplicationConfig(DefaultConfigLoadingStrategy.java:51)
at com.typesafe.config.ConfigFactory.defaultApplication(ConfigFactory.java:529)
at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:261)
at com.typesafe.config.ConfigFactory$1.call(ConfigFactory.java:258)
at com.typesafe.config.impl.ConfigImpl$LoaderCache.getOrElseUpdate(ConfigImpl.java:66)
at com.typesafe.config.impl.ConfigImpl.computeCachedConfig(ConfigImpl.java:93)
at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:258)
at com.typesafe.config.ConfigFactory.load(ConfigFactory.java:234)
at org.jitsi.jibri.config.Config.(Config.kt:26)
… 2 more

Share your current jibri.conf. Use the preformatted text tool (shown below) to make it easy to read.

Screen Shot 2022-03-25 at 8.47.23 PM

The issue appears to be around a bracket.

jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = ""
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of ‘true’
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
 }
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = "prod environment"
xmpp-server-hosts = ["jitsi003.eastus.cloudapp.azure.com"]
xmpp-domain = "jitsi003.eastus.cloudapp.azure.com"


            control-muc {
                domain = "internal.auth.jitsi003.eastus.cloudapp.azure.com"
                room-name = "JibriBrewery"
                nickname = "jibri-nickname"
            }
            control-login {
                domain = "auth.jitsi003.eastus.cloudapp.azure.com"
                username = "jibri"
                password = "abc.123"
            }

            call-login {
                domain = "recorder.jitsi003.eastus.cloudapp.azure.com"
                username = "recorder"
                password = "abc.321"
            }

            strip-from-room-domain = "conference."
            usage-timeout = 0
            trust-all-xmpp-certs = true
         }
      ]
   }
 }
recording {
recordings-directory = "/srv/recordings"
# TODO: make this an optional param and remove the default
finalize-script = "/path/to/finalize"
 }
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
".*"
   ]
 }
ffmpeg {
resolution = "1920x1080"
// The audio source that will be used to capture audio on Linux
audio-source = "alsa"
// The audio device that will be used to capture audio on Linux
audio-device = "plug:bsnoop"
 }
chrome {
// The flags which will be passed to chromium when launching
flags = [
"–use-fake-ui-for-media-stream",
"–start-maximized",
"–kiosk",
"–enabled",
"–disable-infobars",
"–autoplay-policy=no-user-gesture-required"
   ]
}
stats {
enable-stats-d = true
 }
webhook {
// A list of subscribers interested in receiving webhook events
subscribers =
 }
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = "/path/to/key.pem"

// The kid to use as part of the JWT
# kid = "key-id"

// The issuer of the JWT
# issuer = "issuer"

// The audience of the JWT
# audience = "audience"

// The TTL of each generated JWT.  Can't be less than 10 minutes.
# ttl = 1 hour

 }
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds

// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes

// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds

   }
}

Did you restart jibri after making the changes?

Yes I did.

systemctl restart jibri.service

Try this:

jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = ""
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of ‘true’
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
 }
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = "prod environment"
xmpp-server-hosts = ["jitsi003.eastus.cloudapp.azure.com"]
xmpp-domain = "jitsi003.eastus.cloudapp.azure.com"


            control-muc {
                domain = "internal.auth.jitsi003.eastus.cloudapp.azure.com"
                room-name = "JibriBrewery"
                nickname = "jibri-nickname"
            }
            control-login {
                domain = "auth.jitsi003.eastus.cloudapp.azure.com"
                username = "jibri"
                password = "abc.123"
            }

            call-login {
                domain = "recorder.jitsi003.eastus.cloudapp.azure.com"
                username = "recorder"
                password = "abc.321"
            }

            strip-from-room-domain = "conference."
            usage-timeout = 0
            trust-all-xmpp-certs = true
         }
      ]
   }
 }
recording {
recordings-directory = "/srv/recordings"
# TODO: make this an optional param and remove the default
finalize-script = "/path/to/finalize"
 }
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
".*"
   ]
 }
ffmpeg {
resolution = "1920x1080"
// The audio source that will be used to capture audio on Linux
audio-source = "alsa"
// The audio device that will be used to capture audio on Linux
audio-device = "plug:bsnoop"
 }
chrome {
// The flags which will be passed to chromium when launching
flags = [
"--use-fake-ui-for-media-stream",
"--start-maximized",
"--kiosk",
"--enabled",
"--disable-infobars",
"--autoplay-policy=no-user-gesture-required"
   ]
}
stats {
enable-stats-d = true
 }
webhook {
// A list of subscribers interested in receiving webhook events
subscribers = []
 }
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = "/path/to/key.pem"

// The kid to use as part of the JWT
# kid = "key-id"

// The issuer of the JWT
# issuer = "issuer"

// The audience of the JWT
# audience = "audience"

// The TTL of each generated JWT.  Can't be less than 10 minutes.
# ttl = 1 hour

 }
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds

// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes

// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds

   }
}

Copy and paste exactly. Restart Jibri. Test recording.

nothing yet :frowning:

The same failed to start Jibri process.

Run the script and post the log.

if you mean /opt/jitsi/jibri/launch.sh then this is what I got now

SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See SLF4J Error Codes for further details.