Архитектура ядра
Платформа использует микросервисную архитектуру, где каждая функция — видео, чат, запись и аутентификация — работает как независимый сервис. Это позволяет масштабировать каждый сервис отдельно в зависимости от нагрузки.
Обработка медиа в реальном времени
WebRTC — основа для передачи аудио/видео в реальном времени. Для многосторонних вызовов Selective Forwarding Unit (SFU) предпочтительнее MCU, потому что:
- SFU пересылает отдельные медиапотоки без транскодирования, снижая нагрузку на процессор сервера
- Каждый клиент декодирует потоки независимо, что улучшает масштабируемость
- MCU объединяет потоки на стороне сервера, что требует больше ресурсов и подходит только для крупных трансляций
Адаптивный битрейт и условия сети
Для работы с нестабильными условиями сети реализуй адаптивное потоковое кодирование:
- Мониторь пропускную способность в реальном времени, используя встроенную статистику WebRTC
RTCPeerConnection
- Динамически снижай разрешение или частоту кадров для участников с плохим соединением
- Используй TURN-серверы как резервные реле, когда прямое соединение между пирами не работает
Трансляция экрана и запись
- Трансляция экрана переиспользует существующий WebRTC-конвейер через API
getDisplayMedia
- Записи встреч захватываются на уровне SFU, хранятся в объектном хранилище (например, S3) и обрабатываются асинхронно с помощью сервиса медиаобработки
Обмен сообщениями и управление участниками
- Встроенный чат использует WebSockets для доставки сообщений с минимальной задержкой
- Отдельный сервис участников отслеживает присутствие, роли и состояние встречи, используя распределённый кэш вроде
Redis
Сквозное шифрование
- Используй DTLS-SRTP (встроено в WebRTC) для шифрования медиапотоков при передаче
- Для настоящего E2E-шифрования реализуй обмен ключами на уровне сессии, чтобы сервер никогда не имел доступа к ключам расшифровки
Стратегия масштабирования
- Разверни кластеры SFU по регионам, чтобы минимизировать задержку
- Используй балансировщик нагрузки для распределения встреч между узлами SFU
- Автоматически масштабируй медиасерверы горизонтально на основе количества активных встреч