Difficulty getting Jitsi and Jibri working

I have attempted to get jitsi and jibri to work across several installations and servers but I always end up with the same issue.

I never see more than this in the jibri.log:
2020-12-17 16:11:27.079 INFO: [1] org.jitsi.jibri.Main.handleCommandLineArgs() Jibri run with args [–config, /etc/jitsi/jibri/config.json]
2020-12-17 16:11:27.147 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Checking legacy config file /etc/jitsi/jibri/config.json
2020-12-17 16:11:27.148 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Legacy config file /etc/jitsi/jibri/config.json doesn’t exist
2020-12-17 16:11:27.652 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() got jwtConfig: {}

2020-12-17 16:11:27.653 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() Unable to create JwtInfo: com.typesafe.config.ConfigException$Missing: /etc/jitsi/jibri/jibri.conf: 75: No configuration setting found for key ‘signing-key-path’
2020-12-17 16:11:27.752 INFO: [1] org.jitsi.jibri.Main.main() Using port 3333 for internal HTTP API
2020-12-17 16:11:27.776 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-12-17 16:11:28.062 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=IDLE, health=OverallHealth(healthStatus=HEALTHY, details={})), publishing presence to connections
2020-12-17 16:11:28.068 INFO: [1] org.jitsi.jibri.Main.main() Using port 2222 for HTTP API
2020-12-17 16:12:27.750 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-12-17 16:13:27.749 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-12-17 16:14:27.748 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-12-17 16:15:27.749 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status

And I never get past this in jicofo log:
SEVERE: [29] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can’t start

I have gone over many threads where people face a similar issue but none of their solutions work for my setup.

I have followed the quick setup guide and wiki docs but I have been unable to get past this issue. When I try to click “Start recording” I get an immediate “recording unavailable”. My x log does not show any errors. I never see any connection attempts to launch/use jibri.

I have tried multiple setups but the current setup is 2 VMware virtual machines running Ubuntu 16.04. I have jitsi, jicofo, prosody, etc on 1 VM, and Jibri on another. 4 vcores 8gb each.

jicofo log: https://pastebin.com/CmdYZtKH
prosody log: https://pastebin.com/mVvHk8Qf
jvb log: https://pastebin.com/teXyNYQe
jibri log: https://pastebin.com/bfGXarDv
xorg log: https://pastebin.com/BAVEUxHi
jibri.conf: https://pastebin.com/FpZ6FEYM
jicofo.conf: https://pastebin.com/MeiZdCsr
jicofo sip-comm.prop: https://pastebin.com/7w0Mphaq
meet.domain.com-config.js: https://pastebin.com/SbgG8uC6

Any help is appreciated!

Can you share your jibri.conf file?

Hi Freddie, it is here https://pastebin.com/FpZ6FEYM

jibri {
	recording {
		recordings-directory = "/home/recordings"
		# TODO: make this an optional param and remove the default
		finalize-script = "/home/recordings/finalize_recording.sh"
    "xmpp_environments": [
            "name": "prod environment",
            "xmpp_server_hosts": [
            "xmpp_domain": "",
            "control_login": {
                // The domain to use for logging in
                "domain": "auth.meet.jengas.dev",
                // The credentials for logging in
                "username": "jibri",
                "password": "password"
            "control_muc": {
                "domain": "internal.auth.meet.jengas.dev",
                "room_name": "JibriBrewery",
                "nickname": "jibri-nickname"
            "call_login": {
                "domain": "recorder.meet.jengas.dev",
                "username": "recorder",
                "password": "password"
            "room_jid_domain_string_to_strip_from_start": "conference.",
            "usage_timeout": "0",
			trust-all-xmpp-certs = true
	chrome {
		// The flags which will be passed to chromium when launching
		flags = [
  id = "1"
  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 = []
  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
  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

Looks like you copied information from a config.json into your jibri.conf. The fields are slightly different, so they’re not being read. Take a look at this Tutorial - especially the jibri.conf part under the Troubleshooting section. Use the information there to correct your jibri.conf.

TUTORIAL: Jibri Overview, Troubleshooting Tips & Tricks - Solve your Jibri Problems, Quickly!

I have not copied anything from a config.json, just copy paste from the current documentation such as it is. The config comes from here: https://github.com/jitsi/jibri/blob/master/src/main/resources/reference.conf
which is the only documentation I found for jibri.conf. That url is the same one referenced in the “tutorial” link you have posted.

I have followed the steps at your link but that has not helped at all.

That’s not from the example in the referenced Tutorial. Like I mentioned before, the fields are different. But hey… :man_shrugging:t5:

Your xmpp environment section is not setup correctly. You have:

jibri {
    "xmpp_environments": [

But look at reference.conf for how it needs to be defined. You can look here for what the environment config themselves should be.

Ok I think I see now thank you for the clarification.

No love yet but I’m not giving up:)

1 Like