Перейти к содержанию

# Часто возникающие проблемы с видеопотоками и их решение

В данном разделе описаны распространенные сценарии сбоев видеопотоков и методы их устранения.

Перед тем как приступить к диагностике сложных сценариев, рекомендуется выполнить базовую проверку:

- проверьте доступность и актуальность учетных данных;

- убедитесь, что URL-адрес камеры корректен и доступен из сети, где расположен сервер;

- проверьте, не достигнуто ли ограничение на максимальное количество подключений к самой камере.

Если базовые проверки не выявили проблем, но потоки продолжают отключаться, изучите следующие типичные сценарии.

1․ Проблема: Поток создается, но сразу переходит в статус `failure` с ошибкой инициализации кодека

Признаки проблемы:

- в секции потока `video_info` все параметры имеют нулевые или значения по умолчанию, указывающие на отсутствие данных;

- в логах FaceStream есть ошибки типа: `initCodec - avcodec_open2 failed! Generic error in an external library`, `openVideo - initCodec failed!`, `Stream: ... got error: Couldn't find or init appropriate codec for stream source`

Возможная причина:

Перегрузка аппаратного декодера видеокарты (NVDEC). Когда его использование достигает ~99%, он перестает инициализировать новые потоки и начинает возвращать ошибки.

Решение проблемы:

- необходимо включить смешанное декодирование. Для этого установите параметр `mixed_decode` в настройках FaceStream. Данный параметр определяет процент потоков, декодируемых на CPU, и может принимать значения от 0 до 100%. Оптимальное значение подбирается экспериментально в зависимости от производительности процессора и нагрузки на него. Рекомендуемые начальные значения: от 5 до 10 с последующим увеличением с шагом 5 до тех пор, пока процессор сохраняет способность держать нагрузку.

Важно! Изменение параметра требует перезагрузки сервиса FaceStream для применения конфигурации.

- проверить балансировку нагрузки. Убедитесь, что потоки распределены между всеми доступными GPU равномерно. Самую большую нагрузку создаёт детекция тел, затем следует совместный детектор и детекция лиц. Необходимо учитывать это при распределении.

2․ Проблема: Поток функционирует в штатном режиме в течение некоторого времени, после чего происходит его аварийное отключение

Признаки проблемы:

- поток какое-то время был в статусе "in_progress", а затем перешел в "failure";

- в логах FaceStream есть ошибка типа `Interrupt by timeout while reading video frame: 1000 ms.`.

Возможная причина:

Сервер не успевает получить видеоданные от камеры за установленное время ожидания (таймаут). Это может быть вызвано: высокой загрузкой сети или нестабильным сетевым соединением с камерой.

Решение проблемы: увеличить значение timeout. Его можно задать в теле запроса на создание потока ("create stream)" в секции `policies > healthcheck > timeout`. Рекомендуется установить значение в диапазоне 3000–10000 мс (3–10 секунд) вместо стандартных 1000 мс. Начинать целесообразно с 3000 мс.

3․ Проблема: Поток не перезапускается автоматически после аварийного завершения работы

Признаки проблемы:

После ошибки поток остается в статусе "failure" и не восстанавливает работу в автоматическом режиме, даже после перезагрузки контейнера.

Возможная причина:

1. Количество попыток перезапуска исчерпано (если параметр `attempt_count` задан и превышен).
2. Возникла критическая ошибка, которая считается системой неустранимой. В этом случае автоматический перезапуск не выполняется, независимо от значения `attempt_count`.

Решение проблемы:

- Увеличить количество попыток автоматического перезапуска. Это значение можно задать в теле запроса на обновление потока ("put stream)" в секции `autorestart > attempt_count`.
- Пересоздать поток вручную, если ошибка носит критический характер.

4․ Проблема: Ошибка при работе с `nginx` в качестве прокси для запросов в LUNA PLATFORM.

Признаки проблемы: в логах FaceStream присутствует ошибка вида:

    E1010 16:26:47.672775    40 BodyStreamSender.cpp:59] Track [fdefb8d1-9391-4bd0-8eb2-b16400000054]. Request ID: 1760102807,6950edd9-a3b8-4d39-957a-72ad80d44a6f. Http exception occurred. Error code: system:0 .Reason: `Incorrect Content-Type: must be textual to extract_string, JSON to extract_json.`

При этом в логах `nginx` наблюдается ошибка с кодом 413 (Request Entity Too Large).

Возможная причина: `nginx` ограничивает максимальный размер тела запроса, что приводит к отклонению запросов с большими данными (например, файлов изображений или видео).

Решение проблемы:

Увеличить максимальный разрешенный размер тела запроса (например, до 100 Mб) в конфигурации `nginx` путем добавления параметра:

    client_max_body_size 100M;

Пример конфигурации `nginx`, выполняющего роль прокси для сервиса Luna API:

    upstream lunaapi {
       server 127.0.0.1:5000;
    }
    server {
       listen 6000;
       client_max_body_size 100M;
       location / {
          proxy_pass http://lunaapi;
       }
    }

После внесения изменений необходимо перезагрузить конфигурацию `nginx`:

    nginx -s reload

5․ Проблема: Высокая нагрузка на CPU при использовании GPU.

Признаки проблемы: в мониторинге системных ресурсов видно, что CPU используется на 90–100%, хотя потоки настроены на обработку на GPU.

Возможная причина: По умолчанию параметр `numThreads` в конфигурации runtime установлен в `-1`, что позволяет FaceStream использовать все доступные потоки CPU. Это может приводить к избыточной нагрузке на процессор.

Решение проблемы:

Вручную задать оптимальное количество потоков в настройках Runtime. Для этого:

- откройте конфигурационный файл "runtime.conf" или найдите секцию "RUNTIME_CONFIG" в сервисе LUNA Configurator;

- установите параметр `numThreads` в значение, отличное от `-1`.

Оптимальное значение подбирается экспериментально в зависимости от нагрузки и конфигурации сервера. Рекомендуется начать с количества, равного числу физических ядер CPU минус 2-3 потока (например, для 8-ядерного CPU можно выставить `numThreads = 5`).

После применения настроек отслеживайте появление пропусков кадров. Если их нет — можно постепенно уменьшать значение `numThreads` для оптимизации потребления CPU.