TUTORIAL - How to Install the NEW JIBRI

If you’re here, you likely already know what Jibri is and you are looking to deploy it in your own environment (or upgrade your already installed instance to the latest version). You WILL need to install this latest version of Jibri or upgrade to this latest version (if you already deployed Jibri) as there will no longer be support for the previous version soon.

To make this as concise as possible, I won’t go into the architecture and all the features of Jibri. You can check out my other Tutorial for that. However, as a quick reminder, here’s a diagramatic representation of how Jibri integrates with Jitsi Meet to provide recording and livestreaming capabilities.

WHAT’S NEW?
There are a few excellent tutorials out there on how to install the previous version of Jibri. However, with the latest upgrade, changes have been made that impact how Jibri is now installed and configured.

The baseline architecture is still the same, but there are significant improvements to how Jibri is configured. The new configuration in the latest version of Jibri opens the door to a wealth of possibilities for future extensions to Jibri’s capabilities. Of particular note is the deprecation of config.json and the adoption of Jibri.conf. This point has become especially important as plans are now underway to retire config.json completely (likely in a matter of weeks).

STEPS TO INSTALL THE LATEST VERSION OF JIBRI

Most of these commands require root level access, so start out by setting up as root user:

sudo su -i

INSTALL AND CONFIGURE PRE-REQUISITES

  1. ALSA Loopback Module - Configure to load on boot, load into running kernel and confirm

     echo "snd-aloop" >> /etc/modules
     modprobe snd-aloop
     lsmod | grep snd_aloop
    
  2. Google Chrome Stable

     curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
     echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
     apt-get -y update
     apt-get -y install google-chrome-stable
    
  3. Chrome managed policies

    mkdir -p /etc/opt/chrome/policies/managed
    echo ‘{ “CommandLineFlagSecurityWarningsEnabled”: false }’ >>/etc/opt/chrome/policies/managed/managed_policies.json

  4. Google Chromedriver

     CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
     wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
     unzip ~/chromedriver_linux64.zip -d ~/
     rm ~/chromedriver_linux64.zip
     sudo mv -f ~/chromedriver /usr/local/bin/chromedriver
     sudo chown root:root /usr/local/bin/chromedriver
     sudo chmod 0755 /usr/local/bin/chromedriver
    
  5. Miscellaneous Packages

    apt-get install ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy

INSTALL LATEST JIBRI

  1. Install Jibri

    If installing on the same server as Jitsi:

    apt-get install jibri

    If installing on a different server:

    wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
    sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"
    apt update && apt install jibri -y
    
  2. Add Jibri to the necessary user groups

    usermod -aG adm,audio,video,plugdev jibri

Java 8 - Install and configure as default for Jibri

  1. Install Java 8

    wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
    add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
    apt-get -y update
    apt-get install adoptopenjdk-8-hotspot
    
  2. Open “launch.sh”
    nano /opt/jitsi/jibri/launch.sh

  3. Set Java 8 as default for Jibri - replace the word “java” with the full path to Java 8

    /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java

CONFIGURATION

Configure Prosody

  1. Open your prosody cfg.lua

    nano /etc/prosody/conf.avail/your.domain.com.cfg.lua

  2. Add the following at the end of the file

    -- internal muc component, meant to enable pools of jibri and jigasi clients
    Component "internal.auth.your.domain.com" "muc"
        modules_enabled = {
            "ping";
        }
        storage = "memory"
        muc_room_cache_size = 1000
        
    VirtualHost "recorder.your.domain.com"
        modules_enabled = {
            "ping";
        }
        authentication = "internal_plain"
    
  3. Create Accounts - ‘jibri’ and ‘recorder’ (choose your own passwords, but note them for later)

    prosodyctl register jibri auth.your.domain.com JPwd
    prosodyctl register recorder recorder.your.domain.com RPwd
    

Configure Jicofo

  1. Open jicofo/sim-communicator-properties

    nano /etc/jitsi/jicofo/sip-communicator.properties

  2. Add the following lines

    org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.your.domain.com
    org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90
    

Configure Jitsi Meet

  1. Open config.js

    nano /etc/jitsi/meet/your.domain.com-config.js

  2. Set the following properties:

    fileRecordingsEnabled: true, 
    liveStreamingEnabled: true, 
    hiddenDomain: 'recorder.your.domain.com',
    

Additional System Configuration

  1. Open port 5222 if Jibri is installed on a separate server from Jitsi

    ufw allow 5222/tcp

  2. Create directory to store recordings and assign jibri ownership of the directory

    mkdir /srv/recordings
    chown jibri:jibri /srv/recordings
    

CONFIGURE JIBRI.CONF
This is the most significant change in the new Jibri. Pay careful attention to this configuration because it is responsible for about 90% of the problems reported about running Jibri.

  1. Open the jibri.conf file

    nano /etc/jitsi/jibri/jibri.conf

  2. Copy and paste the following configuration details into your jibri.conf file (click arrow below to reveal configuration details), making sure to edit to reflect your domain name and the passwords you registered earlier in Prosody for users “jibri” and “recorder”

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 = ["your.domain.com"]
                xmpp-domain = "your.domain.com"

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

                control-login {
                    domain = "auth.your.domain.com"
                    username = "jibri"
                    password = "JPwd"
                }

                call-login {
                    domain = "recorder.your.domain.com"
                    username = "recorder"
                    password = "RPwd"
                }

                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_recording.sh"
  }
  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",
      "--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
  }
}
  1. Finally, restart all services and set Jibri to start on boot

    systemctl restart jitsi-videobridge2 prosody jicofo
    systemctl enable --now jibri

You are now all set! You have installed the latest version of Jibri and have future-proofed your Jibri deployment. Congrats! :smiley:

UPGRADING TO LATEST JIBRI

If you already have Jibri deployed, you can upgrade to the latest version by simply purging your Jibri and then running apt-get install jibri. Most configurations previously set survive a purge, but you will need to populate the newly-created “jibri.conf” file and delete the previously-existing “config.json” file.

You may have problems with Jibri not starting after re-installing. The usual culprits are:

  • Mistakes in jibri.conf
  • Jibri user accounts got deleted (most often the “jibri” user)
  • Jibri log directory is missing (/var/log/jitsi/jibri/)
  • User “jibri” does not have ownership of Jibri log folder
  • User “jibri” does not have access to the recordings directory

For these errors and others, check out the comprehensive Troubleshooting Guide -TUTORIAL: Jibri Overview, Troubleshooting Tips & Tricks - Solve your Jibri Problems, Quickly!

13 Likes
Jibri setup and configuration - here’s how! FULL GUIDE
Jibri docker - Error : recording has failed
Jitsi livestream sdk
Jibri Service Active failed
Jibri: cannot read property isJoined of undefined, Error: FailedToJoinCall SESSION Failed
Jibri Problem Recording Failed Start
Jibri start recording error
Jitsi with Jamulus audio
Jibri: cannot read property isJoined of undefined, Error: FailedToJoinCall SESSION Failed
Not working recorder
Recording unavailable
How to add to "Jitsi Meet" system functions : "Start recording" and "Start live stream"
Unable to start the systemctl status jitsi-videobridge2.service
How to install and configure jibri in Self hosted Jitsimeet Server
Can't recording(jitsi, jibri)
Localhost graceful_shutdown.sh[119286]: curl: (7) Failed to connect to 127.0.0.1 port 3333: Connection refused
Improving Video Quality
No sound on one side of Meet Conference with Jigasi
Failing to Get Jibri to Work on Debian 10
Jibri Setup in JWT secured Jitsi Meet
Problem in jibri recording
Install jitsi-meet for a local network
Config.json are not available after installing the jibri,only jibri.conf is available
Can I record the audio and video from participants in Jitsi from the server?
Jibri records Audio but fails to records meet screen
jibri.conf
How to install jibri(Recording and live streaming) and etherpad in Jitsi Meet
Setting up jibri recording on another server
Jibri doesn not record after upgrade
How to edit the /etc/jitsi/jibri/jibri.conf for jitsi recording on jibri since /etc/jitsi/jibri/config.json doesn't exist anymore
[SOLVED] Capture area 1920x1080 at position 0.0 outside the screen size 1280x720
[TUTORIAL] Configuration of the New Jibri (1080p Livestreaming and Recording)
Jibri unavailable after few days
Recording Unavailable
Recording and streaming no working in jitsi server ubuntu 18.04
Can I record the audio and video from participants in Jitsi from the server?
Custom layout for recording
[SOLVED] Interesting Bug with Jibri
Jibri server not starting (jitsi and jibri running on the same server)
Jibri start recording error
Not joined yet: Cannot read property 'isJoined' of undefined
Failed to read the 'localstorage' property from 'window': access is denied for this document
Failure to record meeting
No way to record?
How to add to "Jitsi Meet" system functions : "Start recording" and "Start live stream"
How to add to "Jitsi Meet" system functions : "Start recording" and "Start live stream"
How to add to "Jitsi Meet" system functions : "Start recording" and "Start live stream"
Installation instructions "Video recording w/ jitsi & jibri on same server"
Jibri is not starting
Jibri problems with JWT tokens
Jibri not found but connection looks good
Proper Setup for Jibri "jibri/stable,now 8.0-61-g99288dc-1"

@Freddie :+1:

Some notes:

  • path
chown jibri:jibri /srv/recordings
  • Some commands have sudo but some not… This may be confusing for some people.
    sudo su -l as a first command?

  • apt vs apt-get

  • Adding jitsi/jibri repo is missing (I think you assumed that Jitsi is already installed)

  • The customization line (step 7) before the jibri installation (step 9)

  • Step 18: Open port 5222
    It may be better to specify this step is only needed if jibri is on a seperate server

  • It may be better to use the same passwords in step 13 and step 21. Some new users copy-paste the commands without thinking

1 Like

Or use

:wink:

Thanks @emrah! Great spots! Most of these were the result of me pasting commands over while trying to correct the formatting of the post… smh. I’d actually set them correctly.

Not all commands in this installation require root access though, so as a rule, I generally tend not to work as root unless specifically required. However, I don’t believe root access hurts any line in this installation, so for the benefit of those new to linux, perhaps it’s not a bad idea.

1 Like

@bbaldino Thanks fo the new update.

I just want to confirm http://127.0.0.1:3333/jibri/api/internal/v1.0/gracefulShutdown is still working?
by doing this jibri will shut down after it completes the recording or streaming work and the notify to jicofo this jibri is no longer available for recording or streaming. Am I correct?

@Freddie thank you for the tutorial

As far as I know, yes…there’s no plans to change that

1 Like

Hey. I did everything as written in this manual. He substituted his values ​​where necessary. Jibri is installed on the same debian server as jitsi. However, I am unable to enable recording. I have a graphical shell on the server, but I disabled it. Jitsi works fine. The server has two CPUs with 4 cores each and 24 GB of RAM. What could be the problem?

root@matrix:~# systemctl restart jibri
root@matrix:~# journalctl -xe

– Unit jibri.service has begun shutting down.
Jan 22 13:29:34 matrix graceful_shutdown.sh[4258]: % Total % Received % Xf
Jan 22 13:29:34 matrix graceful_shutdown.sh[4258]:
Jan 22 13:29:34 matrix graceful_shutdown.sh[4258]: [149B blob data]
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Control process exited, code=
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Main process exited, code=exi
Jan 22 13:29:34 matrix systemd[1]: Stopped Jibri Process.
– Subject: Unit jibri.service has finished shutting down
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri.service has finished shutting down.
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Unit entered failed state.
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Failed with result 'exit-code
Jan 22 13:29:34 matrix systemd[1]: Started Jibri Process.
– Subject: Unit jibri.service has finished start-up
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri.service has finished starting up.

– The start-up result is done.
root@matrix:~# journalctl -xe
– Support: Debian -- Support

– Unit jibri.service has finished starting up.

– The start-up result is done.
Jan 22 13:29:34 matrix systemd[1]: jibri-xorg.service: Service hold-off time over, scheduling restart.
Jan 22 13:29:34 matrix systemd[1]: Stopped Jibri Xorg Process.
– Subject: Unit jibri-xorg.service has finished shutting down
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri-xorg.service has finished shutting down.
Jan 22 13:29:34 matrix systemd[1]: jibri-xorg.service: Start request repeated too quickly.
Jan 22 13:29:34 matrix systemd[1]: Failed to start Jibri Xorg Process.
– Subject: Unit jibri-xorg.service has failed
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri-xorg.service has failed.

– The result is failed.
Jan 22 13:29:34 matrix systemd[1]: Dependency failed for Jibri Window Manager.
– Subject: Unit jibri-icewm.service has failed
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri-icewm.service has failed.

– The result is dependency.
Jan 22 13:29:34 matrix systemd[1]: jibri-icewm.service: Job jibri-icewm.service/start failed with result ‘dependency’.
Jan 22 13:29:34 matrix systemd[1]: jibri-xorg.service: Unit entered failed state.
Jan 22 13:29:34 matrix systemd[1]: jibri-xorg.service: Failed with result ‘exit-code’.
Jan 22 13:29:34 matrix systemd[1]: Stopping Jibri Process…
– Subject: Unit jibri.service has begun shutting down
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri.service has begun shutting down.
Jan 22 13:29:34 matrix graceful_shutdown.sh[4258]: % Total % Received % Xferd Average Speed Time Time Time Current
Jan 22 13:29:34 matrix graceful_shutdown.sh[4258]: Dload Upload Total Spent Left Speed
Jan 22 13:29:34 matrix graceful_shutdown.sh[4258]: [149B blob data]
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Control process exited, code=exited status=7
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Main process exited, code=exited, status=143/n/a
Jan 22 13:29:34 matrix systemd[1]: Stopped Jibri Process.
– Subject: Unit jibri.service has finished shutting down
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri.service has finished shutting down.
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Unit entered failed state.
Jan 22 13:29:34 matrix systemd[1]: jibri.service: Failed with result ‘exit-code’.
Jan 22 13:29:34 matrix systemd[1]: Started Jibri Process.
– Subject: Unit jibri.service has finished start-up
– Defined-By: systemd
– Support: Debian -- Support

– Unit jibri.service has finished starting up.

– The start-up result is done.
Jan 22 13:29:36 matrix launch.sh[4265]: SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”.
Jan 22 13:29:36 matrix launch.sh[4265]: SLF4J: Defaulting to no-operation (NOP) logger implementation
Jan 22 13:29:36 matrix launch.sh[4265]: SLF4J: See SLF4J Error Codes for further details.

You can’t run Jibri on a server that already has its own xorg components. I mean, it’s technically possible but the work that’d go into making it work is just not justifiable.

You are right. I created new separate server special for Jibri without GUI. Everything is working. Thank you for help.

I think I broke something during the process because when I open the main url
https://jitsi.mydomain.com/ I just get a grey screen now. (jitsi meet used to work fine before)
What section do you guys think I stuffed up?

Edit: I did add:
ufw allow out 5222/tcp

Oftentimes, this is due to some error (missing or extra character) in config.js

Thx Freddie
I got it. It was indeed a missing comma after the line:
hiddenDomain: ‘recorder.your.domain.com’,

Hey @Freddie I just followed your new JIbri Tutorial, Thanks very much It’s better now but now when I press “Start Recording” it’ takes a long while then I hear “Recording has Stopped”

here is the log

2021-01-25 17:53:49.937 INFO: [1] org.jitsi.jibri.Main.handleCommandLineArgs() Jibri run with args [--config, /etc/jitsi/jibri/config.json]
2021-01-25 17:53:49.985 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Checking legacy config file /etc/jitsi/jibri/config.json
2021-01-25 17:53:49.985 INFO: [1] org.jitsi.jibri.Main.setupLegacyConfig() Legacy config file /etc/jitsi/jibri/config.json doesn't exist
2021-01-25 17:53:50.340 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() got jwtConfig: {}

2021-01-25 17:53:50.340 INFO: [1] org.jitsi.jibri.webhooks.v1.JwtInfo.Companion.fromConfig() Unable to create JwtInfo: com.typesafe.config.ConfigException$Missing: /etc/jitsi/jibri/jibri.conf: 79: No configuration setting found for key 'signing-key-path'
2021-01-25 17:53:50.405 INFO: [1] org.jitsi.jibri.Main.main() Using port 3333 for internal HTTP API
2021-01-25 17:53:50.411 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:53:50.573 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
2021-01-25 17:53:50.577 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to xmpp environment on my.domain.com with config XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[my.domain.com], xmppDomain=my.domain.com, controlLogin=XmppCredentials(domain=auth.my.domain.com, username=jibri, password=JPwd), controlMuc=XmppMuc(domain=internal.auth.my.domain.com, roomName=JibriBrewery, nickname=jibri-nickname), sipControlMuc=null, callLogin=XmppCredentials(domain=recorder.my.domain.com, username=recorder, password=RPwd), stripFromRoomDomain=conference., usageTimeoutMins=0, trustAllXmppCerts=true)
2021-01-25 17:53:50.578 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
2021-01-25 17:53:50.588 INFO: [1] org.jitsi.jibri.Main.main() Using port 2222 for HTTP API
2021-01-25 17:53:50.588 WARNING: [27] org.jitsi.xmpp.mucclient.MucClient.log() Disabling certificate verification!
2021-01-25 17:53:50.674 INFO: [27] org.jitsi.xmpp.mucclient.MucClient.log() Connected.
2021-01-25 17:53:50.675 INFO: [27] org.jitsi.xmpp.mucclient.MucClient.log() Logging in.
2021-01-25 17:53:50.712 INFO: [27] org.jitsi.xmpp.mucclient.MucClient.log() Joined MUC: jibribrewery@internal.auth.my.domain.com
2021-01-25 17:54:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:54:53.741 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to='jibri@auth.my.domain.com/fkGH5Luj' from='jibribrewery@internal.auth.my.domain.com/focus' id='amlicmlAYXV0aC5jb25uZWN0LnZ2di5jYXNoL2ZrR0g1THVqAHdJNGwwLTEzMjQAwaKC6H2Hz7sPGaZpYw3zbQ==' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' action='start' recording_mode='file' room='schoolwork@conference.my.domain.com' session_id='nzrwfbiozzsxlzfo' app_data='{"file_recording_metadata":{"share":true}}'/></iq> from environment [MucClient id=my.domain.com hostname=my.domain.com]
2021-01-25 17:54:53.741 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Received start request, starting service
2021-01-25 17:54:53.811 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleStartService() Parsed call url info: CallUrlInfo(baseUrl=https://my.domain.com, callName=schoolwork, urlParams=[])
2021-01-25 17:54:53.811 INFO: [45] org.jitsi.jibri.JibriManager.startFileRecording() Starting a file recording with params: FileRecordingRequestParams(callParams=CallParams(callUrlInfo=CallUrlInfo(baseUrl=https://my.domain.com, callName=schoolwork, urlParams=[])), sessionId=nzrwfbiozzsxlzfo, callLoginParams=XmppCredentials(domain=recorder.my.domain.com, username=recorder, password=RPwd))
2021-01-25 17:54:54.288 INFO: [45] org.openqa.selenium.remote.ProtocolHandshake.createSession() Detected dialect: OSS
2021-01-25 17:54:54.306 FINE: [45] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.<init>() Detected os as OS: LINUX
2021-01-25 17:54:54.310 INFO: [45] org.jitsi.jibri.service.impl.FileRecordingJibriService.<init>() Writing recording to /srv/recordings/nzrwfbiozzsxlzfo, finalize script path /path/to/finalize_recording.sh
2021-01-25 17:54:54.313 FINE: [45] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: start:recording
2021-01-25 17:54:54.314 INFO: [45] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: IDLE -> BUSY
2021-01-25 17:54:54.314 FINE: [45] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:54:54.314 INFO: [45] 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
2021-01-25 17:54:54.315 INFO: [45] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Sending 'pending' response to start IQ
2021-01-25 17:54:54.897 FINE: [57] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Visiting url https://my.domain.com/schoolwork#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
2021-01-25 17:54:55.262 FINE: [57] org.jitsi.jibri.selenium.pageobjects.CallPage.apply() Not joined yet: Cannot read property 'isJoined' of undefined
2021-01-25 17:54:55.769 FINE: [57] org.jitsi.jibri.selenium.pageobjects.CallPage.apply() Not joined yet: Cannot read property 'isJoined' of undefined
2021-01-25 17:54:56.284 INFO: [57] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Waited 1039 milliseconds for call page to load
2021-01-25 17:54:56.285 INFO: [57] org.jitsi.jibri.selenium.JibriSelenium.<init>() Starting empty call check with a timeout of PT30S
2021-01-25 17:54:56.298 INFO: [57] org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange() Transitioning from state Starting up to Running
2021-01-25 17:54:56.299 INFO: [57] org.jitsi.jibri.service.impl.FileRecordingJibriService.invoke() Selenium joined the call, starting the capturer
2021-01-25 17:54:56.319 INFO: [57] 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/nzrwfbiozzsxlzfo/schoolwork_2021-01-25-17-54-54.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/nzrwfbiozzsxlzfo/schoolwork_2021-01-25-17-54-54.mp4])
2021-01-25 17:54:57.505 INFO: [60] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegStateMachineStateChange() Ffmpeg capturer transitioning from state Starting up to Running
2021-01-25 17:54:57.506 INFO: [60] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Starting up to Running
2021-01-25 17:54:57.507 INFO: [60] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service started up successfully, sending on iq <iq to='jibribrewery@internal.auth.my.domain.com/focus' id='PUZDk-28' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' status='on'/></iq>
2021-01-25 17:55:11.346 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {}, num participants: 1, numMutedParticipants: 0, numJigasis: 0, all clients muted? false
2021-01-25 17:55:26.313 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=41, upload=0}, download=2482, upload=0, video={download=2441, upload=0}}, num participants: 1, numMutedParticipants: 0, numJigasis: 0, all clients muted? false
2021-01-25 17:55:41.312 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=37, upload=0}, download=2588, upload=0, video={download=2551, upload=0}}, num participants: 1, numMutedParticipants: 0, numJigasis: 0, all clients muted? false
2021-01-25 17:55:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:55:56.316 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=34, upload=0}, download=1175, upload=0, video={download=1141, upload=0}}, num participants: 1, numMutedParticipants: 0, numJigasis: 0, all clients muted? false
2021-01-25 17:56:11.313 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=41, upload=0}, download=408, upload=0, video={download=367, upload=0}}, num participants: 1, numMutedParticipants: 0, numJigasis: 0, all clients muted? false
2021-01-25 17:56:23.740 INFO: [64] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to='jibri@auth.my.domain.com/fkGH5Luj' from='jibribrewery@internal.auth.my.domain.com/focus' id='amlicmlAYXV0aC5jb25uZWN0LnZ2di5jYXNoL2ZrR0g1THVqAHdJNGwwLTE0MjAAwaKC6H2Hz7sPGaZpYw3zbQ==' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' action='stop' session_id='nzrwfbiozzsxlzfo'/></iq> from environment [MucClient id=my.domain.com hostname=my.domain.com]
2021-01-25 17:56:23.741 FINE: [64] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: stop:recording
2021-01-25 17:56:23.741 INFO: [64] org.jitsi.jibri.JibriManager.stopService() Stopping the current service
2021-01-25 17:56:23.741 INFO: [64] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Stopping capturer
2021-01-25 17:56:23.741 INFO: [64] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() Stopping ffmpeg process
2021-01-25 17:56:24.135 INFO: [64] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() ffmpeg exited with value 255
2021-01-25 17:56:24.136 INFO: [60] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegStateMachineStateChange() Ffmpeg capturer transitioning from state Running to Finished
2021-01-25 17:56:24.136 INFO: [64] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Quitting selenium
2021-01-25 17:56:24.136 INFO: [60] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Running to Finished
2021-01-25 17:56:24.136 INFO: [60] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service finished, sending off iq <iq to='jibribrewery@internal.auth.my.domain.com/focus' id='PUZDk-35' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' status='off'/></iq>
2021-01-25 17:56:24.146 INFO: [64] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Participants in this recording: []
2021-01-25 17:56:24.168 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving call and quitting browser
2021-01-25 17:56:24.168 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Recurring call status checks cancelled
2021-01-25 17:56:24.174 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 18 log entries for type browser
2021-01-25 17:56:24.219 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 987 log entries for type driver
2021-01-25 17:56:24.269 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 0 log entries for type client
2021-01-25 17:56:24.269 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving web call
2021-01-25 17:56:24.354 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Quitting chrome driver
2021-01-25 17:56:24.430 INFO: [64] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Chrome driver quit
2021-01-25 17:56:24.430 INFO: [64] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Finalizing the recording
2021-01-25 17:56:24.430 SEVERE: [64] 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.api.xmpp.XmppApi.handleStopJibriIq(XmppApi.kt:263)
org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq(XmppApi.kt:169)
org.jitsi.jibri.api.xmpp.XmppApi.handleIq(XmppApi.kt:150)
org.jitsi.xmpp.mucclient.MucClient.handleIq(MucClient.java:569)
org.jitsi.xmpp.mucclient.MucClient.access$800(MucClient.java:50)
org.jitsi.xmpp.mucclient.MucClient$2.handleIQRequest(MucClient.java:533)
org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

2021-01-25 17:56:24.431 INFO: [64] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: BUSY -> IDLE
2021-01-25 17:56:24.432 FINE: [64] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:56:24.432 INFO: [64] 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
2021-01-25 17:56:24.432 INFO: [60] org.jitsi.jibri.JibriManager.stopService() No service active, ignoring stop
2021-01-25 17:56:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:57:20.937 INFO: [64] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to='jibri@auth.my.domain.com/fkGH5Luj' from='jibribrewery@internal.auth.my.domain.com/focus' id='amlicmlAYXV0aC5jb25uZWN0LnZ2di5jYXNoL2ZrR0g1THVqAHdJNGwwLTE1MTIAwaKC6H2Hz7sPGaZpYw3zbQ==' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' action='start' recording_mode='file' room='schoolwork@conference.my.domain.com' session_id='rszdutqruuqdegvq' app_data='{"file_recording_metadata":{"share":true}}'/></iq> from environment [MucClient id=my.domain.com hostname=my.domain.com]
2021-01-25 17:57:20.937 INFO: [64] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Received start request, starting service
2021-01-25 17:57:20.944 INFO: [64] org.jitsi.jibri.api.xmpp.XmppApi.handleStartService() Parsed call url info: CallUrlInfo(baseUrl=https://my.domain.com, callName=schoolwork, urlParams=[])
2021-01-25 17:57:20.944 INFO: [64] org.jitsi.jibri.JibriManager.startFileRecording() Starting a file recording with params: FileRecordingRequestParams(callParams=CallParams(callUrlInfo=CallUrlInfo(baseUrl=https://my.domain.com, callName=schoolwork, urlParams=[])), sessionId=rszdutqruuqdegvq, callLoginParams=XmppCredentials(domain=recorder.my.domain.com, username=recorder, password=RPwd))
2021-01-25 17:57:21.124 INFO: [64] org.openqa.selenium.remote.ProtocolHandshake.createSession() Detected dialect: OSS
2021-01-25 17:57:21.129 FINE: [64] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.<init>() Detected os as OS: LINUX
2021-01-25 17:57:21.130 INFO: [64] org.jitsi.jibri.service.impl.FileRecordingJibriService.<init>() Writing recording to /srv/recordings/rszdutqruuqdegvq, finalize script path /path/to/finalize_recording.sh
2021-01-25 17:57:21.130 FINE: [64] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: start:recording
2021-01-25 17:57:21.130 INFO: [64] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: IDLE -> BUSY
2021-01-25 17:57:21.130 FINE: [64] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:57:21.130 INFO: [64] 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
2021-01-25 17:57:21.131 INFO: [64] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Sending 'pending' response to start IQ
2021-01-25 17:57:21.766 FINE: [61] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Visiting url https://my.domain.com/schoolwork#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
2021-01-25 17:57:22.137 FINE: [61] org.jitsi.jibri.selenium.pageobjects.CallPage.apply() Not joined yet: Cannot read property 'isJoined' of undefined
2021-01-25 17:57:22.643 FINE: [61] org.jitsi.jibri.selenium.pageobjects.CallPage.apply() Not joined yet: Cannot read property 'isJoined' of undefined
2021-01-25 17:57:23.193 INFO: [61] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Waited 1067 milliseconds for call page to load
2021-01-25 17:57:23.193 INFO: [61] org.jitsi.jibri.selenium.JibriSelenium.<init>() Starting empty call check with a timeout of PT30S
2021-01-25 17:57:23.203 INFO: [61] org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange() Transitioning from state Starting up to Running
2021-01-25 17:57:23.203 INFO: [61] org.jitsi.jibri.service.impl.FileRecordingJibriService.invoke() Selenium joined the call, starting the capturer
2021-01-25 17:57:23.221 INFO: [61] 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/rszdutqruuqdegvq/schoolwork_2021-01-25-17-57-21.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/rszdutqruuqdegvq/schoolwork_2021-01-25-17-57-21.mp4])
2021-01-25 17:57:24.341 INFO: [59] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegStateMachineStateChange() Ffmpeg capturer transitioning from state Starting up to Running
2021-01-25 17:57:24.341 INFO: [59] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Starting up to Running
2021-01-25 17:57:24.342 INFO: [59] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service started up successfully, sending on iq <iq to='jibribrewery@internal.auth.my.domain.com/focus' id='PUZDk-46' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' status='on'/></iq>
2021-01-25 17:57:38.238 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {}, num participants: 2, numMutedParticipants: 1, numJigasis: 0, all clients muted? false
2021-01-25 17:57:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:57:53.221 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=0, upload=0}, download=160, upload=0, video={download=160, upload=0}}, num participants: 2, numMutedParticipants: 1, numJigasis: 0, all clients muted? false
2021-01-25 17:58:08.218 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=0, upload=0}, download=159, upload=0, video={download=159, upload=0}}, num participants: 2, numMutedParticipants: 1, numJigasis: 0, all clients muted? false
2021-01-25 17:58:23.217 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=0, upload=0}, download=162, upload=0, video={download=162, upload=0}}, num participants: 2, numMutedParticipants: 1, numJigasis: 0, all clients muted? false
2021-01-25 17:58:38.217 INFO: [18] org.jitsi.jibri.selenium.JibriSelenium.run() Jibri client receive bitrates: {audio={download=0, upload=0}, download=165, upload=0, video={download=165, upload=0}}, num participants: 2, numMutedParticipants: 1, numJigasis: 0, all clients muted? false
2021-01-25 17:58:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:58:50.938 INFO: [77] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to='jibri@auth.my.domain.com/fkGH5Luj' from='jibribrewery@internal.auth.my.domain.com/focus' id='amlicmlAYXV0aC5jb25uZWN0LnZ2di5jYXNoL2ZrR0g1THVqAHdJNGwwLTE1OTEAwaKC6H2Hz7sPGaZpYw3zbQ==' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' action='stop' session_id='rszdutqruuqdegvq'/></iq> from environment [MucClient id=my.domain.com hostname=my.domain.com]
2021-01-25 17:58:50.938 FINE: [77] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: stop:recording
2021-01-25 17:58:50.938 INFO: [77] org.jitsi.jibri.JibriManager.stopService() Stopping the current service
2021-01-25 17:58:50.938 INFO: [77] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Stopping capturer
2021-01-25 17:58:50.938 INFO: [77] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() Stopping ffmpeg process
2021-01-25 17:58:51.336 INFO: [59] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegStateMachineStateChange() Ffmpeg capturer transitioning from state Running to Finished
2021-01-25 17:58:51.337 INFO: [77] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() ffmpeg exited with value 255
2021-01-25 17:58:51.337 INFO: [59] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Running to Finished
2021-01-25 17:58:51.337 INFO: [77] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Quitting selenium
2021-01-25 17:58:51.337 INFO: [59] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service finished, sending off iq <iq to='jibribrewery@internal.auth.my.domain.com/focus' id='PUZDk-53' type='set'><jibri xmlns='http://jitsi.org/protocol/jibri' status='off'/></iq>
2021-01-25 17:58:51.343 INFO: [77] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Participants in this recording: []
2021-01-25 17:58:51.345 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving call and quitting browser
2021-01-25 17:58:51.345 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Recurring call status checks cancelled
2021-01-25 17:58:51.351 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 18 log entries for type browser
2021-01-25 17:58:51.389 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 1089 log entries for type driver
2021-01-25 17:58:51.430 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 0 log entries for type client
2021-01-25 17:58:51.430 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving web call
2021-01-25 17:58:51.524 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Quitting chrome driver
2021-01-25 17:58:51.599 INFO: [77] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Chrome driver quit
2021-01-25 17:58:51.599 INFO: [77] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Finalizing the recording
2021-01-25 17:58:51.600 SEVERE: [77] 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.api.xmpp.XmppApi.handleStopJibriIq(XmppApi.kt:263)
org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq(XmppApi.kt:169)
org.jitsi.jibri.api.xmpp.XmppApi.handleIq(XmppApi.kt:150)
org.jitsi.xmpp.mucclient.MucClient.handleIq(MucClient.java:569)
org.jitsi.xmpp.mucclient.MucClient.access$800(MucClient.java:50)
org.jitsi.xmpp.mucclient.MucClient$2.handleIQRequest(MucClient.java:533)
org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1188)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

2021-01-25 17:58:51.600 INFO: [77] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: BUSY -> IDLE
2021-01-25 17:58:51.600 FINE: [77] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 17:58:51.600 INFO: [77] 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
2021-01-25 17:58:51.600 INFO: [59] org.jitsi.jibri.JibriManager.stopService() No service active, ignoring stop
2021-01-25 17:59:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
2021-01-25 18:00:50.403 FINE: [18] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status

I belive this is the pin-point @Freddie

That’s usually not a problem. Jibri is just responding to you not specifying a finalize script. What does your Jibri.conf look like? Did you check to make sure you have a recording folder and that it’s writable by Jibri?

This is my Jibri.conf file @Freddie
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 = [“my.domain.com”]
xmpp-domain = “my.domain.com

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

                control-login {
                    domain = "auth.my.domain.com"
                    username = "jibri"
                    password = "JPwd"
                }

                call-login {
                    domain = "recorder.my.domain.com"
                    username = "recorder"
                    password = "RPwd"
                }

                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_recording.sh"
      }
      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",
          "--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
      }
    }

Can Jibri follow the speaker only during the conference?
Can Jibri record the speaker only in the conference?

Yes, if you enable the “follow me” option in ‘settings’ and the Speaker stays in speaker view.

what should I put inside the “.sh file”

Which .sh - the launch.sh? You don’t change that.

I just looked at your log; it looks like Selenium wasn’t getting data in the 2nd half of the log. But in your prior attempt, it looks like it started recording and then maybe stopped. So, seems like you changed something in-between those two instances that might have made it worse. Perhaps retrace?

Also, do you see anything of interest in your prosody log, maybe?