pixel
Select Page

NETWAYS Blog

Jitsi Meetings mit Jibri aufzeichen

Trotz scheinbar eintretender Entspannung bei der aktuellen Corona-Krise ist Videoconferencing nicht mehr wegzudenken. Sei es durch das Umdenken bei den Arbeitgebern zu Homeofficeregeleungen oder bei international gewachsenen Teams. Alle müssen irgendwie miteinander kommunizieren. Wir von NETWAYS setzen ja schon seit Beginn der Krise auf Jitsi und konnten damit auch viele Kunden überzeugen, datenschutzkonforme Videokonferenzlösungen einzusetzen.

Neben unserer Jitsi-App (JaaS), welche sich übrigens 30 Tage kostenfrei testen lässt und darüber hinaus auch schon Branding nach eigenen Bedürfnissen anbietet, bauen wir auch Jitsi-Lösungen nach Kundenwunsch. Seien es spezielle Anforderungen an besonders viele gleichzeitige Nutzer, ein komplett eigenes Branding, JWT-Auth, Telefoneinwahl oder Datenschutz-Pop-Up’s.

Inzwischen erreichen uns auch immer öfter Anfragen, die den Wunsch äußern, solche Meetings aufzuzeichnen. Also haben wir uns hier auf die Suche gemacht und Jibri gefunden. Nachfolgend beschreibe ich in aller Kürze, wie man seinen Jitsi-Server dazu bringt Videos aufzuzeichnen. Als Basis hierzu dient ein Ubuntu 20.04 LTS-Server mit bereits eingerichtetem Jitsi.

Alle nachfolgenden Schritte werden als root auf dem Jitsi-Meet Server ausgeführt, hingegen zur offiziellen Dokumentation gibt es ein paar Stolpersteine, welche ich euch gern erspare.

Vorbereitung

Zu Beginn installieren wir die erforderlichen Kernel-Module:

apt install linux-modules-extra-$(uname -r)
apt install linux-generic
reboot
echo "snd-aloop" >> /etc/modules 
modprobe snd-aloop

Nun machen wir den Server mittels Chrome Stable als Client fit:

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

Im nächsten Schritt kommen die Chrome managed-policies dazu:

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

Der Chrome-Treiber darf natürlich auch nicht fehlen, daher führen wir nun aus:

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

Noch weitere benötigte Pakete:

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

Installation Jibri

Die eigentliche Jibri-Installation machen wir über apt:

apt install jibri

Ohne Rechte geht natürlich nichts, daher kommen diese auch noch dazu:

usermod -aG adm,audio,video,plugdev jibri

In den nächsten Schritten kommt noch das erforderliche Java hinzu:

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

Wir müssen Java8 als default setzen, dazu ändern wir die nachfolgende Datei:

vim /opt/jitsi/jibri/launch.sh

Hier ändern wir das Wort “java” in den folgenden String “/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java”. Danach speichern und schließen wir Datei schon wieder.

Prosody benötigt auch noch eine kleine Änderung. Also kommt das nun direkt (Achtung, Pfad weicht auf die eigene Domain am Ende ab):

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

Dort hängen wir am Ende einfach an (your.domain.com wieder durch eigene Jitsi-Adresse ersetzen):

-- 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"

Danach speichern und schließen wir die Datei wieder
Nun bekommt Prosody noch 2 neue Nutzer, die Passwörter “JPwd” und “RPwd” ersetzt man durch eigene, sichere Passwörter und notiert diese für später:

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

Jicofo will auch noch eine Änderung, diese beginnen wir durch öffnen des Config-Files:

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

Dort fügen wir die Zeilen ein (Achtung, Domainname anpassen):

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

Jetzt bringen wir Jitsi selbst wirklich noch bei, eine Aufnahme zu starten (!Domainname):

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

hier prüfen wir, ob die folgenden Optionen so gesetzt sind, bzw. fügen den Code ein (!Domain):

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

Der Dateispeicherort bekommt nun auch noch die Rechte, die er braucht, um von Jibri beschrieben zu werden:

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

Zu guter Letzt, muss Jibri noch konfiguriert werden. Nachfolgend ein Beispiel hierfür. Man achte bitte auf das Ersetzen mit dem eigenen, korrekten Domainnamen und die korrekt vergebenen Passwörter:

vim /etc/jitsi/jibri/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
}
}

Das wars, nun startet man die betroffenen Dienste noch neu und der Aufnahme-Button im Meeting zeigt nun auch die gewünschte Funktion:

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

Die Aufnahmen sind nun in /srv/recordings zu finden. Sollte hier noch kein Bild und Ton sichtbar sein, hat final folgende Änderung in der Datei /etc/jitsi/jicofo/jicofo.conf noch Abhilfe geschafft

Man suche sich die Zeile:

trusted-domains: recorder.your.domain.com

und passt sie an, auf:

trusted-domains: [recorder.your.domain.com]

Nach einem letzten Dienstneustart läuft nun alles wie gewünscht.

Schlusswort

Bedenken sollte man, dass Videos gespeichert werden und entsprechend viel Platz verbrauchen. Dies sollte man beim Sizing des Systems beachten. Die Daten sind auch nicht einfach für jeden Teilnehmer herunterladbar, sondern liegen auf dem Jitsi-Server unter /srv/recordings.

Alles in Allem ist dies aber eine wunderbare Lösung, um Workshops mit Kollegen aufzuzeichnen und diese später an neue Kollegen weiter zu geben.

Sobald die Aufzeichnung ausgelöst wird, wird dies allen Teilnehmern auch via Text2Speech mitgeteilt. Im Meeting ist oben neben dem Meetingnamen auch ein Recording-Symbol zu sehen.

Wer ein solches Jitsi haben will, sich aber nicht gern selbst darum kümmert, wäre bei uns genau richtig und sollte den Kontakt zu unseren freundlichen Vertriebskollegen suchen. Unsere Server stehen in Nürnberg und ermöglichen so eine vollständig datenschutzkonforme Videokonferenzlösung.

Georg Mimietz
Georg Mimietz
Lead Senior Systems Engineer

Georg kam im April 2009 zu NETWAYS, um seine Ausbildung als Fachinformatiker für Systemintegration zu machen. Nach einigen Jahren im Bereich Managed Services ist er in den Vertrieb gewechselt und kümmerte sich dort überwiegend um die Bereiche Shop und Managed Services. Seit 2015 ist er als Teamlead für den Support verantwortlich und kümmert sich um Kundenanfragen und die Ressourcenplanung. Darüber hinaus erledigt er in Nacht-und-Nebel-Aktionen Dinge, für die andere zwei Wochen brauchen.

Jitsi-Feature – Pop-up-Fenster

Jitsi ist sehr datenschutzfreundlich. Als Videokonferenzlösung halte ich es für eine der Besten auf dem Markt, da es absolut keine Einzelheiten an Dritte weitergibt. So kann man sicher sein, dass die eigenen Daten sicher und geheim bleiben. Jeder Jitsi-Raum wird nur auf Verlangen erstellt und nach Verlassen aller Teilnehmer sogleich gelöscht. Hiernach bleibt an Benutzerdaten nichts zurück – nichts. Jitsi speichert keine Daten, Chat-Historie oder Videodateien. Deshalb wird Jitsi bei denjenigen, die sich um ihre Privatsphäre sorgen, immer beliebter. Das ist aber noch nicht alles! Zusätzlich zur Teilnahme an der Videokonferenz ohne Spuren zu hinterlassen, kann als zusätzliches Feature Kamera und/oder Mikrofon bei Betreten des Raumes defaultmäßig deaktiviert eingestellt werden. Wer noch ein wenig mehr Sicherheit haben möchte, kann die Kommunikation im Raum auch Ende-zu-Ende-verschlüsseln. Was kann man sich mehr wünschen?

Obwohl Jitsi bereits Open Source ist, entsteht immer mal wieder der Kundenwunsch, eine Zustimmungsabfrage einzurichten, bspw. zum Akzeptieren des Datenschutzes, um strengeren europäischen Richtlinien zu genügen. Solche Pop-ups kennen Sie wahrscheinlich schon. Hier zeigen wir unsere Lösung, um das für unsere Jitsi-Kunden umzusetzen. Dies ist eine Eigenentwicklung und bei Jitsi in dieser Form nicht vorgesehen.

Das Pop-up bietet zwei Wahlmöglichkeiten. Wer den Bedingungen zustimmt, die frei formuliert werden können, wird berechtigt, die Jitsi-Instanz zu benutzen und einen Raum zu betreten. Ferner wird ein Cookie gespeichert, damit die Abfrage auf diesem Gerät nicht mehr erfolgen muss. Er wird für 30 Tage lokal gespeichert, verfällt danach und wird ausschließlich für den erläuterten Zustimmungszweck genutzt; wir sammeln oder verteilen keinerlei Daten. Falls man aus irgendwelchen Gründen den Bedingungen nicht zustimmen mag und auf “Ablehnen” klickt, wird man auf die zuvor besuchte Seite abgelenkt. Natürlich kann das Pop-up auch farblich anders gestaltet oder mit einem alternativen Logo versehen werden.

Es ist ebenfalls sehr nützlich, um Kunden/Besucher mit weiteren Informationen zu versorgen und/oder die Video-/Audio-Freigabe zu erläutern, kann aber auch sehr gut als Willkommensnachricht dienen.

Bei NETWAYS arbeiten wir immer hart daran, die neuesten Features zu implementieren und die kleinen Dinge an Ihrem System zu verbessern. Unsere Server werden hier in Deutschland betrieben. Haben Sie weitere Anpassungsideen oder -wünsche? Nehmen Sie gerne Kontakt mit uns auf und teilen uns diese mit!

Andrew Constant
Andrew Constant
Junior Systems Engineer

Andrew ist der NETWAYS Familie 2020 beigetreten. Er absolviert derzeit seine Ausbildung zum Fachinformatiker für Systemintegration im Bereich der NETWAYS Web Services. Der ehemalige Fremdsprachenkorrespondent und aus Northamptonshire stammende Engländer besticht durch seinen Humor und ergänzt das Team sehr gut. Seine Freizeit verbringt er gerne mit der Fotografie aber auch nach wie vor als Tandem Partner für neue Sprachen.

Endlich: Dein NWS JaaS – Jitsi as a Service !

Dein Jitsi as a Service (JaaS) kannst Du jetzt noch besser personalisieren.

Mit Beginn der ersten Coronawelle in Deutschland haben wir die Arbeit an einer Videokonferenz-Plattform begonnen, damals schon auf Basis von Jitsi. Schnell haben wir gemerkt, dass hier viel Bedarf besteht, gerade auch bei kleinen Firmen, Schulen oder Selbsthilfegruppen. Also haben wir die #StayAtHome Kampagne ins Leben gerufen, womit ihr unsere Dienste kostenlos nutzen konntet. Wir freuen uns seitdem über zahlreiche neue Kund*innen und euer wertvolles Feedback!

Vor einigen Wochen haben wir uns wieder zusammen gesetzt und versucht, dieses Kundenfeedback zu verarbeiten. Wir haben eure wichtigsten Punkte zusammengeführt und geschaut, wie wir das umsetzen können. Darunter waren Features wie Custom Logos, Logo Links, SIP, Custom Domains. Ein technischer Plan wurde erstellt, ein Zeitplan wurde aufgesetzt und dann ging’s los mit dem Erstellen des Prototypen.

Letzten Freitag war es dann soweit. “Geh ma live, oder was?” – Nun gut. Wir gingen live.
Doch was ist jetzt eigentlich anders? Kurz gesagt: ALLES.

Was ist neu? Ein kleiner Überblick

Die Passwort Authentifizierungsmethode haben wir ergänzt durch die JWT Authentifizierung. Du kannst hier Deine bevorzugte Methode zum Erzeugen der Tokens nehmen, oder eben unsere eigene Maske. Du kannst Dich also ab sofort entscheiden, was Du nutzen möchtest. Besonders wichtig ist dies für die Integration in RocketChat oder Mattermost.

 

 

Dazu kommt ein weiterer großer Schritt: Domains. Jede Instanz ist mit einem kostenlosen CNAME auf nws.netways.de ausstattbar. Damit aber nicht genug, auch eigene Domains können nun genutzt werden. TLS/SSL ist mit einem eigenen Zertifikat möglich, oder aber – wie immer – über unseren Let’s Encrypt Dienst.

 

 

 

 

Die auffälligste Neuerung wird aber die Design Sektion sein. Ich mach es kurz. Customizable ist:

  • Hintergrundfarbe
  • Logo
  • Hintergrundbild
  • LogoURL
  • App Name
  • Title
  • Subtitle
  • Impressum Link
  • Datenschutz Link
  • Cors Domains

 

Die Bilder, die für die Designänderungen ausgewählt wurden, landen in einem S3 Bucket. Jede Instanz hat einen eigenen Bucket und wir nutzen hier unser hauseigenes S3. Es gehen also wie üblich keine Deiner Daten ins Ausland.

Die Preise bleiben gleich. Du bekommst unser Jitsi für 25 User schon ab 24,99 €. Wichtig ist aber, dass es sich hier nicht um unique-User handelt oder Moderatoren, sondern um parallele User. Das unterscheidet uns von anderen großen Anbietern. Ebenso wie die Tatsache, dass wir alle Features für alle Pakete anbieten – egal, ob Du den kleinsten oder größten Plan gebucht hast.

Schaut’s euch an! Wir haben viel Zeit und Mühe investiert und bieten Dir unser JaaS 30 Tage kostenlos an. Es gibt also keinen Grund, es nicht sofort auszuprobieren. 😉

Jetzt Dein eigenes Jitsi starten!

Jitsi Customization

Custom Branding

A few months have passed since our last Jitsi features blogpost and seeing as the demand for Jitsi is still high, we are permanently looking for ways to improve our Jitsi for our customers. Therefore, I would now like to show you the new features which are currently in production.

Lately we got more and more requests for a custom branding of Jitsi. Because Jitsi does not offer such an option, we took the matter into our own hands and created a possibility that you can configure Jitsi yourself.
Many Jitsi users don’t want to have their setup with the default design. They instead want to add their own look. If you have ever searched for custom branding for Jitsi, you will quickly find out that there are already some community contributions available. This is good for the users who run their own jitsi. But for customers who rely on a service provider soon realise that these options are often not represented. Some service providers offer the possibility to create a custom setup for the customer, but such projects are usually associated with higher costs and a lot of hassle.
Therefore, we want to offer the possibility that everyone can easily configure their Jitsi on our website and finally get what they want. The watermark logo, the background and the colour scheme can be customized as desired.

Custom Domain

Apart from the appearance, we are currently also missing the option of the custom domain, but the wait will soon be over. What is also currently in demand is the possibility to have your own domain. This is unfortunately not currently possible with the current setup. But with the new structure of Jitsi, this will no longer be a problem.

JWT Authentication

If we now go a bit further in the direction of security, we come across another important point that is currently being worked on. The selection of the Jitsi authentication. Here we have also put together and provided something magical for you. As standard we have the authentication with user and password, but after our update you will have the ability to choose between standard and JWT authentication.

So it will soon be possible to configure everything on your own.
For these features we will also provide a technical blogpost, where we will explain step by step how all these configurations are implemented in Jitsi.
I hope I could peak your interest with this blogpost. If so, then you are as full of excitement as I am, because these features will be awesome.

If you are still not sure if you want to use Jitsi, check out our blog comparison of Jitsi vs Zoom vs BigBlueButton.

Joshua Hartmann
Joshua Hartmann
Junior Systems Engineer

Joshua startete im Sommer 2020 seine Ausbildung zum Fachinformatiker für Systemintegration im Bereich der NETWAYS Web Services. Zusammen mit seinen Kollegen kümmert er sich hier derzeit um die Kundenbetreuung sowie die Weiterentwicklung der SaaS Apps. Joshua ist musikalisch und spielt gerne Klavier, entdeckte vor einiger Zeit aber auch seine Liebe zum Wintersport. Außerdem hat Joshua eine Karriere in der Amateur Liga eines PC Spiels als professioneller Spieler hinter sich, verbringt heute seine Zeit aber lieber...

NWS Jitsi – is it really safe?

 

Zoom, Microsoft Teams, Skype, Jitsi public server – Everyone says “Your conferences are safe!”
So do we. But is your data really safe when you are using NWS Jitsi ? The answer is yes. We will give you 6 reasons/features why.

 

1. End2End Encryption

You can enable End2End Encryption at any time. Do you want to secure what is spoken and shown? No problem.

 

 

 

Only the participants which are joining your meeting and are activating E2E as well, can see and hear what you are saying. It will secure the data sent to the clients.

2. Lobby Feature

A common problem with Jitsi was that you could enter an already occupied conference with the same room name. Here is a feature that counteracts this problem.
To make Jitsi a little bit more secure there is a new lobby feature.

 

 

This feature can be easily activated by a moderator in the room. Now every participant has to enter his name and ask if he can join the session.

 

 

The moderator can then decide whether or not the participant can join the session.
To activate the lobby feature you will need to make a few following modifications to Jitsi.

 

 

3. Moderators

Moderators are the only one, which are allowed to enable the communication in a conference room, change security settings, enable E2E or the lobby feature, kick participants and so on.
Depending on the plan you have started, you can add 3 to 26 extra moderators.

 

 

You can reset the passwords of all of them, delete them again, recreate – just what you would do with admins in your own infrastructure. Keep the overview of who is allowed to manage your meetings!
Communication will be blocked unless someone with moderator rights enters the room. They are in charge!

 

4. Conference Passwords

In today’s time of home schooling, it unfortunately brings problems with it. Students who have received the invitation link can guess the name of other classes if the naming convention is the same and can anonymously log in to this class and disturb it.
Or if it is an important meeting, where you want to prevent colleagues from unintentionally logging in. It has also happened to me that I accidentally clicked on the wrong room and ended up in a conversation between two colleagues.
To protect the room with a password, the moderator has the possibility to assign a password after the room has started. To do so, he or she must enter a password in the security settings (the shield symbol in the lower right corner).
Each participant will then be asked for this password and can only enter when it is correct.
This password will only be saved for this active conference. When all participants have left the room the password will be reset and the moderator has to enter it again the next time the room is opened. Combined with the other features – you couldn’t be any safer!

5. Complexity warning

Another great feature that you can implement into your Jitsi Instance is the complexity of your room name. How many times have you had mysterious visitors appear in the middle of your meeting? Sometimes when a meeting room has been created, it is common that names like “test” and “room3” would be used and the problem here is, that these names are easy to guess. If you are holding an important meeting that you only want to discuss with select people, then you want to avoid the possibility of unwanted people joining your meeting.

By activating the complexity of the room name, a warning will be shown that the name is too short and easy to be guessed. Although it doesn’t completely stop the use of short-named rooms, it definitely makes the user think twice before opening a room with an easy name that someone could mistakenly enter.

6. Deleting the data

We delete all of the data gathered in the conference rooms every night. Chats, Etherpad edits – everything. You just keep what is stored in the cookies on your side (moderator password for example)

 

So is it safe to use NWS Jitsi for your company meetings, your classroom or for private use? We think YES. We do what ever we can to secure your meetings and your data. Compared to others, we think we are miles ahead regarding safety and security. Join us now and use Jitsi 3 months for free with the coupon code “StayAtHome”

Follow us on Twitter and share your experience with #NWSJitsi