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

Настройка нескольких камер

GoCam в FLYOS-FAST v1.4.0 поддерживает подключение нескольких UVC-камер к одному хосту. В этой статье на примере двух камер описана полная методика настройки; для трёх и четырёх камер принцип аналогичен.

Применимые версии

Поддержка нескольких камер зависит от GoCam и доступна только в FLYOS-FAST v1.4.0 и более новых версиях. Для машин с Crowsnest см. Подключение и использование камер; базовое использование одиночного GoCam см. в Служба камер GoCam.

Порты и адреса доступа​

Порт каждой камеры однозначно соответствует пути веб-страницы; префикс /webcamN/ предустановлен nginx на заводе и не требует изменения. Нажмите на значок справа от адреса, чтобы скопировать его:

Номер канала и портПоток в реальном времениОдиночный снимок
Канал 1 · 8080
Loading...
Loading...
Канал 2 · 8081
Loading...
Loading...
Канал 3 · 8082
Loading...
Loading...
Канал 4 · 8083
Loading...
Loading...

Закономерность: порт N-го канала равен 8080 + (N - 1), путь веб-страницы — /webcamN/, причём для 1-го канала цифра опускается и записывается как /webcam/.

?action=stream и ?action=snapshot — это совместимый с mjpg-streamer синтаксис GoCam, эквивалентный /stream и /snapshot соответственно; это встроенное поведение интерфейса, а не параметр, требующий настройки.

Подключение камер​

О выборе камер, способе подключения и требованиях к UVC-камерам без драйверов см. Подключение и использование камер.

В сценарии с несколькими камерами каждая камера должна подключаться к разным USB-портам хоста, не через один пассивный концентратор; перед подключением или отключением камеры полностью выключите принтер и отключите питание.

Шаг 1: Открытие конфигурации​

О том, как открыть файл конфигурации в Fluidd и посмотреть узлы устройств (ID камер), см. Открытие конфигурации.

В сценарии с несколькими камерами для каждого канала необходимо указать узел захвата данной камеры (video-index0), а не узел metadata, и зафиксировать его по физическому USB-порту, чтобы после перезагрузки номер узла не изменился и камера не перестала работать.

Шаг 2: Написание конфигурации для нескольких камер​

Файл конфигурации находится по пути:

/usr/share/printer_data/config/gocam.conf

Пример конфигурации для двух камер (device зафиксирован через by-path, разрешение указано по результатам измерений):

[cam 1]
port: 8080
device: /dev/v4l/by-path/platform-5311000.usb-usb-0:1:1.0-video-index0
resolution: 640x480
max_fps: 15
quality: 5

[cam 2]
port: 8081
device: /dev/v4l/by-path/platform-5101000.usb-usb-0:1:1.0-video-index0
resolution: 640x480
max_fps: 15
quality: 5
ПараметрОписание
portHTTP-порт, прослушиваемый данным каналом; не должен повторяться между каналами
deviceПуть к узлу захвата (video-index0) данной камеры
resolutionФактически поддерживаемое камерой разрешение в формате ширинаxвысота
max_fpsМаксимальная частота кадров; рекомендуется не превышать значения, перечисленные камерой
qualityКачество MJPEG, значение от 1 до 31; чем меньше значение, тем лучше качество и выше полоса пропускания
v4l2ctlНеобязательно, параметры UVC; параметры, сохранённые на странице управления, записываются в этот пункт
ffmpeg_flagsНеобязательно, параметры FFmpeg
Программное кодирование и прямая передача

Камеры, поддерживающие только формат YUYV, требуют программного кодирования в MJPEG на хосте, что приводит к высокой нагрузке на CPU; камеры с поддержкой MJPG могут передаваться напрямую, почти не нагружая CPU. Если оба канала поддерживают только YUYV, рекомендуется начинать с 640x480 и 15 кадров/с; если какой-либо канал поддерживает MJPG, для него можно отдельно повысить разрешение.

Шаг 3: Добавление панелей камер в веб-интерфейсе​

После настройки GoCam необходимо также зарегистрировать камеры в Moonraker, чтобы Fluidd / Mainsail отображали панели.

В Fluidd откройте Настройки → Камеры и убедитесь, что для двух записей указано соответственно:

ЗаписьАдрес потокаАдрес снимка
Канал 1
Loading...
Loading...
Канал 2
Loading...
Loading...
Типичные ошибки
  • Для второго канала по-прежнему указано /webcam/: обе панели будут показывать изображение одной и той же камеры. Для N-го канала необходимо использовать /webcamN/.
  • Записи, добавленные в веб-интерфейсе, хранятся в базе данных Moonraker (source равно database); изменение только moonraker.conf не даст эффекта, изменять нужно в интерфейсе.
  • Интерфейс Moonraker /server/webcams/item поддерживает только запрос, добавление и удаление, но не изменение, поэтому также выполняйте операции в интерфейсе.

Если необходимо добавить записи через файл конфигурации (не изменяя существующие записи в базе данных), можно добавить в moonraker.conf:

[webcam cam2]
enabled: true
service: mjpegstreamer-adaptive
target_fps: 15
stream_url: /webcam2/?action=stream
snapshot_url: /webcam2/?action=snapshot

Частые вопросы​

СимптомВозможная причинаРешение
На странице отображается NO SIGNAL, frames постоянно равно 0device указывает на узел metadata, или resolution превышает возможности камерыПроверьте с помощью --list-formats-ext, используйте video-index0
Изображение на обеих панелях одинаковоеURL второго канала по-прежнему указан как /webcam/Измените на /webcam2/?action=stream
После перезагрузки один из каналов перестаёт работатьНомер /dev/videoN меняется в зависимости от порядка подключенияИзмените device на /dev/v4l/by-path/...-video-index0
Порт второго канала недоступен[cam 2] не настроен или конфликт портов с другой службойПроверьте прослушивание с помощью ss -lntp | grep 8081
Изображение тормозит, нагрузка на хост растётПрограммное кодирование YUYV в сочетании с высоким разрешением и высокой частотой кадровСнизьте разрешение или частоту кадров либо используйте камеру с поддержкой MJPG
Loading...