[SOLVED] Unable to set up recording & streaming features on AWS Ubuntu 20.04

Hi guys,

I’m unable to set up the recording & streaming features on my Jitsi server.

It’s for a school project and I’m relatively new to Ubuntu, I’ve been busting my head for the past 2 weeks but I’m unable to find any solutions… I’d REALLY appreciate your help, so thank you in advance…

I’ve been following the tutorials of nerdonthestreet -

And I’m able to configure everything properly, there are no errors during the setup.

However, when I go to the Jitsi server (meet.iaps.institute) and start a test call, then try to start recording - it keeps saying “Recording unavailable”.

Can you please help me resolve the issue ? I don’t know how to find and provide you with the log files, so if you can please give me the command, so I can extract them and show them here

Thank you a lot in advance, I’m sorry, if some of the things may seem obvious / easy for you, as I said, I’m just just a student and I’m starting to work with Ubuntu & LInux only now, so I’m still learning

Welcome to the forum.

First of all, you want to confirm that Jitsi actually works fine before moving on to Jibri. So, have you successfully tested a call with 2 users on Jitsi? And then 3 users?

Hi and thank you for the welcome.

I can confirm that it works, I’ve tested it with a call from myself from my PC (as participant 1 from my WLAN network) and from my phone (as participant 2 from my mobile network), then tested it with a friend (from his PC via his own WLAN network).

Here are screenshots respectively:

And here is the error message that Recording is unavailable - sorry for double posting, I’m not allowed to post 2 pictures within 1 post.

Try one more participant - you need 3 people in a call to fully test it. You can open multiple browsers on your machine.

Yeah, it’s working properly:


If you used that guide to install and you followed everything closely, you’ll likely just need to populate your jibri.conf file. Look for Jibri.conf (/etc/jitsi/jibri/jibri.conf); open it - it will almost be empty. You’ll need to populate it. Use this reference doc. Note that you will need to adjust the xmpp section accordingly using this example.

For detailed troubleshooting tips, check out this tutorial - TUTORIAL: Jibri Overview, Troubleshooting Tips & Tricks - Solve your Jibri Problems, Quickly!

HI, sorry it took so long, had to go away for a few mins.

Nevertheless, here is the /etc/jitsi/jibri/config.json

// NOTE: this is a SAMPLE config file, it will need to be configured with
// values from your environment

// Where recording files should be temporarily stored
“recording_directory”: “/recordings”,
// The path to the script which will be run on completed recordings
“finalize_recording_script_path”: “”,
“xmpp_environments”: [
// A friendly name for this environment which can be used
// for logging, stats, etc.
“name”: “prod environment”,
// The hosts of the XMPP servers to connect to as part of
// this environment
“xmpp_server_hosts”: [“meet.iaps.institute”],
// The xmpp domain we’ll connect to on the XMPP server
“xmpp_domain”: “meet.iaps.institute”,
// Jibri will login to the xmpp server as a privileged user
“control_login”: {
// The domain to use for logging in
“domain”: “auth.meet.iaps.institute”,
// The credentials for logging in
“username”: “jibri”,
“password”: “Start1234”
// Using the control_login information above, Jibri will join
// a control muc as a means of announcing its availability
// to provide services for a given environment
“control_muc”: {
“domain”: “internal.auth.meet.iaps.institute”,
“room_name”: “JibriBrewery”,
// Nickname for uniquely identifing the jibri. It should be unique always
// if multiple jibris listening to same XMPP server
“nickname”: “jibri”
// All participants in a call join a muc so they can exchange
// information. Jibri can be instructed to join a special muc
// with credentials to give it special abilities (e.g. not being
// displayed to other users like a normal participant)
“call_login”: {
“domain”: “recorder.meet.iaps.institute”,
“username”: “recorder”,
“password”: “Start12345”
// When jibri gets a request to start a service for a room, the room
// jid will look like:
// roomName@optional.prefixes.subdomain.xmpp_domain
// We’ll build the url for the call by transforming that into:
// https://xmpp_domain/subdomain/roomName
// So if there are any prefixes in the jid (like jitsi meet, which
// has its participants join a muc at conference.xmpp_domain) then
// list that prefix here so it can be stripped out to generate
// the call url correctly
“room_jid_domain_string_to_strip_from_start”: “conference.”,
// The amount of time, in minutes, a service is allowed to continue.
// Once a service has been running for this long, it will be
// stopped (cleanly). A value of 0 means an indefinite amount
// of time is allowed
“usage_timeout”: “0”

And here is the /etc/jitsi/jibri/jibri.conf:

/ An example file showing the fields for the XMPP environment config.
environments = [
// A user-friendly name for this environment
name = “prod environment”

        // A list of XMPP server hosts to which we'll connect
        xmpp-server-hosts = [ "meet.iaps.institute" ]

        // The base XMPP domain
        xmpp-domain = "meet.iaps.institute"

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

        // The login information for the control MUC
        control-login {
            domain = "auth.meet.iaps.institute"
            username = "jibri"
            password = "Start1234"

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

        // The login information the selenium web client will use
        call-login {
            domain = "domain"
            username = "username"
            password = "password"
        // The value we'll strip from the room JID domain to derive
        // the call URL
        strip-from-room-domain = ""

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

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


I’ve put example passwords, which correspondent to the real ones.

I’m not sure how I should populate the remaining fields in the jibri.conf file, please assist - the optional one for the SIP gateway services, the selenium one, etc.

No, you don’t need config.json (it’s being deprecated). You need to fill in the values in your Jibri.conf; don’t worry about the optional ones. You do need call-login though. That segment should be

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

Be sure to edit to reflect your chosen password for “recorder”.

You also need to adjust this line to:

strip-from-room-domain = “conference.”

Thanks a lot, it worked !!! Recording and streaming are both enabled, thank you a lot for your assistance !

You’re welcome. Goodluck with school! Make sure you make me proud! :smiley:

1 Like