Специфика работы Jibri такова, что один экземпляр этой службы может записывать только одну конференцию. Это происходит из-за того, что при нажатии кнопки "Начать запись" Jibri подключается к конференции как участник и после этого записывает видео. Чтобы решить эту проблему и не плодить при этом серверы с Jibri будем использовать docker-контейнеры.
Напомню, что Jitsi Meet установлен на Ubuntu 18.04 с адресом meet.oldfag.ru. На этот же сервер установим Docker Comunity Edition, где и будем запускать контейнеры с Jibri, чтобы ресурсы сервера не простаивали.
Однако если запускать контейнеры на другой машине, то в последовательности действий абсолютно ничего не изменится.
Описание настройки, для удобства, разделю на следующие этапы:
- настройка Prosody
- настройка Jicofo
- настройка интерфейса Jitsi Meet
- настройка ОС, на которой установлен Jitsi Meet
- установка docker, запуск и настройка сервиса Jibri
Так как подходящего способа получить количество активных комнат на сервере я так и не нашёл, плагин для Prosody mod_muc_size мне победить не удалось, а так же не нашлось способа контролировать проставивают ли сейчас экземпляры Jibri в контейнерах и останавливать таковые, то просто буду запускать 5 экземпляров службы, т.к. с вероятностью, близкой к 100%, на данном сервере не будет запущено более 5 видеоконференций одновременно.
Предполагается, что все команды выполняются от имени пользователя с повышенными полномочиями, например через
sudo -sИнструкция по настройке служб Jitsi Meet для использования Jibri есть на GitHub Jitsi
Начнём с того, что настроим ядро всей системы - jabber-сервер Prosody.
Откроем файл конфигурации нашего сервера
nano /etc/prosody/conf.avail/meet.oldfag.ru.cfg.luaи добавим ещё один виртуальный хост
VirtualHost "recorder.meet.oldfag.ru"
modules_enabled = {
"ping";
}
authentication = "internal_plain"
а так же внесём изменения в уже существующую секцию
-- internal muc component
Component "internal.auth.meet.oldfag.ru" "muc"
storage = "none"
modules_enabled = {
"ping";
}
admins = { "focus@auth.meet.oldfag.ru", "jvb@auth.meet.oldfag.ru" }
muc_room_locking = false
muc_room_default_public_jids = true
muc_room_cache_size = 1000 <<==== вот эту строку добавляем
Создадим на Prosody двух локальных пользователей, одного для коммуникации с Jibri, отправки ему команд и получения его статуса - jibri,
второго для непосредственно подключения к конференциям и записи видео - recorder.
prosodyctl register jibri auth.meet.oldfag.ru jibri-auth-strong-pass prosodyctl register recorder recorder.meet.oldfag.ru jibri-recorder-strong-passНастройка закончена, перезапускаем службу для применения настроек.
systemctl restart prosodyСлужбу можно перезапустить так же и с использованием prosodyctl
prosodyctl restartПереходим к настройке модератора конференций - Jicofo (JItsi COnference FOcus).
Откроем файл /etc/jitsi/jicofo/sip-communicator.properties и добавим строки
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.meet.oldfag.ru org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90Сохраним изменения и перезапустим службу
systemctl restart jicofoВ интерфейс Jitsi Meet нужно добавить кнопки для записи и трансляции видео, для этого открываем файл /etc/jitsi/meet/meet.oldfag.ru-config.js, переходим в секцию Recording и меняем строки
// fileRecordingsEnabled: false,
// liveStreamingEnabled: false,
на
fileRecordingsEnabled: true,
liveStreamingEnabled: true,
а так же добавляем строку
hiddenDomain: 'recorder.meet.oldfag.ru',
Кроме изменения настроек сервисов, так же нужно добавить ALSA-loopback устройства в ОС, на которой запущен сервис Jitsi Meet.Количество этих устройств должно быть не меньше количества экземпляров Jibri, которые планируется использовать. В данном случае их будет создано 5 штук.
Инструкция по их настройке есть на GitHub Jitsi.
Обновим установленные пакеты и установим дополнительные драйверы
apt update && apt upgrade -y apt install linux-image-extra-virtual -yсоздадим 5 устройств для захвата
echo "options snd-aloop enable=1,1,1,1,1 index=0,1,2,3,4" > /etc/modprobe.d/alsa-loopback.conf
добавим загрузку модуля при старте системы
echo "snd-aloop" >> /etc/modules
и загрузим модуль ядра в текущем сеансе, без перезагрузки системы
modprobe snd_aloopПроверим, что модуль загружен
lsmod | grep snd_aloopЕсли всё хорошо, то ответ будет таким
snd_aloop 24576 0 snd_pcm 98304 1 snd_aloop snd 81920 3 snd_timer,snd_aloop,snd_pcmА теперь последнее по очереди, но не по значению - насройка docker и запуск контейнеров Jibri.
Для начала установим docker согласно инструкции.
Добавим ключ безопасности репозитория
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -и сам репозиторий
add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
Обновим список доступных пакетов и установим необходимые
apt update && apt install docker-ce docker-ce-cli containerd.io docker-compose -yПосле того, как всё установится можно проверить что всё работает, запустив тестовый контейнер
docker run hello-worldОбраз будет загружен из Docker Hub и запущен, если всё хорошо, то в консоли отобразится сообщение
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
Не забываем добавить автозагрузку
systemctl enable docker
Создадим каталог хранения конфигурационных файлов для контейнеров
mkdir /etc/jibri-dockerа в нём файл конфигурации контейнера
touch /etc/jibri-docker/jibri.ymlсо следующим содержанием
version: '3'
services:
jibri:
image: jitsi/jibri
volumes:
- ${CONFIG}/jibri:/config
- /dev/shm:/dev/shm
cap_add:
- SYS_ADMIN
- NET_BIND_SERVICE
devices:
- /dev/snd:/dev/snd
environment:
- XMPP_AUTH_DOMAIN
- XMPP_INTERNAL_MUC_DOMAIN
- XMPP_RECORDER_DOMAIN
- XMPP_SERVER
- XMPP_DOMAIN
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_BREWERY_MUC
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- JIBRI_RECORDING_DIR
- JIBRI_FINALIZE_RECORDING_SCRIPT_PATH
- JIBRI_STRIP_DOMAIN_JID
- JIBRI_LOGS_DIR
- DISPLAY=:0
- TZ
В yml-файле не должно быть табуляций, все отступы создаются только пробелами.Тут же создадим файл с переменными окружения
touch /etc/jibri-docker/.envкоторый будет содержать значения имён и паролей пользователей prosody, созданных ранее, адреса подключения и другие параметры.
# JIBRI CONFIG
# Internal XMPP domain for authenticated services
XMPP_AUTH_DOMAIN=auth.meet.oldfag.ru
# XMPP domain for the internal MUC used for jibri, jigasi and jvb pools
XMPP_INTERNAL_MUC_DOMAIN=internal.auth.meet.oldfag.ru
# XMPP domain for the jibri recorder
XMPP_RECORDER_DOMAIN=recorder.meet.oldfag.ru
# Internal XMPP server
XMPP_SERVER=meet.oldfag.ru
# Internal XMPP domain
XMPP_DOMAIN=meet.oldfag.ru
# XMPP user for Jibri client connections
JIBRI_XMPP_USER=jibri
# XMPP password for Jibri client connections
JIBRI_XMPP_PASSWORD=jibri-auth-strong-pass
# MUC name for the Jibri pool
JIBRI_BREWERY_MUC=jibribrewery
# XMPP recorder user for Jibri client connections
JIBRI_RECORDER_USER=recorder
# XMPP recorder password for Jibri client connections
JIBRI_RECORDER_PASSWORD=jibri-recorder-strong-pass
# Directory for recordings inside Jibri container
JIBRI_RECORDING_DIR=/config/recordings
# The finalizing script. Will run after recording is complete
JIBRI_FINALIZE_RECORDING_SCRIPT_PATH=/config/finalize.sh
# When jibri gets a request to start a service for a room, the room
# jid will look like: roomName@optional.prefixes.subdomain.xmpp_domain
# We'll build the url for the call by transforming that into:
# https://xmpp_domain/subdomain/roomName
# So if there are any prefixes in the jid (like jitsi meet, which
# has its participants join a muc at conference.xmpp_domain) then
# list that prefix here so it can be stripped out to generate
# the call url correctly
JIBRI_STRIP_DOMAIN_JID=conference
# Directory for logs inside Jibri container
JIBRI_LOGS_DIR=/config/logs
DISPLAY=:0=
Пробуем запустить контейнер
cd /etc/jibri-docker
docker-compose -f jibri.yml up
Если ufw активен, то тут можно будет увидеть ошибку
org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: 'meet.oldfag.ru:5222' failed because: meet.oldfag.ru/192.168.1.147 exception: java.net.SocketTimeoutException: connect timed out
Останавливаем контейнер (Ctlr+C).
Добавляем правило для 5222 порта, это порт, используемый Jicofo
ufw allow 5222Запускаем контейнер снова. Если всё хорошо, то в консоли можно будет увидеть
jibri_1 | 2020-10-22 09:48:44.648 INFO: [27] org.jitsi.xmpp.mucclient.MucClient.log() Joined MUC: jibribrewery@internal.auth.meet.oldfag.ruОпять останавливаем контейнер и переходим к тому, что будет запущено 5 контейнеров, для одновременной записи 5 конференций. Если нужно больше 5, то нужно не забыть кроме увеличения количества контейнеров увеличить количество ALSA-loopback устройств на сервере Jitsi.
Запустить несколько контейнеров сразу можно с помощью ключа --scale
docker-compose -f jibri.yml up --scale jibri=5 -d
jibri после ключа --scale в этой команде - имя службы, указанное в yml-файле, ключ -d нужен для того, чтобы контейнер запустился
без вывода всего и вся в консоль.После этой команды будет запущено 5 контейнеров, но при этом на Jitsi будет доступна запись только одной конференции одновременно. Это происходит из-за того, что для каждого экземпляра Jibri нужно указать своё ALSA-loopback устройство.
Чтобы это сделать выполним команды
docker exec jibridocker_jibri_1 sed -i 's/Loopback/0/g' /home/jibri/.asoundrc
docker exec jibridocker_jibri_2 sed -i 's/Loopback/1/g' /home/jibri/.asoundrc
docker exec jibridocker_jibri_3 sed -i 's/Loopback/2/g' /home/jibri/.asoundrc
docker exec jibridocker_jibri_4 sed -i 's/Loopback/3/g' /home/jibri/.asoundrc
docker exec jibridocker_jibri_5 sed -i 's/Loopback/4/g' /home/jibri/.asoundrc
и перезапустим контейнеры
docker restart jibridocker_jibri_1 jibridocker_jibri_2 jibridocker_jibri_3 jibridocker_jibri_4 jibridocker_jibri_5Команды настройки устройств ALSA-loopback и перезапуска контейнеров лучше записать в отдельный исполняемый файл, т.к. они могут понадобится при неосторожном удалении контейнеров или обновлении образа Jibri из Docker Hub.
Чтобы контейнеры поднимались при старте системы нужно выполнить команду
docker update --restart always <CONTAINER ID 1> <CONTAINER ID 2> ... <CONTAINER ID 5>Идентификатор контейнера можно узнать выполнив команду
docker ps -a
Чтобы остановить контейнеры, если это необходимо, нужно использовать команду
docker-compose -f jibri.yml stop
а не
docker-compose -f jibri.yml down
т.к. последняя не только остановит контейнеры, но и удалит их, а следовательно и конфигурацию устройств в них.Всё готово. Можно создать конференцию, открыть меню конференции, нажав на три точки в правом нижнем углу, выбрать пункт «Начать запись» и услышать заветное: "Recording is on."
Записи видеоконференций хранятся в /jibri/recordings/. Для постобработки записи (перемещение, публикация и т.д.) можно создать скрипт /jibri/finalize.sh, его имя может быть любым, но оно должно быть указано в /etc/jibri-docker/.env в параметре JIBRI_FINALIZE_RECORDING_SCRIPT_PATH. Его пример можно найти на GitHub Jitsi
Привет.
ОтветитьУдалитьПри запуске compose ошибку выдает:
WARNING: The CONFIG variable is not set. Defaulting to a blank string.
Pulling jibri (jitsi/jibri:)...
Что может быть?
Если в вашем дистрибутиве docker-compose не переваривает необъявленные переменные, то есть два пути решения:
Удалить1) избавиться от использования переменной CONFIG в yml-файле, и объявить маппинг как
volumes:
- /jibri:/config
2) объявить переменную в файле .env
CONFIG=/somedir
Но при этом каталог с записями переместится в /somedir/jibri/recordings
Здравствуйте. Три раза проходила полный путь настройки (вдруг опечатка или что-то забыла) и все три раза запинаюсь на этапе запуска контейнера:
ОтветитьУдалитьERROR: yaml.parser.ParserError: while parsing a block mapping
in "./jibri.yml", line 1, column 1
expected , but found ''
in "./jibri.yml", line 3, column 5
Как думаете, в чем может быть проблема?
ERROR: yaml.parser.ParserError: while parsing a block mapping
Удалитьin "./jibri.yml", line 1, column 1
expected < block end > , but found ' < block mapping start > '
in "./jibri.yml", line 3, column 5
Сообщение об ошибке говорит о том, что нарушен синтаксис в файле jibri.yml. Где-то поставлен лишний пробел или знак табуляции, которые yaml вообще не переваривает. Можете привести полностью содержимое файла?
Удалитьversion: '3'
Удалитьservices:
jibri:
image: jitsi/jibri
volumes:
- /jibri:/config
- /dev/shm:/dev/shm
cap_add:
- SYS_ADMIN
- NET_BIND_SERVICE
devices:
- /dev/snd:/dev/snd
environment:
- XMPP_AUTH_DOMAIN
- XMPP_INTERNAL_MUC_DOMAIN
- XMPP_RECORDER_DOMAIN
- XMPP_SERVER
- XMPP_DOMAIN
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_BREWERY_MUC
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- JIBRI_RECORDING_DIR
- JIBRI_FINALIZE_RECORDING_SCRIPT_PATH
- JIBRI_STRIP_DOMAIN_JID
- JIBRI_LOGS_DIR
- DISPLAY=:0
- TZ
Тут съелись пробелы, но они в исходном файле есть. Собственно, делала полную копи-пасту по Вашей инструкции через nano. Вот эта строчка "- /jibri:/config" - это уже сразу эксперимент, про который Вы писали в своем комментарии выше, изначально я пробовала через исходный "- ${CONFIG}/jibri:/config". Выходит та же ошибка. Ставлю только пробелы, никаких табуляций. Пустую строку удаляла, потом вновь восстанавливала, ошибка появляется.
Удалитьversion: '3'
Удалитьservices:
jibri:
image: jitsi/jibri
volumes:
- /jibri:/config
- /dev/shm:/dev/shm
cap_add:
- SYS_ADMIN
- NET_BIND_SERVICE
devices:
- /dev/snd:/dev/snd
environment:
- XMPP_AUTH_DOMAIN
- XMPP_INTERNAL_MUC_DOMAIN
- XMPP_RECORDER_DOMAIN
- XMPP_SERVER
- XMPP_DOMAIN
- JIBRI_XMPP_USER
- JIBRI_XMPP_PASSWORD
- JIBRI_BREWERY_MUC
- JIBRI_RECORDER_USER
- JIBRI_RECORDER_PASSWORD
- JIBRI_RECORDING_DIR
- JIBRI_FINALIZE_RECORDING_SCRIPT_PATH
- JIBRI_STRIP_DOMAIN_JID
- JIBRI_LOGS_DIR
- DISPLAY=:0
- TZ
Все равно пробелы съедает, даже если в ручную тут в форме попытаться их воспроизвести.
УдалитьОбновил содержимое статьи, касающееся файла jibri.yml. Декоратор кода наставил туда лишних пробелов. Если его снова скопировать и вставить, то всё должно получиться.
УдалитьСпасибо! Получилось!
УдалитьДоброе утро. Полностью повторила инструкцию, все контрольные точки отражались как в статье (т.е. то, что я должна была увидеть - видела). Опечатки проверила - нет. Контейнеры все подняты. Однако при нажатии на кнопку записи - "Запись невозможна". Jicofo проверила, опечаток нет. Установку Jibri я брала из мануала - https://cyborg.cc/?p=624 . Единственное, что я заметила, это то, что когда Вы настраивали Jitsi Meet, то использовали Active Directory для аутентификации, а я использовала аутентификацию через логин/пароль, введённый в систему (internal_plain). Это может как-то повлиять? Просто уже не знаю, в какую сторону копать и куда смотреть.
ОтветитьУдалитьВ статье описан запуск Jibri в контейнере, отдельная установка и настройка jibri не требуется при этом. Возможно возникла путаница из-за использования двух статей для разных реализаций сервиса одновременно.
УдалитьЕсли речь про контейнеры, то нужно запустить его без ключа -d и проверить, нет ли проблем с файрволлом.
Логи Jicofo можно посмотреть в /var/log/jitsi/jicofo.log, возможно там что-то полезное найдётся.
Первично делала без установки, четко как в инструкции. Потом подумала, что проблема в том, что не ставила, ибо в логах было то, что нет Jibri. Сейчас попробовала через установку. Но результат один и тот же. Зашла в логи, действительно, Jitsifo не видит Jibri
УдалитьJicofo 2021-01-13 09:23:58.368 SEVERE: [212] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2021-01-13 09:23:58.368 INFO: [212] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Failed to start a Jibri session, no Jibris available
Фаервол простукала, 5222 порт открыт и по ipv4, и по ipv6. Контейнеры выдают такие предупреждения:
2021-01-12 08:14:13.363 WARNING: [26] org.jitsi.xmpp.mucclient.MucClient.log() [MucClient id=meet.****.ru hostname=meet.****.ru] error connecting
jibri_1 | org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: 'meet.****.ru:5222' failed because: meet.****.ru/127.0.1.1 exception: java.net.ConnectException: Connection refused (Connection refused)
Похоже проблема в файрволле, а получается ли у Jibri подключиться к Jitsi, если файрволл вообще отключить на время?
УдалитьПолностью отключила фаервол (disable), запустила конференцию, новую комнату и попробовала запись. Нет, выдает ровно то же самое. В логах от сегодняшнего числа аналогичные записи со вчерашним.
УдалитьПодняла фаервол и проверила его текущие правила, все, как положено для работы jitsi meet и jibri...
Состояние: активен
В Действие Из
- -------- --
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
4443/tcp ALLOW Anywhere
10000:20000/udp ALLOW Anywhere
5222 ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
4443/tcp (v6) ALLOW Anywhere (v6)
10000:20000/udp (v6) ALLOW Anywhere (v6)
5222 (v6) ALLOW Anywhere (v6)
jitsi и контейнер jibri запущены на одном сервере?
УдалитьЕсли ли возможность обратиться telnet'ом к серверу jitsi на порт 5222, по доменному имени (meet.****.ru) и по ip (127.0.1.1)?
Если telnet'ом удастся подключиться, то нужно проверить имя пользователя и пароль учётных записей jibri и recorder на prosody, а так же их соответствие в файле /etc/jibri-docker/.env
Удалить>>jitsi и контейнер jibri запущены на одном сервере?
УдалитьДа, я все делаю с одной машины.
Обратилась. С одной стороны, связь не рвет, но и нет ответа как от SSH:
root@meet:/home/administrator# telnet meet.*****.ru 5222
Trying 127.0.1.1...
Connected to meet.*****.ru.
Escape character is '^]'.
^CConnection closed by foreign host.
root@meet:/home/administrator# telnet 127.0.1.1 5222
Trying 127.0.1.1...
Connected to 127.0.1.1.
Escape character is '^]'.
^CConnection closed by foreign host.
Попробовала через телнет обратиться к стандартной проверке:
Вот тут похожая ошибка, что и в контейнерах:
root@meet:/home/administrator# telnet localhost 123
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
root@meet:/home/administrator# telnet localhost 22
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.3
^C
Connection closed by foreign host.
Не уверена, что подключение по доменному имени и по ip можно считать удачным, оно вроде и подключилось, но ответ никакой не дало... Это можно считать удачным подключением и все же копать в пользователях?
На procody пользователей добавляла командой из Вашей инструкции, открыла файл /etc/jibri-docker/.env , посмотрела, что один в один данные с моей командой на добавление пользователей. На всякий случай добавила пользователей с данными, полностью скопированными из файла /etc/jibri-docker/.env . Службу перезапустила. Все осталось на своих местах, запись не запускается.
С подключением к порту 5222 всё нормально, об этом говорит сообщение: "Connected to ..."
УдалитьВозможно где-то ошибка в конфигурационных файлах prosody, jibri (файл .env) или jicofo. Нужно проверить, не осталось ли где-то в них упоминание имени meet.oldfag.ru, что бывает при копировании конфигов, вместо необходимого вам.
УдалитьАналогичные две проблемы:
Удалить1. С CONNECTION как у вас, сделал следующее: в файле /etc/hosts изменил ip 127.0.0.1 meet.XXXXX.ru на реальный IP в сети. И в одном месте и правда осталось "упоминание имени meet.oldfag.ru"
2.JICOFO.LOG:
Jicofo 2021-01-15 22:44:54.807 SEVERE: [35] org.jitsi.jicofo.recording.jibri.JibriSession.log() Unable to find an available Jibri, can't start
Jicofo 2021-01-15 22:44:54.809 INFO: [35] org.jitsi.jicofo.recording.jibri.JibriRecorder.log() Failed to start a Jibri session, no Jibris available
Не пойму куда копать....
Тороплюсь писать сообщение, забыл пояснить что первый пункт -решился как раз.
УдалитьОстался второй.
olex1984, если jicofo не видит jibri, то нужно начинать с того, что пишет jibri при запуске контейнера.
УдалитьБольшой вывод получится :-) Но я ориентировался на последние строки:
Удалитьjibri_1 | 2021-01-16 17:11:43.491 INFO: [1] org.jitsi.jibri.Main.main() Using port 2222 for HTTP API
jibri_1 | 2021-01-16 17:11:43.497 WARNING: [26] org.jitsi.xmpp.mucclient.MucClient.log() Disabling certificate verification!
jibri_1 | 2021-01-16 17:11:43.528 FINE: [26] org.jitsi.xmpp.mucclient.MucClient.log() About to connect and login.
jibri_1 | 2021-01-16 17:11:43.693 INFO: [26] org.jitsi.xmpp.mucclient.MucClient.log() Connected.
jibri_1 | 2021-01-16 17:11:43.693 INFO: [26] org.jitsi.xmpp.mucclient.MucClient.log() Logging in.
jibri_1 | 2021-01-16 17:11:43.780 FINE: [26] org.jitsi.xmpp.mucclient.MucClient.log() Authenticated, b=false
jibri_1 | 2021-01-16 17:11:43.781 FINE: [26] org.jitsi.xmpp.mucclient.MucClient.log() About to join MUCs: [jvbbrewery@internal.auth.meet.MY_DOMAIN.ru]
jibri_1 | 2021-01-16 17:11:43.820 INFO: [26] org.jitsi.xmpp.mucclient.MucClient.log() Joined MUC: jvbbrewery@internal.auth.meet.MY_DOMAIN.ru
jibri_1 | 2021-01-16 17:11:43.828 FINE: [38] org.jitsi.xmpp.extensions.DefaultPacketExtensionProvider.parse() Could not add a provider for element busy-status from namespace http://jitsi.org/protocol/jibri
jibri_1 | 2021-01-16 17:11:43.828 FINE: [38] org.jitsi.xmpp.extensions.DefaultPacketExtensionProvider.parse() Could not add a provider for element health-status from namespace http://jitsi.org/protocol/health
Опечатки проверила я и несколько человек. Нашли одну: вместо hiddenDomain: 'recorder.meet.****.ru' я написала - hiddenDomain: 'recoder.meet.*****.ru'. Поправила и ничего не изменилось. Все также jicofo не видит jibri. Больше опечаток не нашли. Единственное, что у меня 18 убунта, так что, может в этом дело...
УдалитьСделал!!!
ОтветитьУдалитьНа этот мануал я вышел от безысходности с оф.маном. решил попробовать с ДОКЕРОМ. Но увы. Так же история. Все в пустую.
Вчера на одном англоязычном форуме увидел пост, как один чел мучался и мучался как я с JIBRI, у него ничего не получалось и он вычитал, что JIBRI работает на ядре 4.4, а это UBUNTU 16.04. Его еще поправили, типа UBUNTU 16.04 из-за того, что там идет поддеhжка ALSA LOOP и JAVA 8 в репах по стандарту.
Ну я снес все. Установил UBUNTU 16.04 server и по ману от сюда https://www.youtube.com/watch?v=S43-A1N_COE , все стал делать с нуля (на JIBRI машине, JITSI MEET у меня на отдельно ВМ). Понятно что из мана теперь исключил JAVA, т.к. она стандартно в репах 8-ой версии ставится. И все с первого раза завелось - ЧУДО не иначе :-) Неделю убил на JIBRI. А дело то ... В ядре и Яве. Может и еще в чем то... Надо забэкапить не забыть ВМ от греха подальше :-)
P.S.: на убунтах 20 и 18 тоже пробовал по тому-же ману и этому с докером джаву 8-ую ставить, все равно службы не заводились ни jibri-xorg, ни jibri-icewm. А тут с полпинка :-)
P.P.S: руки так и чешутся на 16ую докер запилить по этому ману - проверить так сказать :-)
отвечу Вам тут :) " /etc/hosts изменил ip 127.0.0.1 meet.XXXXX.ru " В данной строчке у меня "ip 127.0.1.1 meet.XXXXX.ru ", т.е. 1 вместо 0. У меня в хосте первая строчка 127.0.0.1 localhost, вторая - ip 127.0.1.1 meet.XXXXX.ru . У Вас по структуре хост такой же? Или у Вас первой строчки нет? (петли)
УдалитьПо другому вопросу: у меня нет возможности jibri на другую машину взгромоздить( Я надеялась ее запустить на одной машине с Jitsi Meet. Но Jitsi у меня была настроена на 18 убунте... В целом, я немного не понимаю, что нужно донастраивать и дописывать, чтобы Jibri вывести на отдельную машину. Видимо, тут только одно возможно - сносить машину всю и с нуля настраивать Jitsi на 16.04 убунте. Надеюсь все же с 18 разобраться, ну вдруг. Но зато хоть теперь понятно, в чем дело и почему не запускается хоть в лепешку разбейся.
root@jitsi-record:~# cat /etc/hosts это машина с JIBRI на 18 убунте.
Удалить127.0.0.1 localhost
127.0.1.1 jitsi-record.xxxxxxx.int jitsi-record
192.168.32.57 meet.xxxxxxxx.ru meet
Дело в том, что кроме того, что они увидились, у меня пошли проблемы с запуском XORG и прочего под 18-ой. JAVA именно 8-ая нужна. Там же кроме сервиса jibri, в зависимостях его: jibri-xorg, jibri-icewm. И Дебажить очень трудно. Поэтому для меня проще стало попробовать отдельную машину для JIBRI. Вот хороший ман: https://nerdonthestreet.com/wiki?find=Set+Up+Jibri+for+Jitsi+Recording%3Aslash%3AStreaming .
Вы можете прислать мне ваш EMAIL, я могу свои конфиги выслать. Но лучше для теста все таки взять отдельную машину и на ней попробовать. Т.к. я пробовал LXC запустить в 18-ой с 16-ой. И вроде даже как они видят друг друга, но запись не идет, т.к. моджуль ядра не 4.4, а выше. И его уже не переделать. И поэтому snd_aloop не получается добавить.
Вобщем граблей выше крыши.
Установив же 16-ую, по тому ману (выше написал) с первого раза запись заработала.
Пардон (жаль нельзя править коментарии), приходится добавлять.
УдалитьОпечатался выше:
ХОСТ JIBRI на 16 убунте.
Ссылку, которую Вы только что прислали, очень похожа на стандартный мануал. Я с этого начинала войну с JIBRI и изначально пробовала по этому пути настраивать. Доходила до момента открытия и изменения файла "nano /etc/jitsi/jibri/config.json" и тут схлапывалась. У меня при полностью выполненных условиях инструкции, не было такого файла. Создавать с нуля? Так вроде написано - что отредактируйте... Я и переустанавливала, и с бубном прыгала, и пинала. А он гад так и не появлялся. Вроде даже пыталась создать, но воз и ныне там был. Отчаявшись, продолжила гуглить и потом наткнулась на данного автора. Тут, как Вы видите, совершенно другая инструкция. =) И что-то мне подсказывает, что сделай я это все на 16.4 убунте, у меня может все заработать. А может и не заработать. Собственно, поэтому начала задавать вопросы =))
УдалитьСоздать виртуалку на сервере, затолкать на нее 16.4 убунту - я могу, уточнила этот вопрос. Но сразу куча вопросов: если на нее не надо взгромождать jitsi meet, то тогда где править конфигурационные файлы Jitsi meet? На машине с jitsi? И как этой виртуальной машине дать пинка в сторону машины с jitsi?
Еще вопрос возникает. Если у меня Jitsi стоит на 18.04 убунте, а jibri на 16.4, конфликта не будет? Или Вы как раз про это и писали здесь =>> "Т.к. я пробовал LXC запустить в 18-ой с 16-ой. И вроде даже как они видят друг друга, но запись не идет, т.к. моджуль ядра не 4.4, а выше. И его уже не переделать."
Вполне возможно, что вопрос глупый, но я еще плаваю в этой теме, а настраивать уже срочнонадасейчас. =))
Почту, я так понимаю, можно только в комментарии оставить, да?
Нет лишнего городить не нужно будет ничего. У меня:
Удалить1-ВМ JITSI MEET тоже на убунте 18.04. Там стоит стандартный набор кроме JIBRI.
2-ВМ JIBRI и только. Т.е. все настройки для JIBRI у меня остались на 1-ой ВМ (серверная сторона настройки), а на второй я настраивал только: chrome, chromedriver, JAVA extra кажется, ну и конфиг из стандартного мана для JIBRI (config.json) Ну и пользователя добавить в систему нужно будет(так же из мана), т.к. там суть очень хитрая.Как я понял из под пользователя создается ГРАФ.окружение, запускается хром и он подключается к комнате, а потом этот видео поток кодирует FFMPEG-ом в файл. + чтобы подключение было через сеть, то и /etc/hosts я добавлял хост jitsi-meet. Причем через внутреннюю сеть. И все заработало.
Вот видео по тому ману(гораздо лучше смотреть и делать ;-) ): https://www.youtube.com/watch?v=S43-A1N_COE&t=1938s И правильно ты подметила, я по оф.ману тоже больше вопросов имел, чем пользы, либо я ничерта в линухе уже не понимаю. И в итоге jibri.conf вобще оставил без настроек, а создал в ручную config.json. Это все станет более менее видно, если в службы зайти jibri.service в systemd, то там параметры всех конфигов указаны.
Я включил адрес своей почты "напоказ". напиши туда тест. Я снова уберу видимость ящика в настройках профиля. И буду отвечать уже в gmail-е.
Здравствуйте! Отличная инструкция. Правда у меня работает запись 1-й комнаты, а вторая и последующие комнаты уже не записываются =( (есть попытки записи, но потом стоп) Можете подсказать куда смотреть? Спасибо
ОтветитьУдалитьdocker exec jibri-docker_jibri_1 sed -i 's/Loopback/0/g' /home/jibri/.asoundrc
docker exec jibri-docker_jibri_2 sed -i 's/Loopback/1/g' /home/jibri/.asoundrc
...
Looback я не забыл.
Ошибки такие
jibri_2 | 2021-02-01 17:43:40.680 FINE: [17] org.jitsi.jibri.util.ProcessStatePublisher.ffmpeg.invoke() Process ffmpeg hasn't written in 2 seconds, publishing periodic update
jibri_2 | 2021-02-01 17:43:40.681 INFO: [56] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegProcessUpdate() Ffmpeg quit abruptly. Last output line: plug:bsnoop: Input/output error
jibri_2 | 2021-02-01 17:43:40.683 INFO: [56] org.jitsi.jibri.capture.ffmpeg.FfmpegCapturer.onFfmpegS
tateMachineStateChange() Ffmpeg capturer transitioning from state Starting up to Error: QuitUnexpectedly SESSION plug:bsnoop: Input/output error
jibri_2 | 2021-02-01 17:43:40.683 INFO: [56] org.jitsi.jibri.service.impl.FileRecordingJibriService.onServiceStateChange() File recording service transitioning from state Starting up to Error: QuitUnexpectedly SESSION plug:bsnoop: Input/output error
jibri_2 | 2021-02-01 17:43:40.684 INFO: [56] org.jitsi.jibri.api.xmpp.XmppApi.invoke() Current service had an error Error: QuitUnexpectedly SESSION plug:bsnoop: Input/output error, sending error iq
jibri_2 | 2021-02-01 17:43:40.685 FINE: [56] org.jitsi.jibri.statsd.JibriStatsDClient.incrementCounter() Incrementing statsd counter: stop:recording
....
2021-02-01 17:47:33.724 INFO: [78] org.jitsi.jibri.status.JibriStatusManager.log() Busy status has changed: BUSY -> IDLE
jibri_2 | 2021-02-01 17:47:33.724 FINE: [78] org.jitsi.jibri.webhooks.v1.WebhookClient.invokeSuspend() Updating 0 subscribers of status
jibri_2 | 2021-02-01 17:47:33.724 INFO: [78] org.jitsi.jibri.api.xmpp.XmppApi.updatePresence() Jibri reports its status is now JibriStatus(busyStatus=IDLE, health=OverallHealth(healthStatus=HEALTHY, details={})), publishing presence to connections
jibri_2 | 2021-02-01 17:47:33.725 FINE: [78] org.jitsi.xmpp.mucclient.MucClientManager.log() Setting a presence extension: org.jitsi.xmpp.extensions.jibri.JibriStatusPacketExt@39d63a3d
jibri_2 | 2021-02-01 17:47:33.725 FINE: [78] org.jitsi.xmpp.mucclient.MucClientManager.log() Replacing presence extension: org.jitsi.xmpp.extensions.jibri.JibriStatusPacketExt@5b470e0a
Loopback-устройства были указаны для контейнеров, а были ли они созданы на сервере с Jitsi?
УдалитьOldfag а Вы не подскажите как настроить "поделиться ссылкой" ??
ОтветитьУдалитьfileRecordingsServiceSharingEnabled: true я включил но когда запись идет и после ее отключения, ничего не появляется на экране или в чате. где она должна отображаться хотя бы? а то я сделал внешнюю ссылку и хочу чтобы люди могли сами брать записи без моей помощи
Получилось настроить одновременную запись нескольких комнат?
УдалитьЧто касается fileRecordingsServiceSharingEnabled, то как я понял, это работает только тогда когда настроена интеграция записи с dropbox, например.
Если её нет, но отдать записи пользователям для самостоятельного скачивания хочется, то можно их публиковать куда-нибудь с помощью завершающего скрипта, указанного в параметре JIBRI_FINALIZE_RECORDING_SCRIPT_PATH (последний абзац статьи). Самый простой способ выкладывать их на общий ресурс.
Скрипт публикации придётся написать самостоятельно.
Удалитьда я все настроил. у меня все 5 docker-ов записывают в 1 папку и на nginx я открыл их чтобы через веб скачивать можно было (я заметил что на 5 записывающих комнат нужно больше 4 ядер, а то jicofo не выдержал, запись даже при таком случае нормально останавливается без битого файла). и телефония тоже работает входящие и исходящие. в инете куча инструкций, но ни одна из них не приведет к полностью работающей системе. так же я сейчас делаю Etherpad, shared document editing addon для одновременного редактирования файлов.
УдалитьА телефония какая? Сейчас думаю как freepbx подружить с jitsi, но не нашёл толковой инструкции как это сделать. Где можно почитать?
Удалитьу меня "голый" asterisk. я могу помочь сделать исходящие звонки из конференций и входящие так же (там добавляется SIPAddHeader для присоединение к комнате, я работал с elastix ранее и там есть extensions_custom.conf в который можно самому кодить). я настраивал jigasi без докера, прямо на сервере службой.
УдалитьПогляди форум, человек очень подробно и качественно описал данные процессы:
Удалитьhttps://community.jitsi.org/t/conference-mapper-api/39258/5 - Настройка API
https://community.jitsi.org/t/tutorial-jitsi-jigasi-freepbx-integration-along-with-asterisk-ivr-to-use-jitsi-conference-mapper-api/48554/14 - Настройка интеграции.
В догонку. По настройке API
Удалитьhttps://community.jitsi.org/t/tutorial-self-hosted-conference-mapper-api/53901
Добрый день.
ОтветитьУдалитьНастроил всё по инструкции, но запись не идет.
Я Docker только начал изучать, до Docker-compose еще даже не доходил.
В какие логи смотреть? На фронте стандартная ошибка - как будто сервис записи и не настроен вообще.
Для начала нужно запустить один контейнер и убедиться, что он подключился к jitsi. Если контейнер запущен без ключа -d, то весь вывод jibri будет сыпаться прямо в консоль.
УдалитьЕсли контейнер jibri успешно подключается к jitsi, то следующее, что стоит проверить - настройка alsa-loopback устройств. Если они не созданы на хосте или не настроены в контейнере, то запись будет невозможна.
УдалитьПодскажите сколько места запись занимает ? И сколько ресурсов нужно для запуска докера ? Например если делать одновременно 20-25 jibry
ОтветитьУдалитьПо поводу занимаемого места, то на 1 минуту записи приходится где-то 2 Мб места. Что касается ресурсов, то примерно 300 Мб ОЗУ съедает один записывающий контейнер и где-то по 10-15% на каждом из 4 ядер виртуалки.
Удалитьздравствуйте, спасибо за супер полезную статью!
ОтветитьУдалитьпочему то платформа Blogger удаляет мои комментарии к этой статье (или они на review)? есть другой способ для связи?
на Ubuntu18.4 пускаю docker для видеозаписи.
УдалитьJibri стартует File recording service стартует, пишет логи, browser файл, но запись видео проваливается
непонятное из логов Jibri
jibri_1 | INFO: [61] org.jitsi.jibri.selenium.pageobjects.HomePage.log() Visiting url
jibri_1 | EVERE: [61] org.jitsi.jibri.selenium.JibriSelenium.log() An error occurred while joining the call
jibri_1 | org.openqa.selenium.InvalidArgumentException: invalid argument
и в файле Browser есть 1 error - could navigate to page
в json файле, meeting url - undefined
OLDFAG, может быть причиной что jibri или browser компоненте не передалось URL конференции?
те где в конфигах для jibri установить VIsitingURL который сейчас "undefined"?
Прошу прощения за долгий ответ, но лучше позже, чем никогда.
Удалить1. Действительно, по непонятной причине, 4 ваших комментария попали под подозрение в спаме.
2. Достаточно сложно дать ответ по 4 строчками лога. Если вопрос ещё актуален, то можете прислать лог (вывод консоли) полностью на blog собака oldfag.ru?
Здравствуйте, спасибо за полезную статью!
ОтветитьУдалитьКак добавить rclone для переноса файлов записи в азур в jibri.yml или это неправильное место для этого.
Хочу добавить
apt update
apt install curl -y
curl https://rclone.org/install.sh | bash
хм, для чего rclone - curl сам прекрасно через webdav отправляет файлы. Пример скрипта для отправки в nextcloud:
Удалить#!/bin/bash
RECORDINGS_DIR=$1
curl -T $RECORDINGS_DIR/*.mp4 --user 'jibri:NextcloudPass' 'http://nextcloud.domain.ru/remote.php/webdav/recordings/'
exit 0
А как поменять качество записываемого видео?
ОтветитьУдалить