Jibri recording empty Conference

Hello everyone,

I have a jitsi Setup, where i want to hold a few conversations on a regular basis all at the same time.
I’d like to have those sessions recorded but more or less automatically.
Since there is no functionality like this the way i’d like to go is by starting the recording in advance all on my own.
Since I can’t join every meeting once the users are in it, i need this to be done in advvance.
I read, that the timeout for noMediaReceived, emptCall, etc. have made it in the config.

However if i install the newest version of jibri and set thos option properly (at least i think so), it doesn’t seem to work and the recording stops around 60s after i leave the conference (which is then empty). Since 60s is the default timeout, I am wondering if i am editing the right file.

The file I edited was located at /etc/jitsi/jibri/jibri.conf

Originally it looked like this

jibri{}

After my edit this is the file

    jibri {
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 = 60 minutes
  // 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 = 60 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 recor$
  default-call-empty-timeout = 60 minutes
 }
}

Is there anything i am doing wrong or is this functionality just not completely implemented yet?

Best regard,
Jan

@Freddie

So correct me if I’m wrong: you want to create a meeting room ahead of time, start recording, then leave the room and other participants can join at the scheduled time?

If that’s what you’re looking to do, the short answer is no - at least not out of the box. Meeting rooms are transient in Jitsi - once the last person leaves the meeting (regardless of who it is), the room auto-destructs. So if you create a room, start recording, then leave the room when no one else is there, the room self-destructs.

anyways No teleconfrencing platfomr would do that it would waste storage and also waste CPU usage and probably overload the system. you can edit it so that x meeting stays open 24.7 but other than that this isn’t advisable

Yes thats exactly what i am trying to do. Overload is not a problem at all for this, since it’s an internal thing and a rather small project. I already compiled a previous jibri version myself (with adjustments in the timeout setting) and it used to work fine. Now i read that these settings made it to the config and i though i’d try to update to the newer jibri version.

About the meeting destroys itself, i am not too sure about it, since it seems to work with my old Jibri (at least >75% of the times).

Anyways, could you help me with the point on how the meeting stays open 24/7, since we only get the system up for the events this would be a prosibillity too.

Thanks a lot in advance,
Jan :slight_smile:

If you’re running your own, then overriding these should be enough. Can you show me what you have there and what your jibri logs show?

@Ruunic90 The room does destroy itself - this is the way Jitsi is built. You were able to get your scenario to work on occasions because you set Jibri timeout to last longer than the default, which means that Jibri was still in the meeting. Jibri is technically a user (meeting participant) - albeit a hidden one. So, if you’re able to keep Jibri active for a while, then the room stays active.

You can look for inspiration on how to keep the room open for a lengthy period of time by going through this thread - Persistent Passwords on Self Hosted Rooms.

Thanks, thats what i thought, that jibri is a user aswell

Can you repost the link? Doesn’t seem to work for me

Oops, fixed.

Thanks, but that’s what i’ve done. Look at my file above. is there anything wrong with it?
Also this is the config at /etc/jitsi/jibri/jibri.conf

Can you include your jibri logs then? You may also want to set org.jitsi.config.level=FINE in logging.properties

log.0.txt (27.7 KB)

2020-11-07 18:51:00.041 INFO: [1] org.jitsi.jibri.Main.handleCommandLineArgs() Jibri run with args [--config, /etc/jitsi/jibri/config.json]
2020-11-07 18:51:00.394 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Checking legacy config file /etc/jitsi/jibri/config.json
2020-11-07 18:51:03.101 INFO: [1] org.jitsi.jibri.Main.loadConfigFromFile() Parsed legacy config:
JibriConfig(jibriId=null, recordingDirectory=/srv/recordings, singleUseMode=null, enabledStatsD=null, finalizeRecordingScriptPath=/path/to/finalize_recording.sh, xmppEnvironments=[XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[jitsi-2.onlinetasks.net], xmppDomain=jitsi.onlinetasks.net, controlLogin=XmppCredentials(domain=auth.jitsi.onlinetasks.net, username=jibri, password=jibriauthpass), controlMuc=XmppMuc(domain=internal.auth.jitsi.onlinetasks.net, roomName=JibriBrewery, nickname=jibridiedritteweilidiot), sipControlMuc=null, callLogin=XmppCredentials(domain=recorder.jitsi.onlinetasks.net, username=recorder, password=jibrirecorderpass), stripFromRoomDomain=conference., usageTimeoutMins=0, trustAllXmppCerts=true)])
2020-11-07 18:51:03.218 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-11-07 18:51:03.219 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::enableStatsD
2020-11-07 18:51:03.222 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::enableStatsD': org.jitsi.metaconfig.ConfigException$UnableToRetrieve$Error: class kotlin.KotlinNullPointerException
2020-11-07 18:51:03.223 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-11-07 18:51:03.264 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.stats.enable-stats-d' from source 'config' as type kotlin.Boolean
2020-11-07 18:51:03.267 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.stats.enable-stats-d', type: 'kotlin.Boolean', source: 'config'
2020-11-07 18:51:03.350 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-11-07 18:51:03.352 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::jibriId
2020-11-07 18:51:03.355 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::jibriId': org.jitsi.metaconfig.ConfigException$UnableToRetrieve$Error: class kotlin.KotlinNullPointerException
2020-11-07 18:51:03.355 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.id' from source 'config' as type kotlin.String
2020-11-07 18:51:03.396 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.id' from source 'config' as type kotlin.String
2020-11-07 18:51:03.396 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.id', type: 'kotlin.String', source: 'config'
2020-11-07 18:51:03.403 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-11-07 18:51:03.403 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-11-07 18:51:03.415 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.webhook.subscribers' from source 'config' as type kotlin.collections.List<kotlin.String>
2020-11-07 18:51:03.422 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.webhook.subscribers', type: 'kotlin.collections.List<kotlin.String>', source: 'config'
2020-11-07 18:51:04.806 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-11-07 18:51:04.851 FINE: [1] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.jwt-info' from source 'config' as type com.typesafe.config.ConfigObject
2020-11-07 18:51:04.852 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() got jwtConfig: {}

2020-11-07 18:51:04.852 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/jibri/jibri.jar!/reference.conf: 43: No configuration setting found for key 'signing-key-path'
2020-11-07 18:51:04.898 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-11-07 18:51:04.898 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-11-07 18:51:04.901 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': org.jitsi.metaconfig.ConfigException$UnableToRetrieve$NotFound: not found
2020-11-07 18:51:04.904 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-11-07 18:51:04.916 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-11-07 18:51:04.917 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-11-07 18:51:04.917 INFO: [1] org.jitsi.jibri.Main.main() Using port 3333 for internal HTTP API
2020-11-07 18:51:04.941 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:51:05.606 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-11-07 18:51:05.607 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::xmppEnvironments
2020-11-07 18:51:05.608 FINE: [1] org.jitsi.jibri.config.debug() LambdaSupplier: 'JibriConfig::xmppEnvironments': found value
2020-11-07 18:51:05.608 FINE: [1] org.jitsi.jibri.config.debug() FallbackSupplier: value found via LambdaSupplier: 'JibriConfig::xmppEnvironments'
2020-11-07 18:51:06.208 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-11-07 18:51:06.237 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to xmpp environment on jitsi-2.onlinetasks.net with config XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[jitsi-2.onlinetasks.net], xmppDomain=jitsi.onlinetasks.net, controlLogin=XmppCredentials(domain=auth.jitsi.onlinetasks.net, username=jibri, password=jibriauthpass), controlMuc=XmppMuc(domain=internal.auth.jitsi.onlinetasks.net, roomName=JibriBrewery, nickname=jibridiedritteweilidiot), sipControlMuc=null, callLogin=XmppCredentials(domain=recorder.jitsi.onlinetasks.net, username=recorder, password=jibrirecorderpass), stripFromRoomDomain=conference., usageTimeoutMins=0, trustAllXmppCerts=true)
2020-11-07 18:51:06.239 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-11-07 18:51:06.349 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-11-07 18:51:06.350 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-11-07 18:51:06.350 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.jitsi.metaconfig.ConfigException$UnableToRetrieve$NotFound: not found
2020-11-07 18:51:06.353 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-11-07 18:51:06.359 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-11-07 18:51:06.362 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-11-07 18:51:06.363 INFO: [1] org.jitsi.jibri.Main.main() Using port 2222 for HTTP API
2020-11-07 18:51:06.370 WARNING: [25] org.jitsi.xmpp.mucclient.MucClient.log() Disabling certificate verification!
2020-11-07 18:51:06.993 INFO: [25] org.jitsi.xmpp.mucclient.MucClient.log() Connected.
2020-11-07 18:51:06.993 INFO: [25] org.jitsi.xmpp.mucclient.MucClient.log() Logging in.
2020-11-07 18:51:07.200 INFO: [25] org.jitsi.xmpp.mucclient.MucClient.log() Joined MUC: jibribrewery@internal.auth.jitsi.onlinetasks.net
2020-11-07 18:52:04.892 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:53:04.892 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:53:21.871 INFO: [43] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to='jibri@auth.jitsi.onlinetasks.net/b53eddb6-809c-452f-b6ea-88290f231bbf' from='jibribrewery@internal.auth.jitsi.onlinetasks.net/focus' id='amlicmlAYXV0aC5qaXRzaS5vbmxpbmV0YXNrcy5uZXQvYjUzZWRkYjYtODA5Yy00NTJmLWI2ZWEtODgyOTBmMjMxYmJmAHE0SEFXLTIxMzAzMgBBN+Xsq13nTzhQDmvzfQBM' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' action='start' recording_mode='file' room='test123@conference.jitsi.onlinetasks.net' session_id='xifpiojcxztqbwgi' app_data='{"file_recording_metadata":{"share":true}}'/></iq> from environment [MucClient id=jitsi-2.onlinetasks.net hostname=jitsi-2.onlinetasks.net]
2020-11-07 18:53:21.873 INFO: [43] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Received start request, starting service
2020-11-07 18:53:21.956 INFO: [43] org.jitsi.jibri.api.xmpp.XmppApi.handleStartService() Parsed call url info: CallUrlInfo(baseUrl=https://jitsi.onlinetasks.net, callName=test123, urlParams=[])
2020-11-07 18:53:21.958 INFO: [43] org.jitsi.jibri.JibriManager.startFileRecording() Starting a file recording with params: FileRecordingRequestParams(callParams=CallParams(callUrlInfo=CallUrlInfo(baseUrl=https://jitsi.onlinetasks.net, callName=test123, urlParams=[])), sessionId=xifpiojcxztqbwgi, callLoginParams=XmppCredentials(domain=recorder.jitsi.onlinetasks.net, username=recorder, password=jibrirecorderpass))
2020-11-07 18:53:22.022 FINE: [43] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.chrome.flags' from source 'config' as type kotlin.collections.List<kotlin.String>
2020-11-07 18:53:22.028 FINE: [43] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.chrome.flags' from source 'config' as type kotlin.collections.List<kotlin.String>
2020-11-07 18:53:25.780 INFO: [43] org.openqa.selenium.remote.ProtocolHandshake.createSession() Detected dialect: OSS
2020-11-07 18:53:25.850 INFO: [43] org.jitsi.jibri.selenium.JibriSelenium.<init>() Starting empty call check with a timeout of PT30S
2020-11-07 18:53:25.903 FINE: [43] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.<init>() Detected os as OS: LINUX
2020-11-07 18:53:25.927 FINE: [43] 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-11-07 18:53:25.927 FINE: [43] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::recordingDirectory
2020-11-07 18:53:25.928 FINE: [43] org.jitsi.jibri.config.debug() LambdaSupplier: 'JibriConfig::recordingDirectory': found value
2020-11-07 18:53:25.928 FINE: [43] org.jitsi.jibri.config.debug() FallbackSupplier: value found via LambdaSupplier: 'JibriConfig::recordingDirectory'
2020-11-07 18:53:25.934 FINE: [43] 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-11-07 18:53:25.935 FINE: [43] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::finalizeRecordingScriptPath
2020-11-07 18:53:25.935 FINE: [43] org.jitsi.jibri.config.debug() LambdaSupplier: 'JibriConfig::finalizeRecordingScriptPath': found value
2020-11-07 18:53:25.935 FINE: [43] org.jitsi.jibri.config.debug() FallbackSupplier: value found via LambdaSupplier: 'JibriConfig::finalizeRecordingScriptPath'
2020-11-07 18:53:25.935 INFO: [43] org.jitsi.jibri.service.impl.FileRecordingJibriService.<init>() Writing recording to /srv/recordings/xifpiojcxztqbwgi, finalize script path /path/to/finalize_recording.sh
2020-11-07 18:53:25.955 FINE: [43] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: start:recording
2020-11-07 18:53:25.959 INFO: [43] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: IDLE -> BUSY
2020-11-07 18:53:25.960 FINE: [43] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:53:25.960 INFO: [43] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=BUSY, health=OverallHealth(healthStatus=HEALTHY, details={})), publishing presence to connections
2020-11-07 18:53:25.977 INFO: [43] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Sending 'pending' response to start IQ
2020-11-07 18:53:29.199 FINE: [56] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Visiting url https://jitsi.onlinetasks.net/test123#config.iAmRecorder=true&config.externalConnectUrl=null&config.startWithAudioMuted=true&config.startWithVideoMuted=true&interfaceConfig.APP_NAME="Jibri"&config.analytics.disabled=true&config.p2p.enabled=false&config.prejoinPageEnabled=false&config.requireDisplayName=false
2020-11-07 18:53:31.476 FINE: [56] org.jitsi.jibri.selenium.pageobjects.CallPage.apply() Not joined yet: Cannot read property 'isJoined' of undefined
2020-11-07 18:53:32.086 FINE: [56] org.jitsi.jibri.selenium.pageobjects.CallPage.apply() Not joined yet: Cannot read property 'isJoined' of undefined
2020-11-07 18:53:33.644 INFO: [56] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Waited 2408 milliseconds for call page to load
2020-11-07 18:53:33.687 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange() Transitioning from state Starting up to Running
2020-11-07 18:53:33.689 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.invoke() Selenium joined the call, starting the capturer
2020-11-07 18:53:34.202 INFO: [56] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.launch() Starting ffmpeg with command ffmpeg -y -v info -f x11grab -draw_mouse 0 -r 30 -s 1280x720 -thread_queue_size 4096 -i :0.0+0,0 -f alsa -thread_queue_size 4096 -i plug:bsnoop -acodec aac -strict -2 -ar 44100 -b:a 128k -af aresample=async=1 -c:v libx264 -preset veryfast -profile:v main -level 3.1 -pix_fmt yuv420p -r 30 -crf 25 -g 60 -tune zerolatency -f mp4 /srv/recordings/xifpiojcxztqbwgi/test123_2020-11-07-18-53-25.mp4 ([ffmpeg, -y, -v, info, -f, x11grab, -draw_mouse, 0, -r, 30, -s, 1280x720, -thread_queue_size, 4096, -i, :0.0+0,0, -f, alsa, -thread_queue_size, 4096, -i, plug:bsnoop, -acodec, aac, -strict, -2, -ar, 44100, -b:a, 128k, -af, aresample=async=1, -c:v, libx264, -preset, veryfast, -profile:v, main, -level, 3.1, -pix_fmt, yuv420p, -r, 30, -crf, 25, -g, 60, -tune, zerolatency, -f, mp4, /srv/recordings/xifpiojcxztqbwgi/test123_2020-11-07-18-53-25.mp4])
2020-11-07 18:53:35.774 INFO: [59] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegStateMachineStateChange() Ffmpeg capturer transitioning from state Starting up to Running
2020-11-07 18:53:35.774 INFO: [59] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Starting up to Running
2020-11-07 18:53:35.788 INFO: [59] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service started up successfully, sending on iq <iq to='jibribrewery@internal.auth.jitsi.onlinetasks.net/focus' id='1Y6Kq-29' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' status='on'/></iq>
2020-11-07 18:53:48.814 INFO: [16] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {}, all clients muted? true
2020-11-07 18:54:03.733 INFO: [16] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=0, upload=0}, download=26, upload=0, video={download=0, upload=0}}, all clients muted? true
2020-11-07 18:54:04.897 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:54:18.738 INFO: [16] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=0, upload=0}, download=0, upload=0, video={download=0, upload=0}}, all clients muted? true
2020-11-07 18:54:33.671 INFO: [16] org.jitsi.jibri.selenium.JibriSelenium.run() Call has been empty since 2020-11-07T18:53:48.734Z (PT44.911S ago). Returning CallEmpty event
2020-11-07 18:54:33.672 INFO: [16] org.jitsi.jibri.selenium.JibriSelenium.invoke() Recurring call status checks generated event org.jitsi.jibri.selenium.SeleniumEvent$CallEmpty@4652fd80
2020-11-07 18:54:33.680 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange() Transitioning from state Running to Finished
2020-11-07 18:54:33.680 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Running to Finished
2020-11-07 18:54:33.680 INFO: [56] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service finished, sending off iq <iq to='jibribrewery@internal.auth.jitsi.onlinetasks.net/focus' id='1Y6Kq-33' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' status='off'/></iq>
2020-11-07 18:54:33.688 FINE: [56] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: stop:recording
2020-11-07 18:54:33.689 INFO: [56] org.jitsi.jibri.JibriManager.stopService() Stopping the current service
2020-11-07 18:54:33.689 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Stopping capturer
2020-11-07 18:54:33.689 INFO: [56] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() Stopping ffmpeg process
2020-11-07 18:54:33.804 INFO: [59] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegStateMachineStateChange() Ffmpeg capturer transitioning from state Running to Finished
2020-11-07 18:54:33.810 INFO: [56] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() ffmpeg exited with value 255
2020-11-07 18:54:33.811 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Quitting selenium
2020-11-07 18:54:33.842 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Participants in this recording: []
2020-11-07 18:54:34.000 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving call and quitting browser
2020-11-07 18:54:34.000 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Recurring call status checks cancelled
2020-11-07 18:54:34.034 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 16 log entries for type browser
2020-11-07 18:54:34.234 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 878 log entries for type driver
2020-11-07 18:54:34.706 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 0 log entries for type client
2020-11-07 18:54:34.707 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving web call
2020-11-07 18:54:34.891 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Quitting chrome driver
2020-11-07 18:54:35.000 INFO: [56] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Chrome driver quit
2020-11-07 18:54:35.000 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Finalizing the recording
2020-11-07 18:54:35.002 SEVERE: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.finalize() Failed to run finalize script: java.io.IOException: Cannot run program "/path/to/finalize_recording.sh": error=2, No such file or directory with stack: 
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:217)
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$startRecurringCallStatusChecks$transitionState$1$1.run(JibriSelenium.kt:185)
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-11-07 18:54:35.003 FINE: [56] 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-11-07 18:54:35.003 FINE: [56] org.jitsi.jibri.config.debug() LambdaSupplier: Trying to retrieve value via JibriConfig::singleUseMode
2020-11-07 18:54:35.005 FINE: [56] org.jitsi.jibri.config.debug() FallbackSupplier: failed to find value via LambdaSupplier: 'JibriConfig::singleUseMode': org.jitsi.metaconfig.ConfigException$UnableToRetrieve$Error: class kotlin.KotlinNullPointerException
2020-11-07 18:54:35.006 FINE: [56] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Trying to retrieve key 'jibri.single-use-mode' from source 'config' as type kotlin.Boolean
2020-11-07 18:54:35.008 FINE: [56] org.jitsi.jibri.config.debug() ConfigSourceSupplier: Successfully retrieved key 'jibri.single-use-mode' from source 'config' as type kotlin.Boolean
2020-11-07 18:54:35.008 FINE: [56] org.jitsi.jibri.config.debug() FallbackSupplier: value found via ConfigSourceSupplier: key: 'jibri.single-use-mode', type: 'kotlin.Boolean', source: 'config'
2020-11-07 18:54:35.009 INFO: [56] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: BUSY -> IDLE
2020-11-07 18:54:35.009 FINE: [56] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:54:35.010 INFO: [56] 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-11-07 18:55:04.892 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2020-11-07 18:56:04.892 FINE: [16] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status

What version of Jibri are you using? I just tried to repro but it showed up ok for me. I notice in your logs, though, that there’s no reference to default-call-empty-timeout.

How i can look this up? I set this particular Jibri up on Thuesday from the official repo, so it should be pretty new version. That’s exactly the thing i see happening too. I think it might not realize the config

I believe apt-cache policy jibri should give it

jibri:
Installed: 8.0-53-ga574be9-1
Candidate: 8.0-61-g99288dc-1
Version table:
8.0-61-g99288dc-1 500
500 https://download.jitsi.org stable/ Packages
*** 8.0-53-ga574be9-1 500
500 https://download.jitsi.org stable/ Packages
100 /var/lib/dpkg/status
8.0-34-gd133175-1 500
500 https://download.jitsi.org stable/ Packages
8.0-14-g0ccc3f6-1 500
500 https://download.jitsi.org stable/ Packages
8.0-0-ge9fa56a-1 500
500 https://download.jitsi.org stable/ Packages

I don’t think 53 has support for those config settings. You’ll want to upgrade to 61.

Any idea why it installed the old version? I installed via

sudo apt-get install jibri

Also is there any particular command to update jibri or do I just update via apt?

Thanks for the quick answers by the way :slight_smile: