Jitsi Meet

Материал из ALT Linux Wiki

Jitsi Meet — веб-приложение на базе технологии WebRTC. Для сигналинга использует XMPP через BOSH с использованием собственного XEP. В системах на базе Альт оно расположено в пакете jitsi-meet-web

Jicofo — XMPP-компонент, модератор видеоконференций. Клиенты договариваются о связи, заходя в общую XMPP-комнату с ним, и обмениваются там XMPP-сообщениями. Имеет HTTP API /about/health для опроса о состоянии сервиса.

Jitsi Videobridge — ключевой компонент системы, abbr title="Selective Forwarding Unit">SFU. Он передаёт видео и аудио между участниками, осуществляя роль посредника, терминирует RTP/RTCP, определяет доступные рамки битрейта в обе стороны на конкретного клиента. Имеет свой внутренний HTTP API для мониторинга (/colibri/debug).

Это SFU, не MCU — он не занимается транскодингом и поэтому потребляет относительно мало CPU.

Jigasi — шлюз для участия в Jitsi-конференциях через SIP-телефонию.

Jibri — appliance для записи конференции. использует Selenium с Chromium внутри (и тянет за собой зависимости на Xorg, icewm, модуль ядра snd-aloop). Ведёт себя как ничего не передающий участник записываемой конференции, но Jicofo и клиенты его держат на особом положении. Также заходит по отдельному аккаунту в специальную XMPP-комнату для рекордеров. Их можно (и нужно!) воткнуть несколько, если планируется вести запись нескольких конференций сразу.

Как развернуть?

Minimal Viable Product

Вам потребуются пакеты prosody, jitsi-meet-prosody, jitsi-meet-web, jicofo, jitsi-videobridge. Для размещения нужны:

  • jitsi-videobridge: хост с доступными портами 10000/udp, 4443/tcp и хорошей пропускной способностью (рекомендуется минимум 100Mbps симметрично)
  • веб-сервер: хост с доступным портом 443/tcp
    • Шаблон:Caution обратите внимание: веб-сервер должен поддерживать HTTPS, иначе браузеры откажутся поддерживать на нём WebRTC. Лучше всего сначала выписать SSL-сертификат, а потом продолжать настройку веб-сервера.
  • xmpp-сервер: хост с доступным портом 5280/tcp для работы XMPP-over-HTTP (BOSH).

Установите пакеты:

apt-get install prosody jitsi-meet-prosody jitsi-meet-web jicofo jitsi-videobridge

Теоретически компоненты могут размещаться на разных машинах; на практике мы не рекомендуем устанавливать prosody и jicofo на разные машины — это может привести к низкой производительности сервиса и большим колебаниям задержки связи.

При настройке будем предполагать, что в качестве базового доменного имени выбрано $DOMAIN.

Настройка XMPP-сервера

В файл /etc/prosody/$DOMAIN.cfg.lua напишите:

plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }

-- domain mapper options, must at least have domain base set to use the mapper
muc_mapper_domain_base = "$DOMAIN";

cross_domain_bosh = false;
consider_bosh_secure = true;

VirtualHost "$DOMAIN"
    authentication = "anonymous"
    --app_id="example_app_id"
    --app_secret="example_app_secret"
    -- Assign this host a certificate for TLS, otherwise it would use the one
    -- set in the global section (if any).
    -- Note that old-style SSL on port 5223 only supports one certificate, and will always
    -- use the global one.
    ssl = {
        key = "/etc/prosody/certs/$DOMAIN.key";
        certificate = "/etc/prosody/certs/$DOMAIN.crt";
    }
    speakerstats_component = "speakerstats.$DOMAIN"
    conference_duration_component = "conferenceduration.$DOMAIN"
    -- we need bosh
    modules_enabled = {
        "bosh";
        "pubsub";
        "ping"; -- Enable mod_ping
        "speakerstats";
        "turncredentials";
        "conference_duration";
    }
    c2s_require_encryption = false

Component "conference.$DOMAIN" "muc"
    storage = "memory"
    modules_enabled = {
        "muc_meeting_id";
        "muc_domain_mapper";
        -- "token_verification";
    }
    admins = { "focus@auth.$DOMAIN" }
    muc_room_locking = false
    muc_room_default_public_jids = true

VirtualHost "auth.$DOMAIN"
    ssl = {
        key = "/etc/prosody/certs/auth.$DOMAIN.key";
        certificate = "/etc/prosody/certs/auth.$DOMAIN.crt";
    }
    authentication = "internal_plain"

-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.$DOMAIN" "muc"
    storage = "memory"
    modules_enabled = {
      "ping";
    }
    admins = { "focus@auth.$DOMAIN", "jvb@auth.$DOMAIN" }
    muc_room_locking = false
    muc_room_default_public_jids = true

Component "focus.$DOMAIN"
    component_secret = "xxx" -- достаточно длинный пароль, он же JICOFO_SECRET

Component "speakerstats.$DOMAIN" "speakerstats_component"
    muc_component = "conference.$DOMAIN"

Component "conferenceduration.$DOMAIN" "conference_duration_component"
    muc_component = "conference.$DOMAIN"

Сгенерируйте сертификаты для виртуалхостов $DOMAIN и auth.$DOMAIN:

prosodyctl cert generate $DOMAIN
prosodyctl cert generate auth.$DOMAIN

Позже их нужно будет зарегистрировать в системе, на которой установлен Jicofo, как доверенные:

ln -s /etc/prosody/certs/$DOMAIN.crt /etc/pki/ca-trust/source/anchors/
ln -s /etc/prosody/certs/auth.$DOMAIN.crt /etc/pki/ca-trust/source/anchors/
update-ca-certs

Настройка Jicofo

Jicofo подключается к XMPP-серверу и как внешний XMPP-компонент, и как юзер-аккаунт с JID focus@auth.$DOMAIN

В /etc/jitsi/jicofo/config укажите:

# Jitsi Conference Focus settings
# sets the host name of the XMPP server
JICOFO_HOST=localhost

# sets the XMPP domain (default: none)
JICOFO_HOSTNAME=cs.msu.ru

# sets the secret used to authenticate as an XMPP component
JICOFO_SECRET=xxx

# overrides the prefix for the XMPP component domain. Default: "focus"
#JICOFO_FOCUS_SUBDOMAIN=focus

# sets the port to use for the XMPP component connection
JICOFO_PORT=5347

# sets the XMPP domain name to use for XMPP user logins
JICOFO_AUTH_DOMAIN=auth.videoconf.cs.msu.ru

# sets the username to use for XMPP user logins
JICOFO_AUTH_USER=focus

# sets the password to use for XMPP user logins
JICOFO_AUTH_PASSWORD="[yyy]"

# extra options to pass to the jicofo daemon
JICOFO_OPTS="${JICOFO_FOCUS_SUBDOMAIN:+ --subdomain=$JICOFO_FOCUS_SUBDOMAIN}"

# adds java system props that are passed to jicofo (default are for home and logging config file)
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jicofo -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/jicofo/logging.properties"

"[yyy]" — достаточно длинный пароль для аккаунта focus@auth.$DOMAIN, который нужно завести на машине с prosody:

prosodyctl register focus auth.$DOMAIN "[yyy]"

В /etc/jitsi/jicofo укажите:

org.jitsi.jicofo.health.ENABLE_HEALTH_CHECKS=true

org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.$DOMAIN


Запустите jicofo:

systemctl start jicofo

Убедитесь, что он подключается к XMPP-серверу:

curl -i localhost:8888/about/health

Так как пока что ни одного Jitsi Videobridge к серверу не подключено, будет код ответа 500 и сообщение No operational bridges available. Если в ответе сообщение об ошибке иного рода — проверьте настройки и связь между prosody и jicofo.

Настройка Jitsi Videobridge (JVB)

В /etc/jitsi/videobridge/config укажите:

# Jitsi Videobridge settings

# extra options to pass to the JVB daemon
JVB_OPTS="--apis=,"


# adds java system props that are passed to jvb (default are for home and logging config file)
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=videobridge -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/videobridge/logging.properties -Dconfig.file=/etc/jitsi/videobridge/application.conf"

Если в файле config есть другие настройки, рекомендуем их убрать — и способ передачи этих настроек, и сами некоторые эти настройки являются устаревшими.

В качестве файлов конфигурации используются /etc/jitsi/videobridge/{application.conf,sip-communicator.properties}.

В файле /etc/jitsi/videobridge/application.conf укажите:

TODO

Подключение SIP-шлюза jigasi

Подключение рекордера jibri

FAQ

Можно ли использовать не prosody, а другой XMPP-сервер?

Краткий ответ: нет.

В комплекте с Jitsi идут модули для расширения функциональности XMPP-сервера prosody, написанные на Lua; они считаются частью продукта Jitsi Meet. В теории, ничего не мешает написать и поддерживать эти модули для вашего XMPP-сервера; одно время проект Jitsi использовал openfire.