Skip to content

Архитектура подсистемы WebRTC и WHEP ​

Подсистема WebRTC (internal/webrtc/) обеспечивает доставку видеопотоков в браузеры и мобильные приложения в реальном времени со сверхнизкой задержкой (< 500 мс) без плагинов и транскодирования.


1. Сигнализация по стандарту WHEP (WebRTC HTTP Egress Protocol) ​

RUSEON Core реализует спецификацию IETF WHEP на эндпоинте POST /stream/webrtc/whep/:id:

  • Простота интеграции: Браузер инициирует воспроизведение стандартным HTTP POST запросом с SDP Offer в теле (Content-Type: application/sdp).
  • RESTful ответ: Сервер возвращает 201 Created с SDP Answer.
  • Мультиплексирование UDP: Все WebRTC-сессии работают через единый порт (8555/UDP по умолчанию) через server.webrtc.listen_port, что исключает необходимость открытия сотен портов в фаерволе.

2. Адаптивный сетевой батчинг sendmmsg ядра Linux ​

Для масштабирования на сотни одновременных зрителей RUSEON Core реализует уровень адаптивного батчинга UDP (internal/webrtc/batch_linux.go):

Принцип работы батчера: ​

  1. 64-шардовая таблица пиров (peerShard): Сессии клиентов (netip.AddrPort) распределяются по 64 шардам с независимыми мьютексами, исключая взаимные блокировки при тысячах зрителей.
  2. Мгновенный хендшейк: Управляющие пакеты (STUN, DTLS) отправляются немедленно без накопления в батче.
  3. Сброс по маркерному биту кадра ($M=1$): Видеопакеты RTP сбрасываются в сетевой стек через системный вызов sendmmsg сразу при обнаружении бита завершения кадра ($M=1$ по RFC 6184) либо при заполнении буфера из 32 пакетов.
  4. Экономия ресурсов CPU: Снижает число системных вызовов и переключений контекста ядра на 85–90%.
  5. Кроссплатформенность: На системах Windows и macOS автоматически используется стандартный I/O (batch_generic.go).

3. WebRTC DataChannels для передачи метаданных ИИ ​

Каждое соединение WebRTC открывает канал SCTP DataChannel (label: "metadata"):

  • Координаты рамок детекций, классы объектов и уверенность передаются в формате компактного JSON.
  • Задержка доставки метаданных составляет < 50 мс, они синхронизированы с видеокадрами на Canvas-слое плеера.

4. Конфигурация WebRTC в YAML ​

yaml
server:
  webrtc:
    listen_port: 8555
    nat_1_to_1_ips:
      - "203.0.113.50"
    ice_servers:
      - "stun:stun.l.google.com:19302"
    ice_transport_policy: "all"

Связанная документация ​

Released under the MIT License.