Jitsi Meet
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.