"Unable to find an available Jibri, can't start" error when recording

All services are running. I don’t see errors anywhere else. Jitsi loads and works correctly but when I click “Start Recording” it shows generic red error popup and this shows up in /var/log/jitsi/jicofo.log:

Jicofo 2020-10-05 17:31:33.419 INFO: [81] org.jitsi.jicofo.xmpp.FocusComponent.log() Focus request for room: familiareconomicsdriftwisely@conference.MyHostDotCom
Jicofo 2020-10-05 17:31:33.420 INFO: [81] org.jitsi.jicofo.FocusManager.log() Created new focus for familiareconomicsdriftwisely@conference.MyHostDotCom@auth.MyHostDotCom. Conference count 1,op>
Jicofo 2020-10-05 17:31:33.420 INFO: [81] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Joining the room: familiareconomicsdriftwisely@conference.MyHostDotCom
Jicofo 2020-10-05 17:31:33.812 INFO: [29] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Chat room event ChatRoomMemberPresenceChangeEvent[type=MemberJoined sourceRoom=org.jitsi.impl.protocol.xmpp.ChatRoom>
Jicofo 2020-10-05 17:31:33.816 INFO: [29] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Granted owner to familiareconomicsdriftwisely@conference.MyHostDotCom/aebac38f
Jicofo 2020-10-05 17:31:33.816 INFO: [29] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Member familiareconomicsdriftwisely@conference.MyHostDotCom/aebac38f joined.
Jicofo 2020-10-05 17:31:45.629 SEVERE: [235] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2020-10-05 17:31:45.629 INFO: [235] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Failed to start a Jibri session, no Jibris available
Jicofo 2020-10-05 17:32:43.105 INFO: [29] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Chat room event ChatRoomMemberPresenceChangeEvent[type=MemberLeft sourceRoom=org.jitsi.impl.protocol.xmpp.ChatRoomIm>
Jicofo 2020-10-05 17:32:43.105 INFO: [29] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Owner has left the room !
Jicofo 2020-10-05 17:32:43.105 INFO: [29] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Member familiareconomicsdriftwisely@conference.MyHostDotCom/aebac38f is leaving
Jicofo 2020-10-05 17:32:43.105 WARNING: [29] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Participant not found for familiareconomicsdriftwisely@conference.MyHostDotCom/aebac38f terminated already >
Jicofo 2020-10-05 17:32:43.108 INFO: [29] org.jitsi.jicofo.FocusManager.log() Disposed conference for room: familiareconomicsdriftwisely@conference.MyHostDotCom conference count: 0

Not sure if this is related, but, my /etc/jitsi/jibri/jibri.conf file was empty after installation. According to the guide at https://github.com/jitsi/jibri I first left it empty, then, populated it with default values mentioned in https://github.com/jitsi/jibri/blob/master/src/main/resources/reference.conf.

Maybe my jibri.conf file is incorrect?

I also see this error/warning when checking Prosody status. I do not have an SSL cert on the server but not sure if that would cause issue:

    prosody.service - Prosody XMPP Server
         Loaded: loaded (/lib/systemd/system/prosody.service; enabled; vendor preset: enabled)
         Active: active (running) since Mon 2020-10-05 17:56:22 UTC; 24s ago
           Docs: https://prosody.im/doc
       Main PID: 21527 (lua5.2)
          Tasks: 1 (limit: 9451)
         Memory: 12.2M
         CGroup: /system.slice/prosody.service
                 └─21527 lua5.2 /usr/bin/prosody

    Oct 05 17:56:22 meet systemd[1]: Started Prosody XMPP Server.
    Oct 05 17:56:22 meet prosody[21527]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281
    Oct 05 17:56:22 meet prosody[21527]: portmanager: Error binding encrypted port for https: No certificate present in SSL/TLS configuration for https port 5281

Also note that Jitsi and Jibri are installed on the same server. Does Jibri need to be on a separate server to function properly; or, do I need other special config/setup options to make them work on same server (like hosts file update, etc)?

This config template may be helpful

1 Like

jibri.conf should be filled with defaults, it is effectively an overrides file for the defaults. Some fields can’t have defaults (like the ones to point at your environment) so you’ll need to fill those out.

This is a new install, right? So there’s no config.json in that directory? (If so, that’s good: just fill out jibri.conf)

1 Like

Yes, there was no config.json in /etc/jitsi/jibri. It is a fresh install and did create /etc/jitsi/jibri/jibri.conf but it was empty. I initially used https://github.com/jitsi/jibri/blob/master/src/main/resources/reference.conf (as reference in Jibri install docs) to populate the values but that didn’t work, so I left it empty.

After using the config file template that @emrah provided, I was able to get recordings to at least start but then they immediately fail. I am investigating that now.

That config file looks like what I was missing. Adding it and updating values, I’m able to get recording started but it immediately fails (instead of just failing right away). My jicofo log shows Jibri is found but fails shortly after. Maybe something in the config I just added doesn’t match a user, etc I setup earlier?

Jicofo 2020-10-06 15:47:01.775 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Starting session with Jibri jibribrewery@internal.auth.MyDomain/UserName
Jicofo 2020-10-06 15:47:01.775 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Starting Jibri jibribrewery@internal.auth.MyDomain/UserName for stream ID: null in room: broken>
Jicofo 2020-10-06 15:47:02.566 INFO: [34] org.jitsi.jicofo.recording.jibri.JibriDetector.log() Received Jibri jibribrewery@internal.auth.MyDomain/UserName status <jibri-status xmlns='http:/>
Jicofo 2020-10-06 15:47:02.566 INFO: [34] org.jitsi.jicofo.recording.jibri.JibriDetector.log() Jibri: jibribrewery@internal.auth.MyDomain/UserName available: false
Jicofo 2020-10-06 15:47:02.576 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: <iq to='focus@auth.MyDomain/focus90399033155316' from='jibribrewery@inter>
Jicofo 2020-10-06 15:47:02.576 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.MyDomain/UserName has status pending >
Jicofo 2020-10-06 15:47:02.578 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Started Jibri session
Jicofo 2020-10-06 15:47:02.770 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: <iq to='focus@auth.MyDomain/focus90399033155316' from='jibribrewery@inter>
Jicofo 2020-10-06 15:47:02.770 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.MyDomain/UserName has status off and >
Jicofo 2020-10-06 15:47:02.771 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri is no longer pending, cancelling pending timeout task
Jicofo 2020-10-06 15:47:02.771 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri failed, trying to fall back to another Jibri
Jicofo 2020-10-06 15:47:02.771 SEVERE: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2020-10-06 15:47:02.771 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriSession.log() Failed to fall back to another Jibri, this session has now failed: org.jitsi.jicofo.recording.jibri.JibriSessio>
org.jitsi.jicofo.recording.jibri.JibriSession$StartException: All Jibri instances are busy
        at org.jitsi.jicofo.recording.jibri.JibriSession.startInternal(JibriSession.java:359)
        at org.jitsi.jicofo.recording.jibri.JibriSession.start(JibriSession.java:335)
        at org.jitsi.jicofo.recording.jibri.JibriSession.retryRequestWithAnotherJibri(JibriSession.java:642)
        at org.jitsi.jicofo.recording.jibri.JibriSession.handleJibriStatusUpdate(JibriSession.java:712)
        at org.jitsi.jicofo.recording.jibri.JibriSession.processJibriIqFromJibri(JibriSession.java:494)
        at org.jitsi.jicofo.recording.jibri.JibriSession.processJibriIqRequestFromJibri(JibriSession.java:475)
        at org.jitsi.jicofo.recording.jibri.CommonJibriStuff.handleIQRequest(CommonJibriStuff.java:247)
        at org.jitsi.jicofo.recording.jibri.OperationSetJibri.handleIQRequest(OperationSetJibri.java:98)
        at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)
Jicofo 2020-10-06 15:47:02.772 INFO: [91] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Got jibri status off and failure error

Jibri logs please

1 Like

Here is my /var/log/jitsi/jibri/log.0.txt from the test session just now:

2020-10-06 15:45:19.083 INFO: [1] org.jitsi.jibri.Main.handleCommandLineArgs() Jibri run with args [--config, /etc/jitsi/jibri/config.json]
2020-10-06 15:45:19.151 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Checking legacy config file /etc/jitsi/jibri/config.json
2020-10-06 15:45:19.151 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Legacy config file /etc/jitsi/jibri/config.json doesn't exist
2020-10-06 15:45:19.426 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  LambdaSupplier: 'JibriConfig::enableStatsD'
  ConfigSourceSupplier: key: 'jibri.stats.enable-stats-d', type: 'kotlin.Boolean', source: 'config'
2020-10-06 15:45:19.427 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::enableStatsD
2020-10-06 15:45:19.428 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::enableStatsD': org.jitsi.metaconfig.ConfigException$UnableToRetriev>
2020-10-06 15:45:19.428 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.stats.enable-stats-d' from source 'config' as type kotlin.Boolean
2020-10-06 15:45:19.452 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.stats.enable-stats-d' from source 'config' as type kotlin.Boolean
2020-10-06 15:45:19.453 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.stats.enable-stats-d', type: 'kotlin.Boolean', source: 'config'
2020-10-06 15:45:19.464 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  LambdaSupplier: 'JibriConfig::jibriId'
  ConfigSourceSupplier: key: 'jibri.id', type: 'kotlin.String', source: 'config'
2020-10-06 15:45:19.464 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::jibriId
2020-10-06 15:45:19.464 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::jibriId': org.jitsi.metaconfig.ConfigException$UnableToRetrieve$Err>
2020-10-06 15:45:19.464 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.id' from source 'config' as type kotlin.String
2020-10-06 15:45:19.471 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.id' from source 'config' as type kotlin.String
2020-10-06 15:45:19.471 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.id', type: 'kotlin.String', source: 'config'
2020-10-06 15:45:19.475 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  ConfigSourceSupplier: key: 'jibri.webhook.subscribers', type: 'kotlin.collections.List<kotlin.String>', source: 'config'
2020-10-06 15:45:19.475 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.webhook.subscribers' from source 'config' as type kotlin.collections.List<kotlin.String>
2020-10-06 15:45:19.479 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.webhook.subscribers' from source 'config' as type kotlin.collections.List<kotlin.Str>
2020-10-06 15:45:19.480 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.webhook.subscribers', type: 'kotlin.collections.List<kotlin.String>', so>
2020-10-06 15:45:19.714 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.jwt-info' from source 'config' as type com.typesafe.config.ConfigObject
2020-10-06 15:45:19.724 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.jwt-info' from source 'config' as type com.typesafe.config.ConfigObject
2020-10-06 15:45:19.725 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() got jwtConfig: {}

2020-10-06 15:45:19.725 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() Unable to create JwtInfo: com.typesafe.config.ConfigException$Missing: reference.conf @ jar:file:/opt/jitsi/jibr>
2020-10-06 15:45:19.851 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  ConfigSourceSupplier: key: 'internal_http_port', type: 'kotlin.Int', source: 'command line args'
  ConfigSourceSupplier: key: 'jibri.api.http.internal-api-port', type: 'kotlin.Int', source: 'config'
2020-10-06 15:45:19.852 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'internal_http_port' from source 'command line args' as type kotlin.Int
2020-10-06 15:45:19.852 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via ConfigSourceSupplier: key: 'internal_http_port', type: 'kotlin.Int', source: 'command line args':>
2020-10-06 15:45:19.853 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.api.http.internal-api-port' from source 'config' as type kotlin.Int
2020-10-06 15:45:19.854 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.api.http.internal-api-port' from source 'config' as type kotlin.Int
2020-10-06 15:45:19.855 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.api.http.internal-api-port', type: 'kotlin.Int', source: 'config'
2020-10-06 15:45:19.855 INFO: [1] org.jitsi.jibri.Main.main() Using port 8001 for internal HTTP API
2020-10-06 15:45:19.862 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-06 15:45:20.022 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  LambdaSupplier: 'JibriConfig::xmppEnvironments'
  TypeConvertingSupplier: converting value from ConfigSourceSupplier: key: 'jibri.api.xmpp.environments', type: 'kotlin.collections.List<com.typesafe.config.Config>', source: 'config'
2020-10-06 15:45:20.023 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::xmppEnvironments
2020-10-06 15:45:20.023 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::xmppEnvironments': org.jitsi.metaconfig.ConfigException$UnableToRet>
2020-10-06 15:45:20.023 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.api.xmpp.environments' from source 'config' as type kotlin.collections.List<com.typesafe>
2020-10-06 15:45:20.026 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.api.xmpp.environments' from source 'config' as type kotlin.collections.List<com.type>
2020-10-06 15:45:20.028 FINE: [1] org.jitsi.jibri.config.debug() TypeConvertingSupplier: Converted value type from ConfigSourceSupplier: key: 'jibri.api.xmpp.environments', type: 'kotlin.collections.List<c>
2020-10-06 15:45:20.028 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via TypeConvertingSupplier: converting value from ConfigSourceSupplier: key: 'jibri.api.xmpp.environments', ty>
2020-10-06 15:45:20.134 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=IDLE, health=OverallHealth(healthStatus=HEALTHY, details={})), pub>
2020-10-06 15:45:20.141 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to xmpp environment on MyDomain with config XmppEnvironmentConfig(name=Webinar, xmppServerHosts=[we>
2020-10-06 15:45:20.141 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
2020-10-06 15:45:20.159 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  ConfigSourceSupplier: key: 'http_api_port', type: 'kotlin.Int', source: 'command line args'
  ConfigSourceSupplier: key: 'jibri.api.http.external-api-port', type: 'kotlin.Int', source: 'config'
2020-10-06 15:45:20.159 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'http_api_port' from source 'command line args' as type kotlin.Int
2020-10-06 15:45:20.159 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via ConfigSourceSupplier: key: 'http_api_port', type: 'kotlin.Int', source: 'command line args': org.>
2020-10-06 15:45:20.159 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.api.http.external-api-port' from source 'config' as type kotlin.Int
2020-10-06 15:45:20.160 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.api.http.external-api-port' from source 'config' as type kotlin.Int
2020-10-06 15:45:20.160 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.api.http.external-api-port', type: 'kotlin.Int', source: 'config'
2020-10-06 15:45:20.160 WARNING: [26] org.jitsi.xmpp.mucclient.MucClient.log() Disabling certificate verification!
2020-10-06 15:45:20.161 INFO: [1] org.jitsi.jibri.Main.main() Using port 8002 for HTTP API
2020-10-06 15:45:20.278 INFO: [26] org.jitsi.xmpp.mucclient.MucClient.log() Connected.
2020-10-06 15:45:20.278 INFO: [26] org.jitsi.xmpp.mucclient.MucClient.log() Logging in.
2020-10-06 15:45:20.335 INFO: [26] org.jitsi.xmpp.mucclient.MucClient.log() Joined MUC: jibribrewery@internal.auth.MyDomain
2020-10-06 15:46:19.850 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-06 15:47:01.778 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to='jibri@auth.MyDomain/vqsWp9Si' from='jibribrewery@internal.auth.MyDomain/focu>
2020-10-06 15:47:01.779 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Received start request, starting service
2020-10-06 15:47:01.894 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleStartService() Parsed call url info: CallUrlInfo(baseUrl=https://MyDomain, callName=brokenarraysyieldgradually, urlParams>
2020-10-06 15:47:01.895 INFO: [45] org.jitsi.jibri.JibriManager.startFileRecording() Starting a file recording with params: FileRecordingRequestParams(callParams=CallParams(callUrlInfo=CallUrlInfo(baseUrl=>
2020-10-06 15:47:01.910 FINE: [45] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.chrome.flags' from source 'config' as type kotlin.collections.List<kotlin.String>
2020-10-06 15:47:01.911 FINE: [45] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.chrome.flags' from source 'config' as type kotlin.collections.List<kotlin.String>
2020-10-06 15:47:02.504 INFO: [45] org.openqa.selenium.remote.ProtocolHandshake.createSession() Detected dialect: OSS
2020-10-06 15:47:02.521 INFO: [45] org.jitsi.jibri.selenium.JibriSelenium.<init>() Starting empty call check with a timeout of PT30S
2020-10-06 15:47:02.549 FINE: [45] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.<init>() Detected os as OS: LINUX
2020-10-06 15:47:02.555 FINE: [45] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  LambdaSupplier: 'JibriConfig::recordingDirectory'
  ConfigSourceSupplier: key: 'jibri.recording.recordings-directory', type: 'kotlin.String', source: 'config'
2020-10-06 15:47:02.555 FINE: [45] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::recordingDirectory
2020-10-06 15:47:02.556 FINE: [45] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::recordingDirectory': org.jitsi.metaconfig.ConfigException$UnableTo>
2020-10-06 15:47:02.556 FINE: [45] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.recording.recordings-directory' from source 'config' as type kotlin.String
2020-10-06 15:47:02.556 FINE: [45] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.recording.recordings-directory' from source 'config' as type kotlin.String
2020-10-06 15:47:02.557 FINE: [45] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.recording.recordings-directory', type: 'kotlin.String', source: 'config'
2020-10-06 15:47:02.557 FINE: [45] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  LambdaSupplier: 'JibriConfig::finalizeRecordingScriptPath'
  ConfigSourceSupplier: key: 'jibri.recording.finalize-script', type: 'kotlin.String', source: 'config'
2020-10-06 15:47:02.557 FINE: [45] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::finalizeRecordingScriptPath
2020-10-06 15:47:02.557 FINE: [45] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::finalizeRecordingScriptPath': org.jitsi.metaconfig.ConfigException>
2020-10-06 15:47:02.558 FINE: [45] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.recording.finalize-script' from source 'config' as type kotlin.String
2020-10-06 15:47:02.558 FINE: [45] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.recording.finalize-script' from source 'config' as type kotlin.String
2020-10-06 15:47:02.558 FINE: [45] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.recording.finalize-script', type: 'kotlin.String', source: 'config'
2020-10-06 15:47:02.558 INFO: [45] org.jitsi.jibri.service.impl.FileRecordingJibriService.<init>() Writing recording to /srv/recordings/pyzagaywxrzydggj, finalize script path /path/to/finalize_recording.sh
2020-10-06 15:47:02.561 FINE: [45] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: start:recording
2020-10-06 15:47:02.562 INFO: [45] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: IDLE -> BUSY
2020-10-06 15:47:02.562 FINE: [45] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-06 15:47:02.562 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=BUSY, health=OverallHealth(healthStatus=HEALTHY, details={})), pu>
2020-10-06 15:47:02.574 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Sending 'pending' response to start IQ
2020-10-06 15:47:02.763 SEVERE: [58] org.jitsi.jibri.selenium.JibriSelenium.run() An error occurred while joining the call: org.openqa.selenium.WebDriverException: <unknown>: Failed to read the 'localStora>
  (Session info: chrome=85.0.4183.121)
  (Driver info: chromedriver=85.0.4183.87 (cd6713ebf92fa1cacc0f1a598df280093af0c5d7-refs/branch-heads/4183@{#1689}),platform=Linux 5.4.0-48-generic x86_64) (WARNING: The server did not provide any stacktra>
Command duration or timeout: 0 milliseconds
Build info: version: 'unknown', revision: 'unknown', time: 'unknown'
System info: host: 'meet', ip: '10.2.160.251', os.name: 'Linux', os.arch: 'amd64', os.version: '5.4.0-48-generic', java.version: '1.8.0_265'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 85.0.4183.87 (cd6713ebf9>
Session ID: 3604ab422c68e8eb19751900ef2da423 with stack:
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:423)
org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80)
org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44)
org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:158)
org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:543)
org.openqa.selenium.remote.RemoteWebDriver.executeScript(RemoteWebDriver.java:480)
org.jitsi.jibri.selenium.JibriSelenium.setLocalStorageValues(JibriSelenium.kt:170)
org.jitsi.jibri.selenium.JibriSelenium.access$setLocalStorageValues(JibriSelenium.kt:119)
org.jitsi.jibri.selenium.JibriSelenium$joinCall$1.run(JibriSelenium.kt:251)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

2020-10-06 15:47:02.765 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange() Transitioning from state Starting up to Error: FailedToJoinCall SESSION Failed to join the call
2020-10-06 15:47:02.766 INFO: [58] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Starting up to Error: FailedToJoinCall SESSI>
2020-10-06 15:47:02.767 INFO: [58] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service had an error Error: FailedToJoinCall SESSION Failed to join the call, sending error iq <iq to='jibribrewery@inte>
2020-10-06 15:47:02.767 FINE: [58] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: stop:recording
2020-10-06 15:47:02.767 INFO: [58] org.jitsi.jibri.JibriManager.stopService() Stopping the current service
2020-10-06 15:47:02.767 INFO: [58] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Stopping capturer
2020-10-06 15:47:02.768 INFO: [58] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() Stopping ffmpeg process
2020-10-06 15:47:02.768 INFO: [58] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() ffmpeg exited with value null
2020-10-06 15:47:02.769 INFO: [58] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Quitting selenium
2020-10-06 15:47:02.792 INFO: [58] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Participants in this recording: []
2020-10-06 15:47:02.866 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving call and quitting browser
2020-10-06 15:47:02.867 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Recurring call status checks cancelled
2020-10-06 15:47:02.877 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 0 log entries for type browser
2020-10-06 15:47:02.889 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 116 log entries for type driver
2020-10-06 15:47:02.913 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 0 log entries for type client
2020-10-06 15:47:02.913 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving web call
2020-10-06 15:47:02.928 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Quitting chrome driver
2020-10-06 15:47:02.995 INFO: [58] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Chrome driver quit
2020-10-06 15:47:02.995 INFO: [58] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Finalizing the recording
2020-10-06 15:47:02.996 SEVERE: [58] org.jitsi.jibri.service.impl.FileRecordingJibriService.finalize() Failed to run finalize script: java.io.IOException: Cannot run program "/path/to/finalize_recording.sh>
java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
org.jitsi.jibri.util.ProcessWrapper.start(ProcessWrapper.kt:87)
org.jitsi.jibri.service.impl.FileRecordingJibriService.finalize(FileRecordingJibriService.kt:212)
org.jitsi.jibri.service.impl.FileRecordingJibriService.stop(FileRecordingJibriService.kt:197)
org.jitsi.jibri.JibriManager.stopService(JibriManager.kt:262)
org.jitsi.jibri.JibriManager$startService$1.invoke(JibriManager.kt:210)
org.jitsi.jibri.JibriManager$startService$1.invoke(JibriManager.kt:86)
org.jitsi.jibri.util.StatusPublisher$addStatusHandler$1.invoke(StatusPublisher.kt:37)
org.jitsi.jibri.util.StatusPublisher$addStatusHandler$1.invoke(StatusPublisher.kt:29)
org.jitsi.jibri.util.StatusPublisher$publishStatus$1.invoke(StatusPublisher.kt:53)
org.jitsi.jibri.util.StatusPublisher$publishStatus$1.invoke(StatusPublisher.kt:29)
kotlin.collections.CollectionsKt__MutableCollectionsKt.filterInPlace$CollectionsKt__MutableCollectionsKt(MutableCollections.kt:293)
kotlin.collections.CollectionsKt__MutableCollectionsKt.retainAll(MutableCollections.kt:284)
org.jitsi.jibri.util.StatusPublisher.publishStatus(StatusPublisher.kt:53)
org.jitsi.jibri.service.impl.StatefulJibriService.onServiceStateChange(StatefulJibriService.kt:40)
org.jitsi.jibri.service.impl.StatefulJibriService.access$onServiceStateChange(StatefulJibriService.kt:26)
org.jitsi.jibri.service.impl.StatefulJibriService$1.invoke(StatefulJibriService.kt:35)
org.jitsi.jibri.service.impl.StatefulJibriService$1.invoke(StatefulJibriService.kt:26)
org.jitsi.jibri.util.NotifyingStateMachine.notify(NotifyingStateMachine.kt:26)
org.jitsi.jibri.service.JibriServiceStateMachine.access$notify(JibriServiceStateMachine.kt:46)
org.jitsi.jibri.service.JibriServiceStateMachine$stateMachine$1$5.invoke(JibriServiceStateMachine.kt:100)
org.jitsi.jibri.service.JibriServiceStateMachine$stateMachine$1$5.invoke(JibriServiceStateMachine.kt:46)
com.tinder.StateMachine.notifyOnTransition(StateMachine.kt:65)
com.tinder.StateMachine.transition(StateMachine.kt:23)
org.jitsi.jibri.service.JibriServiceStateMachine.transition(JibriServiceStateMachine.kt:112)
org.jitsi.jibri.service.impl.StatefulJibriService$registerSubComponent$1.invoke(StatefulJibriService.kt:46)
org.jitsi.jibri.service.impl.StatefulJibriService$registerSubComponent$1.invoke(StatefulJibriService.kt:26)
org.jitsi.jibri.util.StatusPublisher$addStatusHandler$1.invoke(StatusPublisher.kt:37)
org.jitsi.jibri.util.StatusPublisher$addStatusHandler$1.invoke(StatusPublisher.kt:29)
org.jitsi.jibri.util.StatusPublisher$publishStatus$1.invoke(StatusPublisher.kt:53)
org.jitsi.jibri.util.StatusPublisher$publishStatus$1.invoke(StatusPublisher.kt:29)
kotlin.collections.CollectionsKt__MutableCollectionsKt.filterInPlace$CollectionsKt__MutableCollectionsKt(MutableCollections.kt:293)
kotlin.collections.CollectionsKt__MutableCollectionsKt.retainAll(MutableCollections.kt:284)
org.jitsi.jibri.util.StatusPublisher.publishStatus(StatusPublisher.kt:53)
org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange(JibriSelenium.kt:176)
org.jitsi.jibri.selenium.JibriSelenium.access$onSeleniumStateChange(JibriSelenium.kt:119)
org.jitsi.jibri.selenium.JibriSelenium$1.invoke(JibriSelenium.kt:161)
org.jitsi.jibri.selenium.JibriSelenium$1.invoke(JibriSelenium.kt:119)
org.jitsi.jibri.util.NotifyingStateMachine.notify(NotifyingStateMachine.kt:26)
org.jitsi.jibri.selenium.SeleniumStateMachine.access$notify(SeleniumStateMachine.kt:33)
org.jitsi.jibri.selenium.SeleniumStateMachine$stateMachine$1$5.invoke(SeleniumStateMachine.kt:78)
org.jitsi.jibri.selenium.SeleniumStateMachine$stateMachine$1$5.invoke(SeleniumStateMachine.kt:33)
com.tinder.StateMachine.notifyOnTransition(StateMachine.kt:65)
com.tinder.StateMachine.transition(StateMachine.kt:23)
org.jitsi.jibri.selenium.SeleniumStateMachine.transition(SeleniumStateMachine.kt:83)
org.jitsi.jibri.selenium.JibriSelenium$joinCall$1.run(JibriSelenium.kt:262)
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

2020-10-06 15:47:02.997 FINE: [58] org.jitsi.jibri.config.debug() FallbackSupplier: checking for value via suppliers:
  LambdaSupplier: 'JibriConfig::singleUseMode'
  ConfigSourceSupplier: key: 'jibri.single-use-mode', type: 'kotlin.Boolean', source: 'config'
2020-10-06 15:47:02.997 FINE: [58] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::singleUseMode
2020-10-06 15:47:02.997 FINE: [58] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::singleUseMode': org.jitsi.metaconfig.ConfigException$UnableToRetri>
2020-10-06 15:47:02.998 FINE: [58] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.single-use-mode' from source 'config' as type kotlin.Boolean
2020-10-06 15:47:02.998 FINE: [58] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.single-use-mode' from source 'config' as type kotlin.Boolean
2020-10-06 15:47:02.998 FINE: [58] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.single-use-mode', type: 'kotlin.Boolean', source: 'config'
2020-10-06 15:47:02.999 INFO: [58] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: BUSY -> IDLE
2020-10-06 15:47:02.999 FINE: [58] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-10-06 15:47:02.999 INFO: [58] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=IDLE, health=OverallHealth(healthStatus=HEALTHY, details={})), pu>
2020-10-06 15:47:19.850 FINE: [17] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status

WebDriverException: : Failed to read the 'localStora

Pretty sure there are lots of reports of this on the community. I think it’s an issue with the Jibri credentials?

Could that be an issue in my newly-added /etc/jitsi/jibri/jibri.conf? The username/password combos are valid for what I setup earlier in the Jibri setup process:

api {
        http {
            internal-api-port = 8001
            external-api-port = 8002
        }

        xmpp {
            environments = [{
                name = "Community Webinar"
                xmpp-server-hosts = ["MyDomain"]
                xmpp-domain = "MyDomain"

                control-muc {
                    domain = "internal.auth.MyDomain"
                    room-name = "JibriBrewery"
                    nickname = "JibriUser"
                }

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

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

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

It’s very easy to make a mistake in the credentials set up. Make sure all the domains, usernames and passwords match between jibri’s config and what you have set.

Could it also be due to the fact that the domain has no SSL Cert, so Chromedriver can’t get to Jitsi Meet session to create recording?

Yes I think that could cause it.

1 Like

Thanks again for your help - I’m waiting on getting the SSL Cert and will go from there.

Just got the cert installed and recording is working properly. That must’ve been the issue. Thanks again for your help!

1 Like