Verb: WebRTC-видеосервис и LMS для онлайн-обучения
Категория: EdTech, видеосервис, LMS
Разработка: WebRTC-конференции на MediaSoup, расписание, доступы, тарифы, личный кабинет и сценарии ошибок.
<300 мс
Целевая задержка передачи аудио и видео для живого онлайн-урока без заметной паузы.25 участников
Конференция рассчитана на индивидуальные и групповые занятия с управлением ролями.10 000+
Пиковая одновременная аудитория, под которую проектировались media-ноды и доступы.Обзор проекта
Verb нужен не как отдельная форма записи, а как полноценная среда для онлайн-обучения. Пользователь регистрируется, проходит опрос, выбирает преподавателя и время, оплачивает пакет и попадает в личный кабинет, где расписание, доступ к уроку, видеокласс, чат, файлы и помощь работают как одна система.
Самая сложная часть проекта — не интерфейс календаря, а real-time видеосервис. Мы спроектировали WebRTC-слой на базе MediaSoup по модели SFU: участники отправляют медиапотоки на media-ноды, а сервис маршрутизирует нужные аудио- и видеотреки без лишней нагрузки на клиентские устройства.
Вызов и решение
В сервисе много обязательных данных: имя, язык, часовой пояс, дни недели, время занятий, уровень языка, выбор преподавателя, регистрация и подтверждение почты. Если показать все сразу, пользователь быстро теряет контекст и не понимает, зачем вводит информацию.
Мы разделили путь на короткие решения. Каждый экран отвечает на один вопрос, а кнопка следующего шага активируется только после заполнения нужных данных. Ошибки регистрации, авторизации, кода подтверждения и восстановления пароля вынесены в отдельные состояния, чтобы продукт был готов не только к идеальному сценарию.
Какие механики сделали
Мы проектировали сервис вокруг реального учебного пути и вокруг живого видеозанятия. Важны не только экраны, но и переходы между состояниями: пользователь ошибся в email, запросил код повторно, не выбрал время, оплатил тариф, отменил урок поздно, подключается раньше начала занятия или теряет соединение во время урока.
Отзыв
Отзыв
Заказчик дал обратную связь после демонстрации сервиса: важно было получить не внешний звонок по ссылке, а собственный видеокласс с расписанием, доступами, записью и понятным восстановлением сессии.
Этапы разработки
Работа шла от архитектуры видеосервиса к интерфейсу: сначала зафиксировали роли, доступы и медиасценарии, затем собрали LMS-логику, после этого проверяли нагрузку, переподключения, запись и крайние состояния урока.
Результаты
Получился не набор кабинетов, а полноценная учебная платформа с собственным видеосервисом: ученик проходит путь от регистрации и подбора преподавателя до онлайн-урока, а медиаслой выдерживает групповые занятия, запись и пиковую нагрузку.
Целевая задержка аудио и видео для живого занятия.
Активных уроков одновременно в расчетном сценарии.
Медиапотоков в реальном времени через SFU-слой.
Одновременных пользователей на пиковую нагрузку.
Участников в одной индивидуальной или групповой конференции.
Автоматическая запись урока без ручного отключения.
Установление соединений, роли, комнаты и статусы подключения.
Горизонтальное масштабирование и балансировка нагрузки между серверами.
Пользователи, расписание, тарифы и доступы работают в одной логике.
Технологии
которые мы используем
Стек подбирается под сервис с собственным медиаслоем: WebRTC-конференции, маршрутизация потоков, LMS-логика, платежи, запись, мониторинг и production-инфраструктура.
- UX/UIFigma
- WEBReact
- TSTypeScript
- APIC# / .NET
- RTCWebRTC
- SFUMediaSoup
- SIGSignaling
- AWSInfrastructure
- QUEUEAsync jobs
- CICI/CD
- PAYStripe
- PAYCloud Payments
- DATAAnalytics
FAQ
Это сервис или внешний звонок?
Это собственный WebRTC-видеосервис Verb на MediaSoup и SFU-архитектуре. Он встроен в LMS: доступ к комнате зависит от пользователя, расписания, тарифа и статуса урока.
Зачем нужна SFU-архитектура?
В групповых уроках клиенты не пересылают видео друг другу напрямую. Потоки идут через media-ноды, а SFU отдает каждому участнику только нужные аудио- и видеопотоки, что помогает масштабировать конференции.
Что было самым сложным?
Свести медиа, расписание, оплату, запись и ошибки доступа в один сценарий: пользователь должен понимать, почему урок недоступен, отменен, еще не начался или требует повторного подключения.
