Element Call: видеозвонки в Matrix на своём сервере
Видеоконференции в корпоративной среде — требование, а не опция. Но большинство решений привязаны к чужим серверам, а сквозное шифрование остаётся маркетинговым обещанием. Element Call решает обе проблемы: встроенные видеозвонки внутри протокола Matrix, полное шифрование по умолчанию, развёртывание на собственной инфраструктуре. В этой статье — архитектура, установка, сравнение с Jitsi Meet и ограничения, которые нужно учитывать.

Содержание
Что такое Element Call
Element Call — система видеозвонков, встроенная в протокол Matrix. До её появления групповые звонки в Element работали через сторонний Jitsi Video Bridge: отдельный сервер, отдельная инфраструктура, отдельное шифрование. Element Call заменила Jitsi встроенным решением на базе спецификации MatrixRTC (MSC 3401).
Ключевое отличие — звонок происходит внутри Matrix-комнаты. Сигнализация идёт через Synapse, медиапотоки передаются напрямую между участниками или через SFU-сервер. Отдельный медиа-сервер не нужен: достаточно работающего Synapse с включёнными экспериментальными функциями.
Проект распространяется под лицензией Apache 2.0 — полностью открытый исходный код. Развивается командой Element (ранее New Vector), основными разработчиками протокола Matrix. Код доступен на GitHub.
Element Call интегрирован в клиенты Element Web, Element Desktop и мобильные приложения Element X. Звонок можно начать прямо из чата — без переключения на внешний сервис. Пользователи самостоятельно развёрнутых серверов получают защищённую видеосвязь без зависимости от облачных платформ.

Возможности Element Call
Element Call поддерживает два формата: звонки 1:1 и групповые конференции. В обоих случаях доступен полный набор функций видеосвязи.
Шифрование
Сквозное шифрование (E2EE) применяется ко всем медиапотокам — видео и аудио. В отличие от решений, где шифрование включается опционально, Element Call шифрует звонки по умолчанию. Ключи шифрования управляются через Matrix — тот же механизм, что защищает текстовые сообщения.
Демонстрация экрана
Участники могут транслировать экран одновременно — ограничения на одного докладчика нет. При включении демонстрации экрана активируется режим Spotlight: экран выносится на передний план, а видео участников отображается в миниатюрах.
Гостевой доступ
Звонок можно создать по ссылке. Гость подключается через браузер без регистрации и установки клиента. Поддерживаются Chrome, Firefox и Safari.
Интерфейс
Динамическая сетка участников адаптируется к количеству подключённых. Плитки с видео можно перетаскивать и разворачивать двойным щелчком. Доступен выбор камеры и микрофона, управление громкостью, режим «картинка в картинке» (Picture-in-Picture).

Архитектура: Full Mesh и SFU
Element Call использует две модели передачи медиапотоков: Full Mesh и SFU. Выбор происходит автоматически в зависимости от числа участников и наличия SFU-сервера.
Full Mesh
В режиме Full Mesh каждый участник устанавливает прямое WebRTC-соединение с каждым другим участником. При 5 участниках каждый отправляет 4 потока и принимает 4 — итого 20 соединений. Это простая модель, но нагрузка растёт квадратично: стабильная работа до 7–8 участников.
Преимущество — нулевая серверная нагрузка. Медиа идёт напрямую между клиентами, сервер участвует только в сигнализации.
SFU (Selective Forwarding Unit)
SFU — центральный узел, который принимает поток от каждого участника и пересылает остальным. Каждый клиент отправляет один поток вместо N. Нагрузка на клиент растёт линейно, а не квадратично.
Element Call использует LiveKit в качестве SFU-сервера. LiveKit — открытая платформа для WebRTC, построенная на Pion (Go). При наличии LiveKit-сервера Element Call поддерживает до 100 и более участников.
Логика выбора: если SFU настроен в .well-known/matrix/client — используется SFU. Если нет — Full Mesh. Для команд до 5–7 человек Full Mesh достаточен. Для совещаний от 10 участников — нужен LiveKit.
Element Call vs Jitsi Meet
Element Call и Jitsi Meet решают одну задачу — видеоконференции на собственном сервере. Но архитектурно это разные системы.
| Критерий | Element Call | Jitsi Meet |
|---|---|---|
| Протокол | Matrix (MatrixRTC / MSC 3401) | XMPP + WebRTC (JVB) |
| Сквозное шифрование | Да, по умолчанию | Да, опционально |
| Отдельный сервер | Нет (работает через Synapse) | Да (JVB + Prosody + Jicofo) |
| Макс. участников | 100+ (SFU) / 7–8 (Full Mesh) | 100+ (JVB) |
| Гостевой доступ | Да | Да |
| SIP-совместимость | Нет | Да (Jigasi) |
| Запись звонков | Нет | Да (Jibri) |
| Мессенджер | Element (Matrix) | Нет (только звонки) |
| Лицензия | Apache 2.0 | Apache 2.0 |
Когда выбрать Element Call: компания уже использует Matrix для сообщений, нужно сквозное шифрование по умолчанию, не хочется поддерживать отдельный набор компонентов.
Когда выбрать Jitsi: нужна SIP-телефония, запись звонков, мессенджер не Matrix. Подробнее об установке и настройке Jitsi — в нашей статье о Jitsi Meet.
Если вы сравниваете корпоративные мессенджеры в целом — читайте сравнение Matrix, Mattermost и Rocket.Chat.
Установка Element Call на своём сервере
Element Call разворачивается как статическое веб-приложение. Для полноценной работы нужны три компонента: Synapse, LiveKit и MatrixRTC Authorization Service.
Требования
- Synapse с включёнными MSC 3266, MSC 4140, MSC 4222
- Docker и Docker Compose
- Домен с SSL-сертификатом
- Nginx или Caddy в качестве реверс-прокси
Настройка Synapse
В homeserver.yaml добавьте экспериментальные функции:
experimental_features:
msc3266_enabled: true
msc4140_enabled: true
msc4222_enabled: true
max_event_delay_duration: 24h
rc_message:
per_second: 0.5
burst_count: 30Параметр msc4140_enabled активирует отложенные события (delayed events), необходимые для корректной сигнализации звонков. Без него звонки могут зависать в состоянии «активен» после отключения участников.
LiveKit и MatrixRTC
Для масштабных звонков (от 10 участников) нужны два дополнительных сервиса: LiveKit SFU (порт 7880) и MatrixRTC Authorization Service (порт 8080). Оба разворачиваются через Docker Compose.
Настройка реверс-прокси
Пример конфигурации Nginx для маршрутизации запросов к LiveKit:
location ^~ /livekit/jwt/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:8080/;
}
location ^~ /livekit/sfu/ {
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_send_timeout 120;
proxy_read_timeout 120;
proxy_buffering off;
proxy_pass http://localhost:7880/;
}Объявление SFU
В .well-known/matrix/client добавьте адрес SFU-сервиса:
{
"org.matrix.msc4143.rtc_foci": [
{
"type": "livekit",
"livekit_service_url": "https://matrix.example.com/livekit/jwt"
}
]
}Сборка клиента
Клиентская часть собирается в статические файлы:
git clone https://github.com/element-hq/element-call.git
cd element-call
corepack enable
yarn
yarn buildРезультат — каталог dist/ со статикой. Отдайте его через Nginx с правилом try_files $uri /index.html.
Ограничения и планы развития
Element Call активно развивается, но у текущей версии есть ограничения, которые нужно учитывать при планировании внедрения.
Текущие ограничения
- Full Mesh — до 7–8 участников. Без SFU-сервера групповые звонки ограничены пропускной способностью клиентов. При 10 участниках качество падает.
- SFU требует дополнительной инфраструктуры. LiveKit — отдельный сервис, который нужно развернуть, настроить и поддерживать. Это усложняет архитектуру по сравнению с базовым Synapse.
- Нет SIP-совместимости. Подключить аналоговые телефоны или АТС к Element Call нельзя. Для этого нужен Jitsi с Jigasi.
- Нет записи звонков. Встроенного механизма записи нет. Для записи потребуется стороннее решение.
- Одно устройство на пользователя. Один аккаунт не может присоединиться к звонку с двух устройств одновременно.
Направления развития
Команда Element продолжает работу над спецификацией MatrixRTC. Основные направления: повышение стабильности SFU-режима, оптимизация потребления ресурсов на клиенте, расширение интеграции с Element X. Спецификация MSC 3401 находится в процессе принятия в ядро протокола Matrix, что обеспечит совместимость с любыми Matrix-клиентами.




