Інтеграція venc з WFB-ng¶
Ця інструкція описує, як повністю замінити Majestic на waybeam venc у зв'язці з WFB-ng (WiFi Broadcast) для FPV-стрімінгу з мінімальною затримкою.
Архітектура системи
┌─────────────────── КАМЕРА (VTX) ───────────────────┐
Сенсор → ISP → venc (H.265 encoder)
│
├─ RTP через Unix-сокет
▼
wfb_tx (WFB-ng TX)
│
▼
WiFi-адаптер (RTL8812EU / AU)
└──────────────────────────────────────────────────────┘
│ (радіоканал)
▼
┌──────────── НАЗЕМНА СТАНЦІЯ (GS) ────────────────────┐
WiFi-адаптер (RTL8812EU / AU)
│
▼
wfb_rx (WFB-ng RX)
│
├─ UDP → PixelPilot / QGroundControl
▼
Програвач відео (порт 5600)
└──────────────────────────────────────────────────────┘
Частина 1: Налаштування камери (VTX)
1.1 Передумови
Перед початком переконайтеся, що:
- ✅ OpenIPC прошивка встановлена на камері
- ✅ WFB-ng (
wfb_tx) встановлений та працює - ✅ WiFi-адаптер (RTL8812EU або RTL8812AU) підключений
- ✅ SSH-доступ до камери наявний
Встановлення venc
Якщо venc ще не встановлений, дивіться Встановлення venc на камеру.
1.2 Зупинити Majestic
# Зупинити Majestic
killall majestic 2>/dev/null
# Вимкнути автозапуск (якщо використовується init.d)
chmod -x /etc/init.d/S95majestic 2>/dev/null
1.3 Налаштування venc для WFB-ng
Головна відмінність від Majestic — спосіб передачі відео до WFB-ng.
Спосіб 1: Unix-сокет (рекомендований)
Найбільш ефективний метод — передача через абстрактний Unix-сокет. Це зменшує затримку порівняно з UDP, оскільки дані не проходять через мережевий стек ядра.
Відредагуйте /etc/venc.json:
{
"outgoing": {
"enabled": true,
"server": "unix://wfb_tx",
"streamMode": "rtp",
"maxPayloadSize": 1400,
"connectedUdp": true,
"audioPort": 0,
"sidecarPort": 0
}
}
Назва сокету
Назва wfb_tx у unix://wfb_tx — це ім'я абстрактного Unix-сокету. Воно повинно збігатися з налаштуванням WFB-ng на стороні передавача. Перевірте конфігурацію WFB-ng щоб упевнитися, що wfb_tx слухає цей сокет.
Спосіб 2: UDP на localhost
Якщо WFB-ng очікує RTP-потік через UDP:
{
"outgoing": {
"enabled": true,
"server": "udp://127.0.0.1:5600",
"streamMode": "rtp",
"maxPayloadSize": 1400,
"connectedUdp": true,
"audioPort": 0,
"sidecarPort": 0
}
}
Спосіб 3: Shared Memory (SHM)
Для максимальної продуктивності — через кільцевий буфер у спільній пам'яті:
{
"outgoing": {
"enabled": true,
"server": "shm://venc_ring",
"streamMode": "rtp",
"maxPayloadSize": 1400,
"connectedUdp": true,
"audioPort": 0,
"sidecarPort": 0
}
}
SHM та аудіо
shm:// працює тільки в режимі RTP.
Аудіо не підтримується через основний SHM-канал навіть при audioPort: 0.
Якщо вам потрібне аудіо при shm:// — встановіть audioPort > 0 (наприклад, 5601), аудіо піде на окремий UDP-порт.
1.4 Налаштування WFB-ng на камері
Конфігурація WFB-ng повинна відповідати способу передачі, який ви обрали в venc.
Для Unix-сокету — в конфігурації wfb_tx вкажіть той самий абстрактний сокет:
# У конфігурації wfb_tx
# Вхідний потік — з Unix-сокету від venc
peer = listen://unix://wfb_tx
Для UDP на localhost:
# У конфігурації wfb_tx
# Вхідний потік — UDP від venc
peer = listen://udp://127.0.0.1:5600
1.5 Оптимальні параметри відео для WFB-ng
Рекомендовані параметри для стабільного FPV-стрімінгу через WiFi Broadcast:
{
"video0": {
"codec": "h265",
"rcMode": "cbr",
"fps": 60,
"size": "1920x1080",
"bitrate": 8192,
"gopSize": 1.0,
"qpDelta": -4,
"frameLost": true,
"sceneThreshold": 0,
"sceneHoldoff": 2
}
}
Пояснення параметрів:
| Параметр | Рекомендація | Чому |
|---|---|---|
codec: "h265" |
H.265 | Краща якість при тому ж бітрейті; обов'язковий для RTP на Star6E |
rcMode: "cbr" |
CBR | Стабільний бітрейт — краще для радіоканалу |
fps: 60 |
60 fps | Баланс між плавністю і навантаженням |
bitrate: 8192 |
8 Мбіт/с | Оптимально для 20 МГц каналу WFB |
gopSize: 1.0 |
1 секунда | Швидке відновлення після втрати пакетів |
frameLost: true |
Увімкнено | Дозволяє пропускати кадри при перевантаженні |
Бітрейт і ширина каналу
Підбирайте бітрейт відповідно до пропускної здатності WFB-ng:
| Ширина каналу | MCS | Макс. бітрейт | Рекомендовано |
|---|---|---|---|
| 20 МГц | MCS 3 | ~20 Мбіт/с | 8–12 Мбіт/с |
| 20 МГц | MCS 1 | ~10 Мбіт/с | 4–6 Мбіт/с |
| 40 МГц | MCS 3 | ~40 Мбіт/с | 16–22 Мбіт/с |
1.6 Порядок запуску сервісів
Правильний порядок запуску на камері:
# 1. Завантажити WiFi-драйвер
insmod /lib/modules/88XXau.ko 2>/dev/null
# 2. Запустити WFB-ng TX
wfb_tx -u unix://wfb_tx -p 0 -k 8 -n 12 wlan0 &
# 3. Запустити venc
venc &
Init-скрипт
Для автоматичного запуску створіть init-скрипт як описано у Встановлення на камеру — Крок 7. Переконайтеся, що порядок номерів скриптів правильний: WiFi → WFB-ng → venc.
Частина 2: Налаштування наземної станції (GS)
2.1 Вимоги до наземної станції
| Компонент | Варіанти |
|---|---|
| Платформа | Radxa Zero 3W, Raspberry Pi 4/5, x86 Linux |
| WiFi-адаптер | RTL8812EU (рекомендовано) або RTL8812AU |
| Програвач | PixelPilot (Android), QGroundControl, ffplay |
2.2 Налаштування WFB-ng RX
На наземній станції WFB-ng приймає потік та виводить його на UDP-порт для програвача:
# Запуск WFB-ng приймача
wfb_rx -p 0 -c 127.0.0.1 -u 5600 -k 8 -n 12 wlan0
Параметри повинні збігатися з налаштуваннями TX на камері:
| Параметр | TX (камера) | RX (наземка) | Опис |
|---|---|---|---|
-k |
8 |
8 |
Data-блоки FEC |
-n |
12 |
12 |
Всього блоків FEC |
-p |
0 |
0 |
Порт (канал) WFB |
2.3 Перегляд відео
PixelPilot (Android)
- Підключіть наземну станцію до телефону
- Відкрийте PixelPilot
- Встановіть RTP-джерело:
udp://0.0.0.0:5600
ffplay (Linux / Mac)
ffplay -fflags nobuffer -flags low_delay -framedrop \
-analyzeduration 0 -probesize 32 \
-i udp://0.0.0.0:5600
QGroundControl
- Відкрийте налаштування → Video
- Встановіть «Video Source»:
UDP h.265 Video Stream - Порт:
5600
GStreamer
gst-launch-1.0 udpsrc port=5600 \
caps="application/x-rtp,media=video,encoding-name=H265" ! \
rtph265depay ! h265parse ! avdec_h265 ! autovideosink sync=false
Частина 3: Аудіо через WFB-ng
venc підтримує передачу аудіо паралельно з відео:
3.1 Увімкнення аудіо на камері
Оновіть /etc/venc.json:
{
"audio": {
"enabled": true,
"sampleRate": 16000,
"channels": 1,
"codec": "g711a",
"volume": 80,
"mute": false
},
"outgoing": {
"audioPort": 5601
}
}
Аудіо та Unix-сокет
При використанні unix:// та audioPort: 0 аудіо передається разом з відео через той самий сокет. При audioPort > 0 аудіо відправляється на окремий UDP-порт 127.0.0.1:<audioPort>.
3.2 Прийом аудіо на наземній станції
# Окремий WFB-канал для аудіо
wfb_rx -p 1 -c 127.0.0.1 -u 5601 -k 4 -n 8 wlan0
# Відтворення
ffplay -nodisp -fflags nobuffer -i udp://0.0.0.0:5601
Частина 4: Адаптивний контроль (просунуте)
4.1 Scene-Change IDR
Для покращення відновлення потоку при різких змінах сцени (зліт, маневри):
# Увімкнути детекцію сцен (тільки Star6E)
curl "http://localhost/api/v1/set?video0.sceneThreshold=150"
curl "http://localhost/api/v1/set?video0.sceneHoldoff=2"
sceneThreshold: 150— тригер при ≈1.5x стрибку розміру кадруsceneHoldoff: 2— мінімальний інтервал між IDR кадрами
4.2 Sidecar для зовнішнього контролера
Якщо ви використовуєте зовнішній контролер якості зв'язку (adaptive link):
curl "http://localhost/api/v1/set?outgoing.sidecarPort=6666"
Sidecar надсилає покадрову телеметрію: frame_type, complexity, scene_change, idr_inserted, frames_since_idr.
Частина 5: Запис на SD-картку
venc підтримує одночасний стрімінг та запис:
# Увімкнити запис через API
curl "http://localhost/api/v1/record/start"
# Перевірити статус
curl "http://localhost/api/v1/record/status"
# Зупинити запис
curl "http://localhost/api/v1/record/stop"
Gemini-режим — стрімінг на WFB-ng у низькому бітрейті, а запис на SD у високій якості:
{
"record": {
"enabled": true,
"mode": "dual",
"dir": "/mnt/mmcblk0p1",
"format": "ts",
"bitrate": 20000,
"fps": 120,
"gopSize": 2
}
}
Безпека записів
Формат MPEG-TS не потребує фіналізації файлу. Навіть при раптовому відключенні живлення запис буде читабельним до останнього записаного пакету.
Перевірка інтеграції
Після налаштування виконайте перевірку:
# 1. На камері — перевірити, що venc стрімить
curl http://localhost/api/v1/config | grep -A5 outgoing
# 2. На камері — перевірити FPS
curl http://localhost/api/v1/version
# 3. На наземній станції — перевірити прийом
# (має показати відео без значних затримок)
ffplay -fflags nobuffer -i udp://0.0.0.0:5600
# 4. Запитати IDR-кейфрейм для початку декодування
curl http://192.168.1.10/request/idr
Порівняння: venc + WFB-ng vs Majestic + WFB-ng
| Аспект | venc + WFB-ng | Majestic + WFB-ng |
|---|---|---|
| Затримка | Нижча (Unix-сокет / SHM) | UDP через мережевий стек |
| API | 84 параметри в реальному часі | Обмежений набір |
| Запис | Gemini-режим (стрім + запис) | Базовий |
| ISP-тюнінг | 60+ параметрів + export/import | Обмежений |
| EIS | GyroGlide-Lite (Star6E) | Немає |
| Веб-панель | Вбудована з повним керуванням | — |
| Сирці | Відкриті (MIT) | Закриті |
Наступні кроки
- Веб-панель та HTTP API — керування через браузер
- Огляд waybeam venc — всі можливості
- Встановлення на камеру — початкове встановлення