Files
Strix/webui/CONFIG_GENERATORS.md
T
eduard256 7fd1d78ffa Add dual-stream support for Frigate with optional sub-stream selection
Features:
- Optional sub-stream selection from already discovered streams
- No additional scanning required - reuse existing results
- UI: "Add Sub Stream" button to select secondary stream
- UI: "Remove Sub Stream" button to clear selection
- Smart stream routing in Frigate configs
- Go2RTC: generates _main and _sub stream names
- Frigate: detect on sub (CPU efficient), record on main (quality)
- Frigate: auto-detection of stream resolution
- Object detection: person, car, cat, dog
- Motion-based recording by default
- Live view streams configuration
- Support for any resolution: HD, 4K, 8K+
- Comprehensive documentation with examples
2025-11-06 22:53:50 +03:00

280 lines
7.6 KiB
Markdown

# Configuration Generators Documentation
This document describes how Strix generates configurations for go2rtc and Frigate with support for main and sub streams.
## Go2RTC Generator (`webui/web/js/config-generators/go2rtc/index.js`)
### Purpose
Generates YAML configurations for go2rtc based on discovered camera streams. Supports both single stream and dual-stream (main + sub) configurations.
### Stream Naming Convention
**Format:** `<ip_with_underscores>_<suffix>`
**Examples:**
- Main: `192.168.1.100``192_168_1_100_main`
- Sub: `192.168.1.100``192_168_1_100_sub`
- Main: `10.0.20.112``10_0_20_112_main`
- Sub: `10.0.20.112``10_0_20_112_sub`
### Single Stream Configuration
When only a main stream is selected:
```yaml
streams:
'192_168_1_100_main':
- rtsp://admin:password@192.168.1.100/stream1
```
### Dual Stream Configuration (Main + Sub)
When both main and sub streams are selected:
```yaml
streams:
'192_168_1_100_main':
- rtsp://admin:password@192.168.1.100/live/main
'192_168_1_100_sub':
- rtsp://admin:password@192.168.1.100/live/sub
```
### Logic by Stream Type
#### 1. **JPEG Snapshots** (Special Case)
Static JPEG images require conversion to video stream using FFmpeg.
**Generated Config:**
```yaml
streams:
'10_0_20_112_main':
- exec:ffmpeg -loglevel quiet -f image2 -loop 1 -framerate 10 -i http://admin:pass@10.0.20.112/snapshot.jpg -c:v libx264 -preset ultrafast -tune zerolatency -g 20 -f rtsp {output}
```
**Parameters:**
- `-f image2 -loop 1`: Loop single image
- `-framerate 10`: 10 fps output
- `-c:v libx264`: H264 encoding
- `-preset ultrafast -tune zerolatency`: Low latency
- `-g 20`: GOP size for keyframes
- `-f rtsp {output}`: Output to RTSP (go2rtc internal)
#### 2. **All Other Formats** (Direct Pass-through)
For RTSP, MJPEG, HLS, HTTP-FLV, HTTP-TS, RTMP - use direct URL.
go2rtc has native support for these formats.
**Supported Formats:**
- **RTSP** (`rtsp://`) - Direct support
- **RTMP** (`rtmp://`) - Direct support
- **MJPEG** (`http://...mjpeg`) - Direct support
- **HLS** (`http://...m3u8`) - Direct support
- **HTTP-FLV** (`http://...flv`) - Direct support
- **HTTP-TS** (`http://...ts`) - Direct support
#### 3. **ONVIF Device Endpoints**
ONVIF URLs are converted to `onvif://` format:
```yaml
streams:
'192_168_1_100_main':
- onvif://admin:password@192.168.1.100:80
```
## Frigate Generator (`webui/web/js/config-generators/frigate/index.js`)
### Purpose
Generates unified Frigate + Go2RTC YAML configurations with intelligent stream routing for optimal performance.
### Key Features
- **Motion-based recording**: Records only when motion is detected
- **Object detection**: Tracks person, car, cat, dog
- **Smart stream routing**:
- If sub stream exists → detect on sub (low CPU), record on main (quality)
- If no sub stream → detect and record on main
### Benefits of Dual-Stream Setup
**Lower CPU usage**: Detection runs on lower resolution sub stream
**Better quality**: Recording uses high resolution main stream
**Single connection per camera**: Go2RTC multiplexes streams
**Optimal performance**: Each task uses appropriate stream quality
### Single Stream Configuration (Main Only)
When only main stream is selected, it handles both detection and recording:
```yaml
mqtt:
enabled: false
# Global Recording Settings
record:
enabled: true
retain:
days: 7
mode: motion # Record only on motion detection
# Go2RTC Configuration (Frigate built-in)
go2rtc:
streams:
'192_168_1_100_main':
- rtsp://admin:password@192.168.1.100/stream1
# Frigate Camera Configuration
cameras:
camera_192_168_1_100:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/192_168_1_100_main
input_args: preset-rtsp-restream
roles:
- detect
- record
objects:
track:
- person
- car
- cat
- dog
record:
enabled: true
version: 0.16-0
```
### Dual Stream Configuration (Main + Sub)
When both streams are selected, detection uses sub stream and recording uses main stream:
```yaml
mqtt:
enabled: false
# Global Recording Settings
record:
enabled: true
retain:
days: 7
mode: motion # Record only on motion detection
# Go2RTC Configuration (Frigate built-in)
go2rtc:
streams:
'192_168_1_100_main':
- rtsp://admin:password@192.168.1.100/live/main
'192_168_1_100_sub':
- rtsp://admin:password@192.168.1.100/live/sub
# Frigate Camera Configuration
cameras:
camera_192_168_1_100:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/192_168_1_100_sub
input_args: preset-rtsp-restream
roles:
- detect
- path: rtsp://127.0.0.1:8554/192_168_1_100_main
input_args: preset-rtsp-restream
roles:
- record
live:
streams:
Main Stream: 192_168_1_100_main # HD для просмотра
Sub Stream: 192_168_1_100_sub # Низкое разрешение (опционально)
objects:
track:
- person
- car
- cat
- dog
record:
enabled: true
version: 0.16-0
```
### Why Sub Stream for Detection?
**CPU Efficiency**: Processing lower resolution (typically 352x288 or 640x480) instead of HD/4K
**Faster Inference**: ML model runs faster on smaller resolution
**Sufficient Accuracy**: Object detection doesn't need Full HD or 4K
**Quality Recording**: Main stream at full resolution (HD/4K) saved to disk
**Auto-detection**: Frigate automatically detects stream resolution
### Camera Naming Convention
**Format:** `camera_<ip_with_underscores>`
**Examples:**
- `192.168.1.100``camera_192_168_1_100`
- `10.0.20.112``camera_10_0_20_112`
- `camera.local``camera_camera_local`
### Object Detection
The generator includes basic object detection for common use cases:
- **person** - Human detection
- **car** - Vehicle detection
- **cat** - Cat detection
- **dog** - Dog detection
To add more objects, edit the generated config and add items from [Frigate's object list](https://docs.frigate.video/configuration/objects/).
### Recording Mode
**Mode: `motion`** (Default)
- Records only when motion is detected
- Saves disk space
- May miss the start of an event
**To enable 24/7 recording**, change to:
```yaml
record:
enabled: true
retain:
days: 7
mode: all # Continuous recording
```
## Workflow
```
Stream Discovery
User selects Main Stream
Config generated (main only)
┌─────────────────────┐
│ User clicks │
│ "Add Sub Stream" │
└──────────┬──────────┘
User selects Sub Stream from existing results
Config regenerated (main + sub with optimized routing)
```
## Key Principles
1. **No additional scanning**: Sub stream is selected from already discovered streams
2. **Intelligent routing**: Sub for detect, main for record (when both available)
3. **Simplicity first**: Use direct URLs whenever possible
4. **Native support**: Leverage go2rtc's built-in format support
5. **Special cases only**: Only use exec:ffmpeg for JPEG snapshots
6. **Motion-based recording**: Save disk space by default
## Benefits of This Approach
**Better performance**: Optimal stream selection for each task
**Lower CPU usage**: Detection on lower resolution when sub stream available
**Quality recordings**: Full resolution saved to disk
**User flexibility**: Optional sub stream - not required
**No re-scanning**: Reuses already discovered streams
**Disk space efficiency**: Motion-based recording by default