Bedrud Документация

Bedrud использует LiveKit для обработки видео- и аудиосвязи в реальном времени. LiveKit предоставляет медиасервер SFU (Selective Forwarding Unit), а Bedrud обеспечивает аутентификацию, управление комнатами и административное управление.

Встроенный или внешний режим

Bedrud поддерживает два режима развёртывания LiveKit:

  1. Встроенный режим (по умолчанию): Бэкенд запускает и управляет процессом сервера LiveKit внутренне. Дополнительная инфраструктура не требуется - бэкенд управляет жизненным циклом процесса LiveKit.
  2. Внешний режим: Bedrud подключается к отдельному серверу или кластеру LiveKit. Это полезно для горизонтального масштабирования или при использовании управляемого экземпляра LiveKit Cloud.

Настройка внешнего режима

Для использования внешнего сервера LiveKit установите следующие ключи в config.yaml:

livekit:
  host: "livekit.example.com:7880"
  api_key: "your-api-key"
  api_secret: "your-api-secret"
  embedded: false

Когда embedded равно false, Bedrud пропускает запуск встроенного бинарного файла LiveKit. API-ключ и секрет должны совпадать с учётными данными внешнего сервера.

Для настройки кластера LiveKit и конфигурации обратитесь к документации LiveKit.

Как это работает

1. Создание комнаты

Когда пользователь создаёт комнату в Bedrud, сервер не создаёт комнату LiveKit немедленно. Комнаты LiveKit создаются по требованию, когда присоединяется первый участник.

2. Токены присоединения

Когда пользователь присоединяется к встрече:

  1. Фронтенд отправляет запрос на /api/room/join.

  2. Бэкенд проверяет, что у пользователя есть право присоединиться к этой комнате.

  3. Бэкенд использует свой API Key и Secret для генерации подписанного JWT (Join Token).

  4. Токен содержит:

    • Имя комнаты.
    • Идентификацию пользователя (отображаемое имя).
    • Разрешения - например, может ли пользователь публиковать аудио или демонстрировать экран.
  5. Фронтенд получает этот токен и подключается напрямую к медиапорту LiveKit (по умолчанию 7880).

3. Управление комнатой (администрирование)

Бэкенд использует LiveKit Go SDK для выполнения административных действий:

  • Исключение: Отключает участника.
  • Отключение микрофона: Принудительно отключает микрофон участника.
  • Разрешения: Изменяет возможности участника в реальном времени.

Сетевая архитектура

  • API-порт (8090/443): Обрабатывает HTTP-запросы и WebSocket-сигнализацию для настройки звонков.
  • Медиапорт (7880): Обрабатывает видео- и аудиоданные с использованием протоколов WebRTC. Резервный ICE/TCP использует порт 7881, когда UDP заблокирован.
  • TURN-порт (3478 UDP / 5349 TLS): Ретранслирует медиа для клиентов за строгими NAT или файрволами. См. Руководство по TURN-серверу.

Для требований к файрволу и портам см. Подключение WebRTC.

Обработка ошибок

LiveKit недоступен

Если сервер LiveKit недоступен, генерация токена может всё ещё пройти успешно (токены создаются локально с использованием API-ключа и секрета). Однако клиент не сможет подключиться к медиасерверу. Симптомы:

  • Клиент получает действительный токен присоединения, но WebRTC-соединение истекает по таймауту.
  • LiveKit SDK генерирует событие Reconnecting или ошибку соединения.

Проверка: Убедитесь, что сервер LiveKit запущен (systemctl status livekit) и хост/порт в config.yaml указан правильно.

Сбой встроенного процесса LiveKit

Во встроенном режиме, если дочерний процесс LiveKit падает:

  • API-сервер Bedrud продолжает работать (комнаты можно просматривать, пользователи могут входить).
  • Активные встречи теряют медиаподключение.
  • Новые запросы на присоединение будут генерировать токены, но клиенты не смогут подключиться.

Проверка: Проверьте логи в /var/log/bedrud/bedrud.log или выполните journalctl -u livekit -f для подробностей сбоя.

Истечение срока действия токена

Токены присоединения LiveKit имеют короткий срок действия. Если клиент слишком долго ждёт между получением токена и подключением, токен истечёт. Клиент должен запросить новый токен через /api/room/join.

См. также