Skip to content

Захват RTSP (Ingestion)

RUSEON Core подключается к IP-камерам и источникам RTSP видеопотоков с помощью библиотек bluenviron/gortsplib/v4 и pion/rtp.


Жизненный цикл подключения

  1. Ограничение конкурентных хендшейков: Все попытки подключения проходят через семафор (dialSemaphore, максимум 10 одновременных подключений) для предотвращения эффекта Thundering Herd и перегрузки сетевой карты при массовом старте сотен камер.
  2. Describe и Setup: Выполняет DESCRIBE и инициализирует треки через SETUP (по умолчанию используется надежный протокол TCP interleaved, с возможностью переключения на UDP).
  3. Play и чтение пакетов: Отправляет команду PLAY и регистрирует колбэки:
    • OnPacketRTP: Извлечение NAL-юнитов из RTP пакетов.
    • OnPacketLost: Инкремент счетчиков ошибок и логирование без разрыва соединения.
    • OnDecodeError: Безопасная обработка поврежденных кадров.

Обработка видеокодеков

RUSEON Core выполняет демультиплексирование потоков без распаковки видео на CPU:

  • H.264 (AVC): Извлечение параметров SPS (тип 7), PPS (тип 8) и ключевых кадров IDR (тип 5).
  • H.265 (HEVC): Извлечение параметров VPS (тип 32), SPS (тип 33), PPS (тип 34) и ключевых кадров IRAP/IDR (типы 16–21).
  • Расчет битрейта: Вычисляется по скользящему 1-секундному окну и передается в телеметрию камеры.

Реконнект с экспоненциальной задержкой (Exponential Backoff + Jitter)

При потере связи с камерой:

  1. В EventBus публикуется событие camera_offline, а статус камеры переходит в offline.
  2. Запускается цикл переподключения с экспоненциальной задержкой и случайным джиттером: $$\text{delay} = \min(60\text{с}, 1\text{с} \times 2^{\text{reconnectCount}}) \pm 20% \text{ джиттер}$$
  3. Это исключает лавинообразные одновременные повторные запросы к камерам.
  4. При успешном восстановлении связи публикуется camera_online, а статус возвращается в online.

Released under the MIT License.