Веб-панель та 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"}
}
Наступні кроки
- Огляд waybeam venc — повний список можливостей
- Встановлення на камеру — початкове встановлення
- Інтеграція з WFB-ng — налаштування зв'язки з WFB