Перейти до змісту

Веб-панель та HTTP API

waybeam venc включає вбудовану веб-панель та повний HTTP API для керування всіма параметрами в реальному часі. Веб-панель доступна за адресою http://<ip-камери>/ (порт за замовчуванням — 80).


Веб-панель

Вкладка Settings (Налаштування)

Всі 84 параметри конфігурації згруповані за 13 секціями:

Секція Кількість полів Опис
System 3 Порт, розгін, логування
Sensor 7 Вибір та розблокування сенсора
ISP 7 Експозиція, AWB, AE
Image 3 Дзеркало, фліп, поворот
Video 10 Кодек, бітрейт, FPS, GOP
Outgoing 7 Стрімінг, адреса, режим
Audio 6 Кодек, частота, гучність
FPV 5 ROI-кодування
IMU 7 Гіроскоп BMI270
EIS 11 Стабілізація зображення
Recording 10 Запис на SD-картку
Adaptive Encoder 2 Детекція сцен
Debug 1 OSD

Елементи інтерфейсу:

  • 🟢 Live — параметр змінюється миттєво без перезапуску
  • 🟠 Restart — потребує reinit пайплайну (автоматично)
  • Apply Changes — застосувати всі змінені поля
  • Save & Restart — застосувати та перезапустити пайплайн
  • Restore Defaults — повернути конфігурацію з диска

Вкладка API Reference

Документація всіх HTTP-ендпоінтів з прикладами відповідей. Категорії:

  • Configuration
  • Encoder Control
  • ISP & Image Quality
  • Recording
  • Dual-Stream

Вкладка Image Quality (ISP)

Прямий доступ до 62 параметрів ISP SigmaStar:

  • Параметри — розгортувані секції з чіпами параметрів
  • Мульти-поля — вбудований редактор для складних параметрів (colortrans, OBC, demosaic тощо)
  • Export / Import — збереження та відновлення ISP-профілів у JSON

HTTP API — довідник

Всі ендпоінти використовують HTTP GET (сумісно з BusyBox wget). Відповіді — JSON у форматі {"ok": true/false, ...}.


Основні ендпоінти

GET /api/v1/version

Повертає інформацію про версію.

curl http://<ip>:80/api/v1/version

Відповідь:

{
  "ok": true,
  "data": {
    "app_version": "0.5.2",
    "backend": "star6e",
    "contract_version": "0.2.0",
    "config_schema_version": "0.2.0"
  }
}


GET /api/v1/config

Повертає повну активну конфігурацію.

curl http://<ip>:80/api/v1/config

GET /api/v1/capabilities

Показує мутабельність кожного поля (live або restart_required) та підтримку бекендом.

curl http://<ip>:80/api/v1/capabilities

Перевірка підтримки

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


Читання та запис полів

GET /api/v1/get?field_name

Прочитати одне поле:

curl "http://<ip>:80/api/v1/get?video0.bitrate"

Відповідь:

{"ok": true, "data": {"field": "video0.bitrate", "value": 8192}}


GET /api/v1/set?field_name=value

Записати поле. Live-поля застосовуються миттєво. Restart-поля ініціюють reinit.

# Миттєва зміна бітрейту (live)
curl "http://<ip>:80/api/v1/set?video0.bitrate=4096"

# Мульти-зміна (тільки для live-полів)
curl "http://<ip>:80/api/v1/set?video0.bitrate=4096&system.verbose=true"

# Зміна роздільної здатності (restart — reinit пайплайну)
curl "http://<ip>:80/api/v1/set?video0.size=1280x720"

Відповіді:

// Одне поле
{"ok": true, "data": {"field": "video0.bitrate", "value": 4096}}

// Мульти-зміна
{"ok": true, "data": {"applied": [
  {"field": "video0.bitrate", "value": 4096},
  {"field": "system.verbose", "value": true}
]}}

// Restart-поле
{"ok": true, "data": {"field": "video0.size", "value": "1280x720", "reinit_pending": true}}

Обмеження мульти-set

Мульти-set підтримується тільки для live-полів. Якщо хоча б одне restart-поле присутнє — весь запит відхиляється. Restart-зміни відправляйте по одній.

HTTP 409 — помилка валідації

Якщо значення невалідне (наприклад, неіснуючий режим AWB або якщо поле не існує), API поверне HTTP 409 Conflict замість звичайного 200.


GET /api/v1/restart

Повний reinit пайплайну. Перезавантажує /etc/venc.json та перезапускає камеру без завершення процесу.

curl http://<ip>:80/api/v1/restart

Контроль енкодера

GET /request/idr

Запит IDR-кейфрейму від енкодера:

curl http://<ip>:80/request/idr

Коли запитувати IDR

  • Після підключення нового глядача
  • Після втрати пакетів у радіоканалі
  • При появі артефактів відео

GET /api/v1/awb

Стан автобалансу білого від ISP:

curl http://<ip>:80/api/v1/awb

Запис на SD-картку

GET /api/v1/record/start

Почати запис. Використовує сконфігурований record.dir, або можна вказати каталог параметром:

# Запис у каталог за замовчуванням
curl "http://<ip>:80/api/v1/record/start"

# Запис у вказаний каталог
curl "http://<ip>:80/api/v1/record/start?dir=/mnt/mmcblk0p1"

GET /api/v1/record/stop

Зупинити запис:

curl "http://<ip>:80/api/v1/record/stop"

GET /api/v1/record/status

Статус запису:

curl "http://<ip>:80/api/v1/record/status"

Відповідь:

{
  "ok": true,
  "data": {
    "active": true,
    "format": "ts",
    "path": "/mnt/mmcblk0p1/rec_01h23m45s_abcd.ts",
    "frames": 1500,
    "bytes": 12345678,
    "segments": 1,
    "stop_reason": "none"
  }
}


Dual-Stream (Gemini-режим)

GET /api/v1/dual/status

Статус другого VENC-каналу:

curl "http://<ip>:80/api/v1/dual/status"

Відповідь:

{"ok": true, "data": {"active": true, "channel": 1, "bitrate": 20000, "fps": 120, "gop": 240}}

Dual VENC не активний

Якщо режим запису не "dual" або "dual-stream", цей ендпоінт поверне HTTP 404.

GET /api/v1/dual/set?param=value

Зміна параметрів другого каналу в реальному часі:

# Змінити бітрейт запису
curl "http://<ip>:80/api/v1/dual/set?bitrate=10000"

# Змінити GOP (у секундах)
curl "http://<ip>:80/api/v1/dual/set?gop=1.0"

GET /api/v1/dual/idr

IDR-кейфрейм для другого каналу:

curl "http://<ip>:80/api/v1/dual/idr"

ISP Image Quality

GET /api/v1/iq

Експорт усіх ISP-параметрів:

# Зберегти як файл
curl http://<ip>:80/api/v1/iq > my_tuning.json

POST /api/v1/iq/import

Імпорт ISP-параметрів (повний або частковий):

# Повний імпорт
curl -X POST -H "Content-Type: application/json" \
  -d @my_tuning.json http://<ip>:80/api/v1/iq/import

# Частковий імпорт — тільки конкретні параметри
echo '{"lightness":{"value":75},"demosaic":{"fields":{"dir_thrd":30}}}' | \
  curl -X POST -H "Content-Type: application/json" -d @- http://<ip>:80/api/v1/iq/import

GET /api/v1/iq/set?param=value

Зміна окремого ISP-параметра (dot-notation):

# Встановити одне поле
curl "http://<ip>:80/api/v1/iq/set?colortrans.y_ofst=200"

# Встановити масив (через кому)
curl "http://<ip>:80/api/v1/iq/set?colortrans.matrix=23,45,9,1005,987,56,56,977,1015"

Приклади типових сценаріїв

Швидке перемикання на 720p 90fps

curl "http://<ip>/api/v1/set?video0.size=1280x720"
# Чекаємо reinit...
curl "http://<ip>/api/v1/set?video0.fps=90"
curl "http://<ip>/api/v1/set?video0.bitrate=4096"

Ручний баланс білого (6500K)

curl "http://<ip>/api/v1/set?isp.awbMode=ct_manual"
curl "http://<ip>/api/v1/set?isp.awbCt=6500"

Увімкнення ROI-кодування для FPV

curl "http://<ip>/api/v1/set?fpv.roiEnabled=true"
curl "http://<ip>/api/v1/set?fpv.roiQp=-18"
curl "http://<ip>/api/v1/set?fpv.roiSteps=2"

Увімкнення EIS (тільки Star6E)

# Спочатку в /etc/venc.json:
# "imu": {"enabled": true}, "eis": {"enabled": true, "mode": "gyroglide"}
# Потім перезапуск:
curl http://<ip>/api/v1/restart

Калібрування IMU

Після перезапуску тримайте камеру нерухомо 2 секунди для автокалібрування гіроскопа.


Рекомендовані налаштування за сценарієм

FPV-рейсінг (мінімальна затримка)

{
  "video0": {"codec":"h265", "rcMode":"cbr", "fps":90, "size":"1280x720", "bitrate":6144, "gopSize":0.5},
  "fpv": {"roiEnabled":true, "roiQp":-12, "roiSteps":2, "roiCenter":0.35},
  "outgoing": {"streamMode":"rtp", "server":"unix://wfb_tx"}
}

FPV-фрістайл (якість + запис)

{
  "video0": {"codec":"h265", "rcMode":"cbr", "fps":60, "size":"1920x1080", "bitrate":8192, "gopSize":1.0},
  "fpv": {"roiEnabled":true, "roiQp":-18, "roiSteps":3, "roiCenter":0.4},
  "record": {"enabled":true, "mode":"dual", "bitrate":20000, "fps":120},
  "outgoing": {"streamMode":"rtp", "server":"unix://wfb_tx"}
}

Далекий зв'язок (long range)

{
  "video0": {"codec":"h265", "rcMode":"cbr", "fps":30, "size":"1280x720", "bitrate":3072, "gopSize":2.0},
  "fpv": {"roiEnabled":false},
  "outgoing": {"streamMode":"rtp", "server":"unix://wfb_tx"}
}

Наступні кроки