3.-Jitsi y Jibri en dos servidores

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 Githubhttps://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md 185
Documento de instalación rápida de Jibri en Githubhttps://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:

  1. Acomodamos nuestro servidor: Muestro o describo el servidor y el startup para dejarlo a mi gusto y comodidad.
    1. instalar Nginx
  2. Acomodar el Dominio: Muestro o describo cómo registrar el dominio para su Jitsi Meet y conseguir los certificados SSH.
  3. 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.
    1. Solucionar el error del administrador de puertos de Prosody
    2. Quitar indicador de Audio: Mejora el rendimiento general sacrificando la animación de indicación de audio y todo lo que esta implica.
    3. Resolución de video y tasa de bits
    4. Cambios de diseño (que no se sobrescribirá con la actualización)
  4. Describo el proceso para configurar un Jibri que funcione en un segundo servidor, incluidos algunos ajustes y ajustes.
  5. 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.

lo saque de
https://support.comodo.com/index.php?/Knowledgebase/Article/View/1/19/csr-generation-using-openssl-apache-wmod_ssl-nginx-os-x

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

  1. Startup

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.

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
image

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

image
Mission accomplished!

Cheers, Igor

Otro sitio más de Los Lucero