7fd1d78ffa
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
280 lines
7.6 KiB
Markdown
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
|