Настройка нескольких камер
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
| Параметр | Описание |
|---|---|
port | HTTP-порт, прослушиваемый данным каналом; не должен повторяться между каналами |
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 постоянно равно 0 | device указывает на узел 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 |