Архитектура пайплайна приёма потоков (Stream Pipeline)
Пайплайн приёма потоков (internal/stream/) отвечает за установку надёжных соединений с IP-камерами, обработку сетевых сбоев, депакетизацию входящих RTP-пакетов, извлечение параметров кодека и передачу структурированных видеокадров в Кольцевой буфер.
1. Жизненный цикл соединений и семафор подключений (dialSemaphore)
При одновременной перезагрузке сотен камер (например, после восстановления электропитания на объекте) неконтролируемые одновременные попытки подключения могут перегрузить сетевой стек сервера и процессоры камер.
RUSEON Core реализует строгий контроль подключений:
dialSemaphore: Ограничивает число одновременно выполняемых RTSP-хендшейков (не более 10 параллельных запросов).- Экспоненциальный Backoff с джиттером: При ошибке интервалы повторных попыток плавно увеличиваются ($1\text{с} \to 2\text{с} \to 4\text{с} \to \dots \to 30\text{с}$) со случайным смещением во времени для предотвращения эффекта "громоподобного стада" (thundering herd).
2. Депакетизация RTP и сборка NAL-юнитов
IP-камеры передают видеопоток, разбивая каждый кадр на тысячи мелких сетевых RTP-пакетов:
- Депакетизатор RFC 6184 (H.264) и RFC 7798 (H.265):
- Собирает фрагментированные пакеты FU-A (Fragmentation Units) в непрерывные NAL-юниты.
- Корректно обрабатывает одиночные NAL и агрегированные пакеты STAP-A.
- Нормализация стартовых кодов Annex B:
- Добавляет стандартные 4-байтовые префиксы
0x00 0x00 0x00 0x01.
- Добавляет стандартные 4-байтовые префиксы
- Нормализация меток времени:
- Преобразует тактовую частоту RTP 90 кГц в монотонно возрастающие микросекундные метки Presentation Timestamps (PTS), компенсируя аппаратный джиттер камер.
3. Извлечение и кеширование параметров кодека
При обнаружении NAL-юнитов типов SPS (Sequence Parameter Set) или PPS (Picture Parameter Set):
- Парсер извлекает разрешение видео, профиль, уровень и соотношение сторон.
- Атомарно обновляет структуру
CodecParamsпотока. - Это позволяет любому новому HLS-муксеру или WebRTC-клиенту мгновенно получить валидные метаданные декодирования.