WebRTC · проверка 05.10.2026

Соединение начинается, пока кандидаты ещё собираются

В той же Chrome-сессии медиана подключения сократилась с 16,1 до 1,25 секунды. Пять попыток установили DTLS и передавали RTP через TURN. Это скорость подключения в текущей сети.

До изменения браузер ждал 10 секунд общего сбора, затем Core — ещё около 5 секунд. Полный Trickle ICE передаёт готовый SDP сразу и присылает каждый кандидат отдельно.

1. Браузер → Core

Готовый SDP отправляется сразу. Кандидаты передаются по защищённому WebSocket по мере появления.

2. Core ↔ браузер

Core параллельно собирает host/STUN/TURN и проверяет уже доступные пары. Медленный STUN на другом интерфейсе не задерживает рабочую пару.

3. TURN → PCM → чат

Установлены DTLS и Opus/RTP. Контрольная речь дала partial, final и ответ «2 плюс 2 будет 4!». История восстановилась после reload.

Пять последовательных подключений

Local SDP → connected: 1363 · 1229 · 1245 · 1287 · 1243 мс. Медиана — 1245 мс. Сервер ещё собирал кандидаты; RTP уже передавался.

Проверены legacy offer, несовпадающий NAT-порт, неверный токен, отказ без OAuth и сохранение аудио после потери ICE-канала. TCP host-кандидаты Chrome пропускаются без отмены UDP-пар.

Что именно подтверждено

Core a925c28 и Frontend 95595f2 подтверждены в Insight по OCI revision и Image ID, совпавшему с CI build. Checks и выборочные сборки успешны; полный DRS deploy не потребовался.

Изолированный тест на aiortc 1.14.0 / aioice 0.10.2 передаёт реальные Opus/RTP/PCM при зависшем STUN на обеих сторонах. Production WAV использовал синтетический ввод и продолжающуюся тишину после речи.

Физический микрофон, WER/DER и точное время до первого PCM до изменения не измерялись. STUN/TURN сохранены. ICE restart и автоматическое переподключение не добавлены.

Код и проверка