Basado en la traducción del día 14 de Junio 2020 de la página
How-to to setup integrated Jitsi and Jibri for dummies, my comprehensive tutorial for the beginner
y mi experiencia propia.
"En esta publicación, describiré los pasos para obtener una
configuración funcional de videoconferencia Jitsi Meet con
grabación y transmisión Jibri integradas. Todos los pasos
se basan en la instrucción readme en Github con algunas
adiciones y / o modificaciones".(Woodworker_Life)
Documento de instalación rápida de Jitsi en Github: https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md 185
Documento de instalación rápida de Jibri en Github: https://github.com/jitsi/jibri/blob/master/README.md 361
Aclaremos algunas cosas:
- JITSI. Cuando hablo del servidor: “jitsi”, este será el servidor para alojar los servicios de jitsi meet, sus videoconferencias se alojarán en este servidor y sus participantes se conectarán a este servidor.
- JIBRI. Cuando hablo del servidor: “jibri”, este será el servidor para alojar el servicio de grabación y transmisión de jibri. Este servidor se conectará al servidor “jitsi” y alojará las grabaciones o transmitirá el video a youtube.
En este documento haré lo siguiente:
- Acomodamos nuestro servidor: Muestro o describo el servidor y el startup para dejarlo a mi gusto y comodidad.
- Acomodar el Dominio: Muestro o describo cómo registrar el dominio para su Jitsi Meet y conseguir los certificados SSH.
- Modificaciones Adicionales: Describo el proceso para configurar un Jitsi Meet en funcionamiento en un servidor, incluidos algunos ajustes. No es necesario instalar Jibri, el servidor Jitsi Meet está listo para usar.
- Solucionar el error del administrador de puertos de Prosody
- Quitar indicador de Audio: Mejora el rendimiento general sacrificando la animación de indicación de audio y todo lo que esta implica.
- Resolución de video y tasa de bits
- Cambios de diseño (que no se sobrescribirá con la actualización)
- Describo el proceso para configurar un Jibri que funcione en un segundo servidor, incluidos algunos ajustes y ajustes.
- Describo el proceso para integrar JITSI y JIBRI, esto requerirá cambios en ambos servidores. Cuando termine, podrá organizar conferencias Jitsi Meet y comenzar a grabar o transmitir.
Startup
El servidor que estoy usando tiene las siguientes características.
OS: Ubuntu 18.04 bionic
Kernel: x86_64 Linux 4.15.0
Uptime: 24m
Packages: 400
Shell: bash 4.4.20
CPU: Intel Xeon E3-1230 v5 @ 4x 3.34GHz
GPU:
RAM: 21MiB / 8192MiB
DISCO SSD: 80 Gb
Primero es verificar que versión tiene instalada por defecto de los programas necesarios.

En mi caso esta instalado Apache2 y necesito Nginx, que funciona mejor con Jitsi , ademas no hay instalación de Java disponible. Por lo tanto comienzo con desinstalar Apache.
systemctl stop apache2
sudo apt-get purge apache2 apache2-utils apache2.2-bin apache2-common
buscamos posibles restos de la instalación
whereis apache2
y borramos cada uno de los directorio remanentes
sudo rm -r /etc/apache2
Instalando Nginx
Primero debemos editar /etc/hostname y colocar el nombre del servidor
sudo nano /etc/hostname
o con hostnamectl de la siguiente forma
hostnamectl set-hostname SU_SERVIDOR
Lo verificamos con
hostname -f
colocamos tambien el nombre de nuestro servidor en /etc/hosts
sudo nano /etc/hosts
o
echo "127.0.0.1 SU_SERVIDOR" >> /etc/hosts
Instalo Nginx
sudo apt install nginx
luego de eso si accede con su navegador web a la url de su servidor deberia ver.

debemos instalar el resto de los requisitos
sudo apt install openjdk-8-jdk-headless sudo apt install -y gnupg2 apt-transport-https
Verifico ahora los requisitos previos

Acomodar el Dominio
Una vez apuntados los DNS (en mi caso lo hice por NIC.AR y mi hosting) debemos generar el pedido de certificado.
Generamos el certificado, en mi caso de la siguiente manera
openssl req -new -newkey rsa:2048 -nodes -keyout mydecursos.online.key -out mydecursos.online.csr
la salida debe ser algo similar a esto

Con el pedido de certificado vamos a la entidad de confianza que contratemos y sacamos el certificado.
una vez que tenemos el certificado lo colocamos en nuestro servidor en algun lugar accesible luego por Jitsi
Instalar NGINX
Añadimos los repositorios
sudo wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add - sudo sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi.list" sudo apt update
apt install nginx -y
Durante la instalación se va a pedir que ingrese el nombre de su hostname

luego pregunta por los certificados, en este caso deberá elegir porque el programa genere los certificados (Podría dar errores de certificado a sus clientes) o usar un certificado propio. (luego le pedirá la ubicación de cada certificado)

A esta altura ya tiene instalado el servidor Jitsi, puede verlo en funcionamiento ingresando desde un navegador web a la dirección de su servidor

para conocer el estado de los servicios
systemctl status jicofo
systemctl status prosody
Modificaciones Adicionales
Error Prosody Portmanager
para evitar el error de prosody portmanager: Error binding encrypte
editar el archivo /etc/prosody/prosody.cfg.lua y agregar antes de
——— Server-wide settings ———- lo siguiente
-- blanks. Good luck, and happy Jabbering!
https_ports = { }
---------- Server-wide settings ----------
Quitar el indicador de Audio y video
Se puede aumentar la performance quitando el indicador de nivel de audio
nano /etc/jitsi/meet/MYEQUIPO-config.js
buscar la seccion de audio descomentar y cambiar false x true :
disableAudioLevels: true,
Con esta configuración, pierde los indicadores / animaciones de nivel de sonido visualmente atractivos en la llamada, pero esto también elimina una gran cantidad de sobrecarga y reescritura de pantalla. En un servidor de dimensiones pobres, esto trae una ganancia de rendimiento notable. Y un mejora provechamiento de recursos.
Cambiar la performance optimizando la resolución de video como se muestra a continuacion
// w3c spec-compliant video constraints to use for video capture. Currently // used by browsers that return true from lib-jitsi-meet's // util#browser#usesNewGumFlow. The constraints are independent from // this config's resolution value. Defaults to requesting an ideal // resolution of 720p. startBitrate: 500, resolution: 720, constraints: { video: { aspectRatio: 16 / 9, height: { ideal: 720, max: 720, min: 240 } } },
Tenía la intención de cambiar el logo. El logotipo se encuentra en el espacio usr / usr / share / jitsi-meet / images /, así que lo reemplacé por el mío. Esto funcionó hasta la próxima actualización, así que encontré hacerlo con una solución alternativa. Subí mi propio logotipo a: /etc/jitsi/meet/lifting/woodworkerlogo.png también subí el favicon a la misma ubicación: /etc/jitsi/meet/lifting/favicon.ico. Descargué el archivo css /usr/share/jitsi-meet/css/all.css y utilicé un servicio en línea (https://www.freeformatter.com/css-beautifier.html 64) para ’embellecer’ el contenido. Cambié el nombre del archivo a myfirewall.css y lo subí también a la ubicación: /etc/jitsi/meet/myfirewall.css. Después de estos preparativos, llegó el momento de modificar NGINX para servir estos archivos desde su nueva ubicación:
modificar el archivo del host en /etc/nginx/sites-available/tusitio.conf
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_vary on;
#
# Agregado para personalizar la imagen de Jitsi
#
location = /css/all.css {
alias /etc/jitsi/meet/lifting/myfirewall.css;
}
location = /images/favicon.ico {
alias /etc/jitsi/meet/lifting/favicon.ico;
}
location = /images/watermark.png {
alias /etc/jitsi/meet/lifting/watermark-myde360.png;
}
#
# Fin del agregado
#
Esto esta a nivel servidor NGINX, asi que no se modifica conlos susesivos Updates de la aplicacion.
Ya tendría que tener un servidor Jitsi funcionando en su dirección https://URL
Instalar y configurar Firewall
apt install ufw -y
Asegúrese de ejecutar estas líneas en este orden para evitar que el cortafuegos bloquee su conexión ssh:
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 10000/udp
ufw enable
Instalación de Jibri en el segundo servidor
En esta parte, describiré mis pasos para obtener una configuración funcional de la grabación de video Jibri. Todos los pasos se basan en la instrucción readme en Github con algunas adiciones y / o modificaciones.
En este documento veremos
Startup
El servidor que estoy usando tiene las siguientes características.
OS: Ubuntu 18.04 bionic
Kernel: x86_64 Linux 4.15.0-106-generic
Uptime: 4d 23h 56m
Packages: 859
Shell: bash 4.4.20
CPU: Intel Xeon E5630 @ 4x 2.533GHz
GPU: svgadrmfb
RAM: 206MiB / 3944MiB
DISCO SSD: 160 Gb

Update server:
apt update && apt upgrade -y
Controlamos que este colocado el nombre de servidor correctamente
hostnamectl
configurar el loopback address
nano /etc/hosts
Tengo 2 entradas para el rango 127.x.x.x:
127.0.1.1 mi_servior
127.0.0.1 localhost
Así que eliminé el primero y me aseguré de tener solo una línea para 127.x.x.x:
127.0.0.1 localhost mi_servidor
Guarde los cambios y regrese a la terminal:
ping "$(hostname)"
Importante, Jibri necesita Java 8
java -version
si la respuesta es : -bash: java: command not found
Instalaré JAVA 8 desde los repositorios de AdoptOpenJDK, primero nos aseguraremos de tener todas las dependencias instaladas:
apt update && apt install wget gnupg software-properties-common -y
Ahora podemos agregar el Repositorio de AdoptOpenJDK:
wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
E instalar AdoptOpenJDK JAVA 8:
apt update && apt install adoptopenjdk-8-hotspot -y
Compruebe la versión de Java
java -version
Deberia ver algo similar a esto
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (AdoptOpenJDK)(build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (AdoptOpenJDK)(build 25.242-b08, mixed mode)
Para algunas aplicaciones, es importante establecer la variable de entorno Java correcta. No estoy seguro de si esto es necesario para Jibri, pero lo haré en cualquier caso, solo por buenas prácticas.
update-alternatives --config java
Debería ver algo similar a esto
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
Nothing to configure.
En este caso me dice que solo hay una versión de java disponible, así que no necesito configurar nada. pero nos muestra la dirección del home java
(En caso de que tenga 2 versiones de Java instaladas, puede intentar configurar la versión 8 como la versión activa).
La salida de la consola devuelta nos muestra la ruta a JAVA 8 y la copiaremos para establecer la variable Variable de entorno de Java:
nano ~/.bash_profile
Pegue la siguiente línea (asegúrese de usar la ruta que se devolvió en el paso anterior)
export JAVA_HOME=/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
Guarde y luego ejecute el archivo:
source ~/.bash_profile
Verifique el Home de Java:
echo $JAVA_HOME
Debera mostrar el mismo que anteriormente agregamos al .bash_profile
/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
Esto se encarga de JAVA 8 para Jibri, ahora podemos seguir los pasos principales del documento de configuración de Jibri en Github con algunas enmiendas cuidadosas …
Paquetes misceláneos
Instalaremos todos los paquetes misceláneos, EXCEPTO default-jre-headless:
apt update && install unzip ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy -y
ALSA and Loopback Device
Configure el módulo que se cargará en el arranque:
echo "snd-aloop" >> /etc/modules
Cargue el módulo en el núcleo en ejecución:
modprobe snd-aloop
Verifique que el módulo ya esté cargado:
lsmod | grep snd_aloop
Esto debería devolver (algo así como):
snd_aloop 28672 1
snd_pcm 114688 1 snd_aloop
snd 94208 5 snd_timer,snd_aloop,snd_pcm
Google Chrome stable & Chromedriver
Instale la última versión estable de Google Chrome:
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 update && apt install google-chrome-stable -y
Agregue el archivo de políticas administradas de Chrome y establezca CommandLineFlagSecurityWarningsEnabled en falso. Ocultará advertencias en Chrome. Puedes configurarlo así:
mkdir -p /etc/opt/chrome/policies/managed
echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >>/etc/opt/chrome/policies/managed/managed_policies.json
Chromedriver también es necesario y puede instalarse así:
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
mv -f ~/chromedriver /usr/local/bin/chromedriver
chown root:root /usr/local/bin/chromedriver
chmod 0755 /usr/local/bin/chromedriver
Agregar el repositorio de Jitsi/Jibri Debian
Los paquetes Jibri se pueden encontrar en el repositorio estable en downloads.jitsi.org 2:
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
Queremos asegurarnos de que el usuario “jibri” sea parte de los grupos necesarios:
usermod -aG adm,audio,video,plugdev jibri
Con estos pasos, ahora tenemos la configuración básica de Jibri, pero el servicio no está activo (todavía).
Antes de iniciar el servicio Jibri, debemos asegurarnos de que ambos servidores “jitsi” y “jibri” se configuren, de modo que “sepan” de la existencia del otro.
Configurando Jitsi y Jibri.
En esta publicación, describiré mis pasos para obtener una configuración funcional de la grabación de video Jibri. Todos los pasos se basan en la instrucción readme en Github con algunas adiciones y / o modificaciones.
- la documentacion de Jibri se encuentra en Github: https://github.com/jitsi/jibri/blob/master/README.md 49
Describiendo los mecanismos (en pocas palabras)
a) Ahora tenemos un servidor Jitsi Meet en funcionamiento y podemos configurar reuniones de videoconferencia con múltiples participantes. Para permitir la grabación de dicha reunión de videoconferencia, necesitaríamos algún tipo de participante para unirse a la reunión en segundo plano como cualquier otro participante y tomar la información de pantalla y audio, mezclarla, comprimirla, formatearla en un archivo que podemos reproducir en un reproductor de video como vlc o hacer lo mismo pero transmitirlo a youtube. Para esto, el equipo de Jitsi ha creado el servidor Jibri.
b) El servidor Jibri se instala con la funcionalidad de pantalla (navegador y controlador de Chrome) y con el software de compresión de audio / video (ffmpeg) y aunque el servidor nunca abre realmente el navegador de Chrome para que podamos verlo, inicia todos los componentes del navegador de Chrome para que pueda usar la misma funcionalidad que cualquier otro participante en nuestra reunión de videoconferencia para iniciar sesión en el servidor Jitsi y participar en segundo plano. Cuando se le dice que realmente grabe o transmita la conferencia, tomará toda la información que también ven los otros participantes y la enviará a los servicios de ffmpeg para su procesamiento.
Configurar Jitsi Meet para permitir que Jibri se conecte y “participe” en cualquier videoconferencia.
En general, tocaremos 3 áreas para esto:
- Prosody (esto como el servidor xmpp en segundo plano. Puede imaginarse que sea similar a un servicio backend de mensajería instantánea)
- Jicofo (este es otro servicio en segundo plano que se encarga de cambiar / retransmitir los procesos entre todos los participantes y el videobridge)
- Jitsi Meet (considere esto como el servicio maestro que se encarga de presentar toda la funcionalidad en su navegador web)
Todo lo que se encuentra debajo de esta sección debe cambiarse en el servidor “jitsi”
Configurando Prosody
Cree el Componente multiusuario interno (MUC) y la entrada del host virtual de la grabadora, inicie sesión en el servidor “jitsi” y:
nano /etc/prosody/conf.avail/meet.myfirewall.org.cfg.lua
At the end of this file, add a dedicated section:
-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.meet.myfirewall.org" "muc"
modules_enabled = {
"ping";
}
storage = "memory"
muc_room_cache_size = 1000
VirtualHost "recorder.meet.myfirewall.org"
modules_enabled = {
"ping";
}
authentication = "internal_plain"
Reload prosody:
/etc/init.d/prosody reload
Create two users for Jibri (user: jibri and user: recorder):
prosodyctl register jibri auth.meet.myfirewall.org JibrisPass
prosodyctl register recorder recorder.meet.myfirewall.org RecordersPass
(Important: take note of these passwords, we will need them later also on server “jibri”!)
Jicofo configuration
Set the Multi User Component (MUC) to look out for Jibri:
nano /etc/jitsi/jicofo/sip-communicator.properties
In this file, add two lines:
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.meet.myfirewall.org
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90

Reload jicofo:
/etc/init.d/jicofo reload
Jitsi Meet configuration
Make sure we have the button for recording and/or streaming in our config:
nano /etc/jitsi/meet/meet.myfirewall.org-config.js
Look for following lines, uncomment the line and set value to ‘true’ or add if the line does not exist:
fileRecordingsEnabled: true, // If you want to enable file recording
liveStreamingEnabled: true, // If you want to enable live streaming
hiddenDomain: 'recorder.meet.myfirewall.org',
Asegúrese de tener disponible la opción de menú para grabación y transmisión:
nano /usr/share/jitsi-meet/interface_config.js
Look for the section TOOLBAR_BUTTONS and make sure that the array contains ‘recordings’ and ‘livestreaming’.image773×566 203 KB
Configure firewall port 5222:
ufw allow 5222/tcp
Esto es todo lo que necesitamos hacer en el servidor “jitsi”.
Ahora pasamos al servidor Jibri
Necesitamos configurar los entornos xmpp y el directorio donde queremos almacenar nuestras grabaciones:
nano /etc/jitsi/jibri/config.json
Change settings according to:
{
"recording_directory":"/srv/recordings",
"finalize_recording_script_path": "/path/to/finalize_recording.sh",
"xmpp_environments": [
{
"name": "prod environment",
"xmpp_server_hosts": [
"meet.myfirewall.org"
],
"xmpp_domain": "meet.myfirewall.org",
"control_login": {
// The domain to use for logging in
"domain": "auth.meet.myfirewall.org",
// The credentials for logging in
"username": "jibri",
"password": "JibrisPass"
},
"control_muc": {
"domain": "internal.auth.meet.myfirewall.org",
"room_name": "JibriBrewery",
"nickname": "jibri-nickname"
},
"call_login": {
"domain": "recorder.meet.myfirewall.org",
"username": "recorder",
"password": "RecordersPass"
},
"room_jid_domain_string_to_strip_from_start": "conference.",
"usage_timeout": "0"
}
]
}
Now we create the directory for the recordings and make sure user ‘jibri’ can write here:
mkdir /srv/recordings
chown jibri:jitsi /srv/recordings
Restart jibri service:
service jibri restart
This is all we need to do on server “jibri”.
Everything above this section needs to be changed on server “jibri”: “recording.myfirewall.org 19”
Testing recording
Once all these changes were in place, I even rebooted both servers. On the server “jibri”, the jibri service does not automatically start, so keep in mind to do so manually if needed.
Now I open my https://meet.myfirewall.org/ 11 and start a meeting ‘test’. Once I Am presented with my videostream, I open the menu and choose ‘Start recording’. After some time to load, the recording was started. So after some seconds, I open the menu again and choose ‘Stop recording’.
On the server, I found the mp4 file of the recording in a sub-folder with a random generated folder-name:
/srv/recordings/oinwsjahyibvtnxk/test_2020-04-16-19-19-20.mp4
Mission accomplished!
Cheers, Igor