WebRTC (WHEP)
Для мониторинга в реальном времени со сверхнизкой задержкой (<50 мс) RUSEON Core предоставляет видеопайплайн WebRTC на базе Pion WebRTC v4.
Архитектура протокола WHEP
RUSEON Core реализует стандартный протокол WHEP (WebRTC HTTP Egress Protocol) с Non-Trickle ICE:
- Браузер отправляет HTTP POST запрос с SDP Offer на
/stream/webrtc/whep/:id. - Сервер инициализирует
PeerConnectionчерез предварительно созданный экземплярwebrtc.API, прикрепляет видеодорожку H.264 и создает DataChannel"metadata". - Сервер генерирует и возвращает клиенту SDP Answer (
201 CreatedсContent-Type: application/sdp). - Видеопакеты и 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):
server:
webrtc:
listen_port: 85553. NAT 1:1 Public IP Mapping
Для корректной работы за NAT, внутри Docker или в Kubernetes LoadBalancer внешние IP-адреса хоста явно анонсируются в ICE кандидатах:
server:
webrtc:
nat_1_to_1_ips:
- "203.0.113.10"4. Конфигурация STUN / TURN
Поддерживается работа в изолированных air-gapped сетях и сетях со строгим симметричным NAT через настройку собственных TURN-серверов:
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 без буферизации.