Skip to content

WebRTC (WHEP)

Для мониторинга в реальном времени со сверхнизкой задержкой (<50 мс) RUSEON Core предоставляет видеопайплайн WebRTC на базе Pion WebRTC v4.


Архитектура протокола WHEP

RUSEON Core реализует стандартный протокол WHEP (WebRTC HTTP Egress Protocol) с Non-Trickle ICE:

  1. Браузер отправляет HTTP POST запрос с SDP Offer на /stream/webrtc/whep/:id.
  2. Сервер инициализирует PeerConnection через предварительно созданный экземпляр webrtc.API, прикрепляет видеодорожку H.264 и создает DataChannel "metadata".
  3. Сервер генерирует и возвращает клиенту SDP Answer (201 Created с Content-Type: application/sdp).
  4. Видеопакеты и AI-метаданные транслируются клиенту по протоколам SRTP / SCTP.

Архитектурные оптимизации

1. Предварительная генерация сертификата DTLS

Генерация ECDSA/RSA сертификатов при каждом подключении создает задержку в 100–300 мс. RUSEON Core генерирует единый сертификат ECDSA P-256 при старте демона и повторно использует его во всех PeerConnection, обеспечивая мгновенный хендшейк.

2. Мультиплексор UDP-порта (Single UDP Port)

Вместо выделения случайных динамических UDP портов для каждого зрителя RUSEON Core мультиплексирует весь входящий и исходящий трафик WebRTC через единый порт (по умолчанию 8555/UDP):

yaml
server:
  webrtc:
    listen_port: 8555

3. NAT 1:1 Public IP Mapping

Для корректной работы за NAT, внутри Docker или в Kubernetes LoadBalancer внешние IP-адреса хоста явно анонсируются в ICE кандидатах:

yaml
server:
  webrtc:
    nat_1_to_1_ips:
      - "203.0.113.10"

4. Конфигурация STUN / TURN

Поддерживается работа в изолированных air-gapped сетях и сетях со строгим симметричным NAT через настройку собственных TURN-серверов:

yaml
server:
  webrtc:
    ice_servers:
      - "stun:stun.l.google.com:19302"
      - "turn:turn.company.local:3478"
    ice_transport_policy: "all" # или "relay"
    turn_username: "webrtc_user"
    turn_password: "turn_password"

Вставка параметров SPS / PPS в ключевые кадры

Чтобы подключившийся зритель мог мгновенно начать воспроизведение видео без ожидания начала следующего GOP-периода камеры, ядро сохраняет параметры SPS/PPS из SDP и вставляет их в формате Annex-B перед каждым ключевым кадром (IDR).


Канал метаданных DataChannel

Параллельно с видеопотоком RUSEON Core открывает SCTP DataChannel с именем "metadata". Координаты Bounding Boxes и события детекций от ИИ, поступившие через gRPC, мгновенно ретранслируются в браузер в формате JSON без буферизации.

Released under the MIT License.