Как стать автором
Обновить

Свой сервер видеоконференций Jitsi. Часть 1 (Обновлено)

Время на прочтение14 мин
Количество просмотров47K
Это первая статья, в которой я расскажу, как поднять свой собственный сервер видеоконференций Jitsi-meet. Я планирую выпустить три статьи на эту тему:

  1. Свой сервер видеоконференций Jitsi.
    Jitsi и все необходимые службы работают на одном сервере + сервис Jibri (для записи видеоконференций на отдельном сервере).
  2. Свой высоконагруженный сервис видеоконференций Jitsi.
    Jitsi и все необходимые зависимые службы работают на разных серверах для получения высокой производительности.
  3. Свой мессенджер Matrix-synapse в связке с Jitsi-meet.
    Настройка Matrix на своем сервере и объединение с Jitsi для видеозвонков.

В данной статье я расскажу, как поднять собственный сервер видеоконференций jitsi-meet. Для нормального функционирования мне пришлось собирать информацию по крупицам, общаться с разработчиками данной утилиты, перечитать всю документацию и облазить кучу форумов. Тут я собрал все в один мануал на русском.
В моем случае схема была немного другой, потому что у меня сервер Jitsi и Jibri находятся за NAT, в качестве которого стоит сервер с debian 9 и на котором есть внешний и внутренний IP. Сервисы Jitsi и Jibri также можно разместить на одном сервере, но тогда на него будет большая нагрузка и, следовательно, серверу надо дать больше ресурсов. Ниже я дам мануал, который составил, собирая свою службу (на три сервера), но каждый может преобразовать его под себя в зависимости от верований и убеждений, ну и возможностей конечно.

Итак, подготовительный этап прост и известен каждому, кто «умеет в linux». А если не знаком, то в этих ваших интернетах полно инструкций по развёртыванию linux-системы. Мы же поднимем с вами три debian 9 (jitsi-meet последней стабильной версии больше не поддерживается в debian 9, так что используйте debian 10) сервера (можно использовать другой дистрибутив, просто адаптировав мануал).

Рекомендуемые системные требования:
Для сервера с Jitsi-meet:
4 ядра с ≥ 2.0ГГц и 4 RAM
Для сервера с Jibri:
4 ядра с ≥ 2.0ГГц и 4 RAM
Для сервера с Jitsi и Jibri:
8 ядер с ≥ 2.0ГГц и 8 RAM
Ну, и, естественно, интернет с большой пропускной способностью.
Производительность с разными вариациями характеристик сервера можно посмотреть тут.

Еще одно немаловажное требование — большинство команд надо делать от привилегированного пользователя, поэтому на сервере (на каждом сервере) сразу получим root-права.

# sudo -i

или

# su - root

Сразу хочу отметить тот факт, что сервер под Jibri должен быть без GUI (графического интерфейса) иначе Jibri, который имеет свой xorg, будет конфликтовать и откажется работать (долгие танцы с бубном помогут уладить их конфликт, но зачем все усложнять!?).

NAT-сервер
Если мы будем использовать NAT-сервер, тогда нам нужно настроить на нем безопасность и перенаправление, а для этого мы обратимся к iptables (хотя тут опять-таки дело вкуса). Создаем скрипт, которым настроим iptables:

# touch iptables_rules.sh

Дальше открываем файл, вставляем и корректируем под свои значения:

iptables_rules.sh
#! /bin/bash

IPT="iptables"
## Внешний интерфейс
WAN=ens224
WAN_IP=ВАШ_внешний_IP
## Внутренний интерфейс
LAN1=ens192
LAN1_IP=ВАШ_внутренний_IP
LAN1_IP_RANGE=192.168.0.0/24
LAN2=IP_Jitsi

## Очищаем все цепочки перед применением новых правил
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X

## Блокируем весь трафик, который не соответствует ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

## Разрешаем весь трафик в локалхост и локальной сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN1 -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN1 -j ACCEPT

## Этот блок разрешает icmp-запросы (пинговать сервер) (опционально)
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

## Открываем доступ в интернет самому серверу
$IPT -A OUTPUT -o $WAN -j ACCEPT
#$IPT -A INPUT -i $WAN -j ACCEPT

## Разрешаем все установленные соединения и дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

## Защита от наиболее распространенных сетевых атак. (опционально)
## Отбрасываем все пакеты без статуса (опционально)
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

## Блокируем нулевые пакеты (опционально)
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

## Закрываемся от syn-flood атак (опционально)
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

## Запрет доступа с определенных IP (опционально)
#$IPT -A INPUT -s ipaddres -j REJECT

## Разрешаем доступ в интернет из локальной сети
$IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT

## Запрещаем доступ из интернета в локальную сеть (опционально)
#$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT

## Чтобы в локальной сети был интернет включаем nat
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
##Должен быть включен ip forwarding

## Разрешаем ssh (порт 22 - это порт по умолчанию для ssh соединения, если вы его меняли, то обязательно значение 22 надо заменить своим, иначе будет потерян доступ к серверу)
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

## Перенаправление трафика на сервер JITSI
$IPT -A FORWARD -i $WAN -d $LAN2 -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A FORWARD -i $WAN -d $LAN2 -p tcp -m tcp --dport 443 -j ACCEPT
$IPT -A FORWARD -i $WAN -d $LAN2 -p udp -m udp --dport 10000 -j ACCEPT
$IPT -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to $LAN2
$IPT -t nat -A PREROUTING -i $WAN -p tcp --dport 443 -j DNAT --to $LAN2
$IPT -t nat -A PREROUTING -i $WAN -p udp --dport 10000 -j DNAT --to $LAN2
$IPT -t nat -A POSTROUTING -j MASQUERADE

Сохраняем и закрываем файл.

После этого надо сделать файл исполняемым и запустить:

# chmod +x iptables_rules.sh
# ./iptables_rules.sh

Правила мы установили, однако после перезагрузки сервера они пропадут. Для того, чтобы применить их перманентно, выполним следующее:

# iptables-save > /etc/iptables-conf/iptables_rules.ipv4

Откроем файл и вставим в конец файла правило для восстановления настроек:

# vim /etc/network/interfaces

post-up /sbin/iptables-restore < /etc/iptables-conf/iptables_rules.ipv4

Ну, и, естественно, надо разрешить пересылку пакетов, открываем файл:

# vim /etc/sysctl.conf

Находим строку и раскомментируем (если стоит «0», то меняем на «1»)

net.ipv4.ip_forward = 1

Применяем правила:

# sysctl -p


Настраиваем сервер Jitsi
Первый сервер готов, и мы переходим ко второму серверу — Jitsi. Тут опять надо разрешить пересылку пакетов — открываем файл:

# vim /etc/sysctl.conf

Находим строку и раскомментируем (если стоит «0», то меняем на «1»)

net.ipv4.ip_forward = 1

Применяем правила:

# sysctl -p

Установим необходимые утилиты:

# apt-get update
# apt-get install -y ufw iftop htop wget net-tools vim

Далее настроим ufw (нам нет нужды прописывать похожие правила как на предыдущем сервере, а достаточно просто открыть некоторые порты):

# ufw allow 22
# ufw allow 80/tcp
# ufw allow 443/tcp
# ufw allow 10000/udp
# ufw enable

Будет запрошено подтверждение, вводим «y» (порт 22 — это порт по умолчанию для ssh соединения, если вы его меняли, то обязательно значение 22 надо заменить своим, иначе будет потерян доступ к серверу).

Далее необходимо настроить имя хоста:

# hostnamectl set-hostname jitsi.mydnsname.com

Стоит отметить, что для полноценного использования Jitsi-meet необходимо доменное имя и белый IP, к которому привязано имя.

Переходим к установке.

# apt install gnupg2 -y
# echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
# wget -qO -  https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -

# apt-get install -y apt-transport-https
# apt-get update

Если у вас еще не установлен веб-сервер, то самое время это сделать. Выберите сами apache2 или nginx, и go:

# apt-get -y install nginx (apache2)
# apt-get -y install jitsi-meet

В процессе установки будет запрошен IP сервера или его dns имя. Если сервер должен работать с мобильными приложениями, то должно быть dns имя и ssl сертификат. Далее утилита спросит про сертификат ( первый вариант применим для автоматического подписания сертификата, при условии что IP адрес белый и есть dns-имя, второй – если уже есть сертификат, но тогда надо будет еще указать пути, где лежат сертификаты). Важное замечание: для подключения андроид устройств нужно добавить третий сертификат и прописать к нему путь в apache/nginx.

По завершению установки мы перейдем к настройке.

Как уже и говорил, надо добавить еще один ssl-сертификат для устройств android. Для этого мы в конфигурацию добавим путь к этому сертификату (скажу сразу, что у вас пути могут отличаться, если вы делали это другим способом). Открываем файл конфигурации (apache2 или nginx):

Apache2:
# vim /etc/apache2/saites-avalieble/example.org.conf

Добавляем строку (внимательно смотрим пути и подставляем свои значения):

SSLCertificateChainFile /etc/ssl/example.org/SectigoRSADomainValidationSecureServerCA.crt

Должно получиться так:

SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.crt
SSLCertificateChainFile /etc/ssl/jitsi.dnsname.com/SectigoRSADomainValidationSecureServerCA.crt
SSLCertificateKeyFile /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.key
SSLCipherSuite "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED"
SSLHonorCipherOrder on
Header set Strict-Transport-Security "max-age=31536000"

Сохраняем и закрываем файл.

Nginx:
# vim  /etc/nginx/sites-available/jitsi.dnsname.com.conf

# Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers off;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:10m;  # about 40000 sessions
    ssl_session_tickets off;

    add_header Strict-Transport-Security "max-age=63072000" always;
    ssl_certificate /etc/ssl/jitsi.dnsname.com/fullchain.pem; 
    ssl_certificate_key /etc/ssl/jitsi.dnsname.com/privkey.pem; 

    root /usr/share/jitsi-meet;

Сохраняем и закрываем файл.

Для nginx мы не указываем отдельный сертификат, а объединяем два сертификата в один:

# cat /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.crt /etc/ssl/jitsi.dnsname.com/SectigoRSADomainValidationSecureServerCA.crt >> /etc/ssl/jitsi.dnsname.com/fullchain.pem


Проверить цепочку сертификатов можно тут.

Let's Encrypt
Для создания сертификата let's encrypt выполним следующее:
Идем в /etc/nginx/sites-available/jitsi.dnsname.com.conf и комментируем первую строку (для apache2 меняем путь).
server_names_hash_bucket_size 64;


# apt install -y python3-certbot-nginx && certbot --nginx -d dnsname.com

Обратите внимание, что данный сертификат валидный везде и бесплатный, но выдается он только на три месяца. После его надо обновить.
После выпуска сертификата обратно раскомментируем
server_names_hash_bucket_size 64;



Далее настраиваем систему. Добавляем туда следующее (отметим, что в локальный адрес прописываем адрес сервера Jitsi, а в публичный — белый IP, у нас это IP адрес первого сервера):

# vim /etc/jitsi/videobridge/sip-communicator.properties

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>

Комментируем следующую строку:

org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES

Далее для поддержания конференции на большое количество людей (более 100) добавляем следующие строки в файл:

# vim /etc/systemd/system.conf

system.conf
DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
DefaultTasksMax=65000

Сохраняем и закрываем файл.

Далее:

# apt-get -y install jigasi   #optional
# systemctl daemon-reload
# systemctl restart jitsi-videobridge2
# cat /proc/`cat /var/run/jitsi-videobridge/jitsi-videobridge.pid`/limits


Настраиваем сервер Jibri
Теперь нам осталось только поднять сервер с Jibri. Это опционально и нужно только для того, чтобы иметь возможность транслировать конференцию или вести запись конференции.
Jibri можно поставить рядом с Jitsi на одном сервере, но тогда на сервер будет идти бОльшая нагрузка. Мы сделаем это на отдельном сервере, но практически те же самые шаги надо предпринять, чтобы поднять Jibri рядом с Jitsi.

И так, приступим.

Тут опять надо разрешить пересылку пакетов, открываем файл:

# vim /etc/sysctl.conf

Находим строку и раскомментируем (если стоит «0», то меняем на «1»)

net.ipv4.ip_forward = 1

Применяем правила:

# sysctl -p

На следующем шаге нам необходимо убедиться, что модуль обратной связи доступен и работает:

# echo "snd-aloop" >> /etc/modules
# modprobe snd-aloop
# lsmod | grep snd_aloop

Далее установим стабильную версию 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-get -y update
# apt-get -y install google-chrome-stable

Создадим директорию и пропишем политики:

# mkdir -p /etc/opt/chrome/policies/managed
# echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >> /etc/opt/chrome/policies/managed/managed_policies.json

Скачаем и установим chromedriver:

# 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

Установим зависимости и необходимые пакеты:

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

Теперь устанавливаем Jibri:

Если установка на сервер Jitsi
# apt-get install -y jibri=8.0-121*


Установка на отдельный сервер
# 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-get update
# apt-get install -y jibri=8.0-121*


Далее необходимо добавить Jibri в группы пользователей:

# usermod -aG adm,audio,video,plugdev jibri

Java8
Для работы Jibri (версии ниже 8.0-137-g260cee3-1) необходима Java 8:
# 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 update
# apt-get install -y adoptopenjdk-8-hotspot

Нужно настроить Java 8 по умолчанию для Jibri. Для этого открываем файл и заменяем слово «java» на полный путь:

# vim /opt/jitsi/jibri/launch.sh

/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java


Если версия Jibri 8.0-137-g260cee3-1 и выше, то пункт с Java 8 пропускаем, там уже все автоматом установится (Java 11). Выбрать нужную версию пакетов можно тут

Для хранения видео нам надо отвести на сервере специальную директорию. Для этого мы создадим отдельную директорию (по желанию можно создать другую директорию, ее надо будет указать в конфигурации):

# mkdir /srv/recordings

Дадим Jibri права на нее и сделаем владельцем:

# chown jibri:jibri /srv/recordings

Далее мы настроим Jitsi-сервер для того, чтобы он знал о существовании Jibri и дадим все необходимые настройки и разрешения. Если сервис Jibri на отдельном сервере, тогда переходим на сервер Jitsi.

Начнем с конфигурации Prosody. Открываем файл и вставляем в конец файла с подстановкой своих значений:

# vim /etc/prosody/conf.avail/jitsi.dnsname.com.cfg.lua

jitsi.dnsname.com.cfg.lua
-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.jitsi.dnsname.com" "muc"
    modules_enabled = {
        "ping";
    }
    storage = "memory"
    muc_room_cache_size = 1000
    
VirtualHost "recorder.jitsi.dnsname.com"
    modules_enabled = {
        "ping";
    }
    authentication = "internal_plain"


Теперь создадим учетные записи для пользователей «jibri» и «recorder» (пароли, которые мы тут установим, понадобятся нам далее):

# prosodyctl register jibri auth.jitsi.dnsname.com PAsswDJibRI
# prosodyctl register recorder recorder.jitsi.dnsname.com PaSSwdReCORD

Следующим нашим действием станет прописывание конфигурации Jicofo. Откроем и добавим в файл следующие строки:

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

jicofo/sim-communicator-properties
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.jitsi.dnsname.com
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90


Далее настроим Jitsi-meet. Добавим/раскомментируем строки в файле:

# vim /etc/jitsi/meet/jitsi.dnsname.com-config.js

config.js
fileRecordingsEnabled: true, 
liveStreamingEnabled: true, 
hiddenDomain: 'recorder.jitsi.dnsname.com',


Хочу обратить внимание, что следующий шаг необходимо выполнить только в том случае, когда сервис Jibri находится на отдельном сервере.

Ранее мы уже установили на сервере Jitsi ufw и открыли порты 22, 80, 443. Сейчас нам надо открыть еще порт 5222, для этого:

# ufw allow 5222/tcp

Теперь вернемся на сервер Jibri и добавим в файл jibri.conf следующую конфигурацию (не забываем подставлять свои значения, тут же нам надо указать и пароли для «jibri» и «recorder»):

# vim /etc/jitsi/jibri/jibri.conf

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 = ["jitsi.dnsname.com"]
                xmpp-domain = "jitsi.dnsname.com"

                control-muc {
                    domain = "internal.auth.jitsi.dnsname.com"
                    room-name = "JibriBrewery"
                    nickname = "jibri-nickname"
                }

                control-login {
                    domain = "auth.jitsi.dnsname.com"
                    username = "jibri"
                    password = "PAsswDJibRI"
                }

                call-login {
                    domain = "recorder.jitsi.dnsname.com"
                    username = "recorder"
                    password = "PaSSwdReCORD"
                }

                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",
      "--ignore-certificate-errors"
    ]
  }
  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
  }
}


Теперь нам осталось только перезапустить систему. Для этого введем следующие две команды: первую на сервере Jitsi, а вторую — на Jibri соответственно (если оба сервиса стоят на одном сервере, то обе команды ввести на одном сервере):

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


Вот и готово. Теперь можно перейти в браузере на jitsi.dnsname.com запустить конференцию и включить ее запись. Видеофайлы можно найти на сервере Jibri в директории /srv/recordings. Забрать их с сервера можно множеством способов, я оставлю это на ваш полет фантазии, подскажу лишь несколько:

  1. Настроить проброс портов (если сервер Jibri вы поставили за NAT), затем подключиться к серверу, например через WinSCP, и стянуть файл себе. То же самое можно сделать, только без проброса портов, если Jibri не за NAT и имеет внешний IP.
  2. С помощью утилиты scp.

Сообщество Jitsi. Тут же взял мануал для Jibri.

Сервера поднимал тут. Еще использую сервера здесь, данный хостинг имеет большое разнообразие локаций по приемлемым ценам.

Благодарю за внимание!

Благодарю Алексея, Дарью и Владислава за внесенные правки.

Свой мессенджер Matrix-synapse в связке с Jitsi-meet. Часть 3

Jitsi-meet: авторизация по JWT-токену
Теги:
Хабы:
Всего голосов 18: ↑18 и ↓0+18
Комментарии45

Публикации

Истории

Работа

Ближайшие события