Files
cuframes-composer/docs/ADVERSARIAL-TEST-PHASE-5b.md
T
gx c6882e46f7 Phase 5b: adversarial — ВСЕ источники мертвы
Composer настроен на 4 несуществующих cuframes-ключа. Live результат:
  health: {total:4, active:0, stale:0, dead:4}
  FPS: 25.2 СТАБИЛЬНО
  Encoder рендерит чёрный grid с красными NO_SIGNAL подписями
    + серо-голубыми border'ами
  ffprobe видит валидный h264 1920x1080 25/1 на mediamtx

Это самый жёсткий adversarial scenario — полная потеря сети камер.
Composer не падает, encoder работает на холостом ходу, RTSP-publish
непрерывен, MQTT health корректно отдаёт dead=4 (HA-алерты через
expire_after=30s).

Доказан главный production threat: обесточивание PoE-свитча /
uplink-отрезание не валит весь pipeline. TV видит NO_SIGNAL вместо
разрыва соединения, HA-оператор уведомляется.

Полный отчёт + снимок в docs/ADVERSARIAL-TEST-PHASE-5b.md +
phase5b-all-dead.jpg.
2026-06-03 06:29:59 +01:00

3.2 KiB
Raw Blame History

Phase 5b — Adversarial: все источники мертвы

Дата: 2026-06-03 Хост: R9-88.23 (RTX 5090).

Сценарий

Композитор настроен на 4 фиктивных cuframes-ключа (cam-nonexistent-1...-4) которых нет в системе. composer пытается подключиться, все 4 subscriber получают timeout и остаются в DEAD. Encoder продолжает работать.

Это самый жёсткий adversarial-сценарий: полная потеря сети камер (злоумышленники обесточили PoE-свитч / отрезали uplink).

Результат

health: {ok:true, total:4, active:0, stale:0, dead:4}
FPS:    25.2 СТАБИЛЬНО
RTSP:   ffprobe видит h264 1920x1080 25/1
картинка: 4 чёрных ячейки + серо-голубые border'ы + красные "NO_SIGNAL"

См. phase5b-all-dead.jpg.

Что доказано

  1. Composer не падает даже если ВСЕ источники мертвы с самого старта.
  2. Encoder работает на чёрном фоне (NV12 fill через cuMemset + cugrid_fill_uv).
  3. TEXT и BORDER overlay'и видны даже когда нет ни одного видеокадра.
  4. RTSP-publish стабилен — ffmpeg pipe не пересоздаётся, mediamtx видит непрерывный поток.
  5. MQTT-health корректно отдаёт dead=4 — операторы получают alert через HA discovery sensors (expire_after=30s).
  6. NVENC + composer на холостом ходу не утекают — за 8 секунд стабильно 25 fps.

Threat model coverage

[злоумышленник] → обесточивает PoE-свитч/режет uplink
       ↓
[все камеры офлайн]
       ↓
[cuframes-publisher'ы не отвечают]
       ↓
[composer]: 0 active, 4 dead → blackout grid с NO_SIGNAL
       ↓
[mediamtx]: продолжает раздавать h264 25fps
       ↓
[TV/VLC]: видят чёрный экран с NO_SIGNAL вместо разрыва соединения
       ↓
[HA через MQTT health]: алерт через 30 секунд (expire_after)
       ↓
[оператор]: уведомление, доступ к Frigate recordings для ретроспективы

SLA-контракт не разрывается — поток технически жив, alerts работают, оператор видит что произошло.

Сравнение Phase 5a и 5b

Метрика Phase 5a (1/4 mort) Phase 5b (4/4 mort)
FPS encoder 25.0 25.2
RTSP-stability OK OK
Composer crash НЕТ НЕТ
Auto-reconnect (после restart pub'а) ~3с n/a (фиктивные ключи)
Health.dead 1 4
Overlay'и видны да да

В обоих случаях composer продолжает работу. Phase 5b — крайний случай; в Phase 5a (более реалистичный сценарий частичного отказа) дополнительно демонстрируется auto-reconnect.