Installation instructions "Video recording w/ jitsi & jibri on same server"

Dear fellows,

In our research group, we would like to use the jitsi stack to conduct usability studies.

I would like to set up both, jitsi and jibri on one single server running Ubuntu 18.04 LTS.

In our studies, there is always a maximus of 2 users (1 participant, 1 researcher) in a room.
We need screencasting / screen recording rather than recording the camera video signal.

The jitsi-meet installation succeeds with the packages from the stable apt repositories.
I can use jitsi meet, served via Apache2 using our institute’s SSL certificate.

Problems arise, when installing the recording part:

I followed the instructions given in this video

which implies adding the unstable package repositories.
I tried with installing jibri, and as this didn’t succeed tried with the updated packages (jitsi-*…)

Currently, the following versions are installed:
jitsi-meet/unstable,now 1.0.3612-1
jibri/unstable,now 7.2.71-1
jitsi-meet-prosody/unstable,now 1.0.3280-1
jicofo/stable,unstable 1.0-458-1
prosody/bionic,now 0.10.0-1build1 amd64
openjdk version “1.8.0_191”

The 'Start recording" button is shown, but when I click on it a “service-unavailable” error is shown in the browser console.

Jicofo.log reports “Unable to find an available Jibri, can’t start”
I followed @damencho’ s advice to start in a specific order, but no success.

 service jibri stop && service jicofo stop && service jvb stop && service prosody restart
 service jicofo start
 service jvb start
 service jibri start

A spent quite a while solving the issues searching for hints in this community and the web.
It seems that many others are facing this or other issues. I could not find a resource confirming that the setup is possible.

So my questions are:

Is there currently a possibility to install and run the described setup in a stable manner?
Do you have a preferred setup which works better than others (eg. nginx better than apache, debian safer than ubuntu…)?
It would also help to know that this is not possible currently - we would then stop dedicating our limited resources on this path.

Best,
Tom

Hi,

I have tried installing Jibri on the same server but started facing issues with X11 Server and prerequisites of chrome chromedriver is - running the xorg and ffmpeg correctly. In general, the X server should adapt other tasks automatically but it was creating an issue on Ubuntu 18.04 LTS and Xwrapper needs to be running on Console Mode …so I decided to keep a separate machine running with Ubuntu Server as it will bootup and will have only Console environment. Jibri-Xorg was running fine there and no issues seemed related to X server. But I started facing a new issue that I didn’t face when running on the same server i.e. Jicofo failed to find available Jibri.

So I would also prefer you to install Jibri on a separate server or you can use Selenium for Recording purpose.

In the documentation it is stated several times that installing jibri on (a) different server(s) is only recommended for performance reasons.
In our case, only one server is available.
We have a maximum of two participants, which should not be a problem

Does this mean that it is not possible to install jitsi / jibri on the same machine?

Two remarks regarding the setup:
There is only one DNS entry that points to the main domain foo.bar.org

How does the resolution of the subdomains (recorder, jitsi-videobridge, auth, auth.internal,…) happen?

In general, is it required to add DNS entries for these subdomains?
Can it be solved by adding entries in the /etc/hosts/ file?

A little diagram that indicates the domain names with the different server components in a single server setup would be helpful.

Then, the error in jicofo.log when clicking the “Start recording” button is

Jicofo 2019-03-26 09:02:05.619 SCHWERWIEGEND: [113] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2019-03-26 09:02:05.620 INFORMATION: [113] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Failed to start a Jibri session, no Jibris available

service jibri status
gives

Mär 26 09:01:34 foo launch.sh[26550]: 2019-03-26 09:01:34.283 SCHWERWIEGEND: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Error connecting to xmpp environment: org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPP error reply received from 1.2.3.4: XMPPError: remote-server-not-found - cancel

The only dns needed is the one to access the service, the rest are just logical names internal for xmpp server and the system.

same question came to mind …but I found jibri was unable to work on existing one and I have told several times on community to use the separate instance, I found better way to shift upon separate machine but all in vain. My problem is still not resolved. So if you are also Ubuntu 18.04 user, must give a try and let me know. I bel AWS has better support in this case…on my VMs it is not working.

@rishabhchd19 yes. I finally succeeded.
All working, recording, change from screenshare to camera recording including audio on ubuntu 18.04
using stable jitsi / jibri packages.

I assume that the reason for jibri / jicofo / brewery not properly connecting was that in some of the files that came with the debian packages, the authentication method was set to internal_hashed

So I check if in your /etc/prosody/prosody.cfg.lua file there is a line

authentication = "internal_hashed"
and change the value to internal_plain

glad to know your problem has been resolved. I will try with fresh installation over n over until it starts working :grin:

Hello. I’m installed Jitsi & Jibri on the same server and i have a problem. When I click the start recording button i have comunicate: Preparing to record the meeting and after error: Recorded filed to start.

Please to help me :slight_smile:

@mareks have you checked jibri logs? Is there any error there? What about jicofo logs?

2019-09-20 12:36:13.012 INFO: [1] org.jitsi.jibri.Main.main() Jibri run with args [–config, /etc/jitsi/jibri/config.json]
2019-09-20 12:36:13.019 INFO: [1] org.jitsi.jibri.Main.main() Using config file /etc/jitsi/jibri/config.json
2019-09-20 12:36:13.020 INFO: [1] org.jitsi.jibri.Main.main() Using port 3333 for internal HTTP API
2019-09-20 12:36:13.020 INFO: [1] org.jitsi.jibri.Main.main() Using port 2222 for the HTTP API
2019-09-20 12:36:13.698 INFO: [1] org.jitsi.jibri.Main.loadConfig() Parsed config:
JibriConfig(recordingDirectory=/tmp/recordings, enabledStatsD=true, finalizeRecordingScriptPath=/path/to/finalize_recording.sh, xmppEnvironments=[XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[192.168.1.225], xmppDomain=1$
2019-09-20 12:36:14.283 WARNING: [1] org.glassfish.jersey.internal.inject.Providers.checkProviderRuntime() A provider org.jitsi.jibri.api.http.internal.InternalHttpApi registered in SERVER runtime does not implement any provider interfa$
2019-09-20 12:36:14.586 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
2019-09-20 12:36:14.589 INFO: [1] org.jitsi.xmpp.mucclient.MucClientManager.log() Setting a presence extension: org.jitsi.xmpp.extensions.jibri.JibriStatusPacketExt@5b989dc7
2019-09-20 12:36:14.596 INFO: [1] org.jitsi.jibri.api.xmpp.XmppApi.start() Connecting to xmpp environment on 192.168.1.225 with config XmppEnvironmentConfig(name=prod environment, xmppServerHosts=[192.168.1.225], xmppDomain=192.168.1.22$
2019-09-20 12:36:14.598 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
2019-09-20 12:36:14.622 WARNING: [19] org.jitsi.xmpp.mucclient.MucClient.log() Disabling certificate verification!
2019-09-20 12:36:14.731 WARNING: [1] org.glassfish.jersey.internal.inject.Providers.checkProviderRuntime() A provider org.jitsi.jibri.api.http.HttpApi registered in SERVER runtime does not implement any provider interfaces applicable in$
2019-09-20 12:36:14.988 INFO: [19] org.jitsi.xmpp.mucclient.MucClient.log() [MucClient id=192.168.1.225 hostname=192.168.1.225] connected
2019-09-20 12:36:15.034 INFO: [19] org.jitsi.xmpp.mucclient.MucClient.log() Joined MUC: jibribrewery@internal.auth.192.168.1.225
2019-09-20 12:36:42.651 INFO: [36] org.jitsi.jibri.api.xmpp.XmppApi.handleJibriIq() Received JibriIq <iq to=‘dccb9331-b40f-4ad4-ac72-2f6f56e01244@192.168.1.225/7e699897-4c64-4940-a24d-8ebcd263da34’ from='jibribrewery@internal.auth.192.1$
2019-09-20 12:36:42.652 INFO: [36] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Received start request
2019-09-20 12:36:42.658 INFO: [36] org.jitsi.jibri.api.xmpp.XmppApi.handleStartJibriIq() Sending ‘pending’ response to start IQ
2019-09-20 12:36:42.658 INFO: [37] org.jitsi.jibri.api.xmpp.XmppApi.run() Starting service
2019-09-20 12:36:42.699 INFO: [37] org.jitsi.jibri.api.xmpp.XmppApi.handleStartService() Parsed call url info: CallUrlInfo(baseUrl=https://192.168.1.225, callName=test, urlParams=)
2019-09-20 12:36:42.700 INFO: [37] org.jitsi.jibri.JibriManager.startFileRecording() Starting a file recording with params: FileRecordingRequestParams(callParams=CallParams(callUrlInfo=CallUrlInfo(baseUrl=https://192.168.1.225, callName$
2019-09-20 12:36:43.778 INFO: [37] org.openqa.selenium.remote.ProtocolHandshake.createSession() Detected dialect: OSS
2019-09-20 12:36:43.899 FINE: [37] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.() Detected os as OS: LINUX
2019-09-20 12:36:43.906 INFO: [37] org.jitsi.jibri.service.impl.FileRecordingJibriService.() Writing recording to /tmp/recordings/balzezjovynvqnku
2019-09-20 12:36:43.909 FINE: [37] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: start:recording
2019-09-20 12:36:43.911 INFO: [37] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: IDLE -> BUSY
2019-09-20 12:36:43.911 INFO: [37] 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
2019-09-20 12:36:43.912 INFO: [37] org.jitsi.xmpp.mucclient.MucClientManager.log() Setting a presence extension: org.jitsi.xmpp.extensions.jibri.JibriStatusPacketExt@1267af9f
2019-09-20 12:36:44.983 FINE: [46] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Visiting url https://192.168.1.225/test#config.iAmRecorder=true&config.externalConnectUrl=null&config.startWithAudioMuted=true&config.startWithVide$
2019-09-20 12:37:16.014 SEVERE: [46] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Timed out waiting for call page to load
2019-09-20 12:37:16.017 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.onSeleniumStateChange() Transitioning from state Starting up to Error: SESSION Failed to join call
2019-09-20 12:37:16.018 INFO: [46] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Starting up to Error: SESSION Failed to join call
2019-09-20 12:37:16.019 INFO: [46] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service had an error, sending error iq <jibri xmlns='http://jitsi.org/ 2019-09-20 12:37:16.020 FINE: [46] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: stop:recording 2019-09-20 12:37:16.021 INFO: [46] org.jitsi.jibri.JibriManager.stopService() Stopping the current service 2019-09-20 12:37:16.026 INFO: [46] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Stopping capturer 2019-09-20 12:37:16.031 INFO: [46] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() Stopping ffmpeg process 2019-09-20 12:37:16.032 INFO: [46] org.jitsi.jibri.util.JibriSubprocess.ffmpeg.stop() ffmpeg exited with value null 2019-09-20 12:37:16.032 INFO: [46] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Quitting selenium 2019-09-20 12:37:16.040 INFO: [46] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Participants in this recording: [] 2019-09-20 12:37:16.101 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 10 log entries for type browser 2019-09-20 12:37:16.157 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 1003 log entries for type driver 2019-09-20 12:37:16.331 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Got 0 log entries for type client 2019-09-20 12:37:16.332 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Leaving web call 2019-09-20 12:37:16.341 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Quitting chrome driver 2019-09-20 12:37:16.412 INFO: [46] org.jitsi.jibri.selenium.JibriSelenium.leaveCallAndQuitBrowser() Chrome driver quit 2019-09-20 12:37:16.412 INFO: [46] org.jitsi.jibri.service.impl.FileRecordingJibriService.stop() Finalizing the recording 2019-09-20 12:37:16.414 SEVERE: [46] 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 dir

Jicofo logs:

Jicofo 2019-09-20 13:50:43.374 INFO: [36] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Owner has left the room !
Jicofo 2019-09-20 13:50:43.374 INFO: [36] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Member test@conference.192.168.1.225/218c36ec is leaving
Jicofo 2019-09-20 13:50:43.374 WARNING: [36] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Participant not found for test@conference.192.168.1.225/218c36ec terminated already or never started ?
Jicofo 2019-09-20 13:50:43.377 INFO: [36] org.jitsi.jicofo.FocusManager.log() Disposed conference for room: test@conference.192.168.1.225 conference count: 0

2019-09-20 12:37:16.014 SEVERE: [46] org.jitsi.jibri.selenium.pageobjects.CallPage.visit() Timed out waiting for call page to load

Jibri cannot load the page. Maybe a firewall or something …
Also make sure you run jibri with java8

Hi,

Can jitsi meet / jibri etc. be used for commercial purposes? Do I have to share the code? Can I encrypt it?

Yes.

No.

Not sure how you can encrypt js code, but you are free to do whatever you find suitable for your needs.

Most of our components use the Apache license:
https://github.com/jitsi/jitsi-meet/blob/master/LICENSE

Thank you for answer. I have 2 problems with my jitsi-meet.

First - certificate. When I try to add a certificate I get an error.

image

Second problem with recording. When I click start recording it-s comunicate preparing to recording and then get an error. Recording filed to start.

Jicofo logs:

Jicofo 2019-10-07 08:25:17.846 INFO: [45] org.jitsi.jicofo.xmpp.FocusComponent.handleConferenceIq().401 Focus request for room: marek@conference.u-marek-testy.comfortel.pl
Jicofo 2019-10-07 08:25:17.850 INFO: [45] org.jitsi.jicofo.FocusManager.log() Created new focus for marek@conference.u-marek-testy.comfortel.pl@auth.u-marek-testy.comfortel.pl. Conference count 1,options:
Jicofo 2019-10-07 08:25:17.851 INFO: [45] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Lip-sync enabled in marek@conference.u-marek-testy.comfortel.pl
Jicofo 2019-10-07 08:25:17.851 INFO: [45] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Joining the room: marek@conference.u-marek-testy.comfortel.pl
Jicofo 2019-10-07 08:25:17.993 INFO: [36] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Chat room event ChatRoomMemberPresenceChangeEvent[type=MemberJoined sourceRoom=org.jitsi.impl.protocol.xmpp.ChatRoomImpl@62d3b8cd member=ChatMember[marek@conference.u-marek-testy.comfortel.pl/3c087c5e, jid: null]@320213518]
Jicofo 2019-10-07 08:25:17.996 INFO: [36] org.jitsi.jicofo.ChatRoomRoleAndPresence.log() Granted owner to marek@conference.u-marek-testy.comfortel.pl/3c087c5e
Jicofo 2019-10-07 08:25:17.996 INFO: [36] org.jitsi.jicofo.JitsiMeetConferenceImpl.log() Member marek@conference.u-marek-testy.comfortel.pl/3c087c5e joined.
Jicofo 2019-10-07 08:25:33.081 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Starting Jibri jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname for stream ID: null in room: marek@conference.u-marek-testy.comfortel.pl
Jicofo 2019-10-07 08:25:33.094 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname has status pending and failure reason null, current Jibri jid is jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname
Jicofo 2019-10-07 08:25:33.094 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Starting session with Jibri jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname
Jicofo 2019-10-07 08:25:33.095 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Started Jibri session
Jicofo 2019-10-07 08:25:33.895 INFO: [36] org.jitsi.jicofo.recording.jibri.JibriDetector.onInstanceStatusChanged().136 Received Jibri jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname status
Jicofo 2019-10-07 08:25:33.896 INFO: [36] org.jitsi.jicofo.recording.jibri.JibriDetector.notifyJibriStatus().174 Jibri: jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname available: false
Jicofo 2019-10-07 08:26:05.815 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Updating status from JIBRI: for marek@conference.u-marek-testy.comfortel.pl
Jicofo 2019-10-07 08:26:05.815 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Got Jibri status update: Jibri jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname has status off and failure reason error, current Jibri jid is jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname
Jicofo 2019-10-07 08:26:05.816 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri is no longer pending, cancelling pending timeout task
Jicofo 2019-10-07 08:26:05.816 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Jibri failed, trying to fall back to another Jibri
Jicofo 2019-10-07 08:26:05.817 SEVERE: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can’t start
Jicofo 2019-10-07 08:26:05.817 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Failed to fall back to another Jibri, this session has now failed
Jicofo 2019-10-07 08:26:05.817 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Got jibri status off and failure error
Jicofo 2019-10-07 08:26:05.817 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Publishing new jibri-recording-status: in: marek@conference.u-marek-testy.comfortel.pl
Jicofo 2019-10-07 08:26:05.818 INFO: [127] org.jitsi.jicofo.recording.jibri.JibriSession.log() Cleaning up current JibriSession
Jicofo 2019-10-07 08:26:06.163 INFO: [36] org.jitsi.jicofo.recording.jibri.JibriDetector.onInstanceStatusChanged().136 Received Jibri jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname status
Jicofo 2019-10-07 08:26:06.164 INFO: [36] org.jitsi.jicofo.recording.jibri.JibriDetector.notifyJibriStatus().174 Jibri: jibribrewery@internal.auth.u-marek-testy.comfortel.pl/jibri-nickname available: true