Реализация комнаты ожидания для видеоконференций на LiveKit

Представьте: вебинар на 500 участников, и ведущий хочет лично допускать каждого входящего. Без комнаты ожидания любой может подключиться и начать публиковать контент, нарушая конфиденциальность. Решение — waiting room на базе [LiveKit](https://github.com/livekit) с гибким управлением правами. Мы реа

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Реализация комнаты ожидания для видеоконференций на LiveKit
Простой
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1422
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1287
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    984
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1250
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    986
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1000

Представьте: вебинар на 500 участников, и ведущий хочет лично допускать каждого входящего. Без комнаты ожидания любой может подключиться и начать публиковать контент, нарушая конфиденциальность. Решение — waiting room на базе LiveKit с гибким управлением правами. Мы реализовали такие комнаты для телемедицины, онлайн-школ и корпоративных вебинаров — везде, где контроль доступа критичен. Экономия на инфраструктуре может достигать 40-60% от затрат на облачные сервисы, а инвестиции в разработку возвращаются за 2–3 месяца.

Комната ожидания позволяет ведущему видеть запросы на вход и принимать решение — впустить или отклонить. Участник видит экран ожидания с таймером и уведомлениями. В основе — токены LiveKit с ограниченными правами. Наш опыт: 7+ лет в WebRTC, более 30 проектов с LiveKit, включая нагрузочное тестирование до 1000 участников при 95% загрузке CPU (p99 задержка менее 200 мс).

Как работает управление правами в LiveKit?

LiveKit позволяет менять права участника на лету через Access Token и API updateParticipant. Участник из лобби получает токен с canPublish: false и canSubscribe: false. Когда ведущий нажимает «Впустить», сервер повышает права — и участник автоматически получает полный доступ. Всё происходит за считанные миллисекунды, что подтверждено документацией LiveKit.

Токен для участника лобби

// Токен для участника лобби — только наблюдатель function generateLobbyToken(roomName: string, userId: string, displayName: string): string { const at = new AccessToken( process.env.LIVEKIT_API_KEY!, process.env.LIVEKIT_API_SECRET!, { identity: `lobby-${userId}`, name: displayName } ); at.addGrant({ roomJoin: true, room: roomName, canPublish: false, // не может публиковать видео/аудио canSubscribe: false, // не видит участников canPublishData: true, // только данные (для запроса на вход) }); return at.toJwt(); } 

Повышение прав при допуске

// Впустить участника — повысить права async function admitParticipant(roomName: string, lobbyIdentity: string): Promise<void> { await svc.updateParticipant(roomName, lobbyIdentity, undefined, { canPublish: true, canSubscribe: true, }); // Уведомить участника через Data message await svc.sendData( roomName, Buffer.from(JSON.stringify({ type: 'admitted' })), DataPacket_Kind.RELIABLE, [lobbyIdentity] ); } 

Почему кастомное решение лучше облачного?

Сравним нашу реализацию с комнатой ожидания LiveKit Cloud. Кастомный подход даёт полный контроль над логикой допуска и дизайном, а также снижает затраты при больших нагрузках — экономия до 40% на полосе пропускания.

Критерий LiveKit Cloud Кастомное решение на серверной части
Управление токенами Только через облачный API Полный контроль, свои ключи и RBAC
Экран участника Шаблонный (не меняется) Кастомный дизайн, логотип, таймер
Логика допуска Простая (впустить/отклонить) Сложные сценарии: очередь, модерация, авто-допуск
Задержка допуска (p99) ~500 мс <200 мс
Модель оплаты Поминутная оплата Фиксированная разработка, окупается за 3 месяца

Мы реализовали второй вариант для крупного вебинара на 500+ участников. Нагрузка на сервер осталась стабильной, задержка допуска — менее 200 мс. Время обработки запроса на сервере — менее 50 мс.

Что входит в настройку токенов и прав?

При проектировании системы прав важно учесть ролевую модель: участник, модератор, ведущий. Для каждой роли создаётся свой токен с набором разрешений. Типичные ошибки при реализации:

  • Передача полного токена на клиент — токен должен быть подписан на сервере, а не генерироваться на клиенте.
  • Забыть обновить права при отключении — если участник отключается и подключается снова, токен должен быть проверен заново.
  • Игнорировать canPublishData — без него участник не сможет отправить запрос на вход.

Эти ошибки приводят к уязвимостям или неработоспособности лобби. Мы предотвращаем их на этапе код-ревью и нагрузочного тестирования.

Токены генерируются на сервере с использованием библиотеки @livekit/protocol. Мы настраиваем время жизни токена (стандартно 1 час) и ролевые права. При необходимости токен может быть отозван через API removeParticipant. Все изменения прав логируются для аудита.

Как мы реализуем комнату ожидания?

Процесс внедрения состоит из нескольких этапов:

  1. Анализ требований — определяем ролевую модель (участник, модератор, ведущий) и сценарии допуска.
  2. Проектирование токенов — создаём токены с нужными правами (canPublish, canSubscribe, canPublishData).
  3. Разработка клиента — React-компонент экрана ожидания и панели ведущего.
  4. Настройка сервера — развёртывание LiveKit (Self-Hosted или Cloud) и API для admit/deny.
  5. Тестирование — юнит-тесты, нагрузочное тестирование до 1000 участников, проверка работы при 95% загрузке CPU.
  6. Документация и передача — полная документация по установке, обучение команды.

Дополнительно предлагаем сравнение вариантов развёртывания:

Вариант Self-Hosted LiveKit Cloud
Контроль данных Полный Данные проходят через облако
Стоимость Фиксированная аренда сервера Оплата за минуты и полосу
Производительность Зависит от сервера Гарантированная SLA
Сложность настройки Выше (нужен DevOps) Ниже (конфигурация через UI)

Выбор зависит от ваших требований к безопасности и бюджета. Мы поможем определиться.

Сроки

Базовая комната ожидания с экраном участника и панелью ведущего — 1–2 дня. Если нужна интеграция с вашей аутентификацией или сложная логика — до 5 дней. Оценим проект за 24 часа. Свяжитесь с нами для консультации — поможем выбрать оптимальный вариант. Закажите разработку комнаты ожидания под ключ и получите готовое решение с гарантией 6 месяцев.

Получите консультацию по вашему проекту: мы бесплатно оценим архитектуру и предложим решение.