mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-05-01 19:17:41 +03:00
This change adds first-class adaptive recording playback using main and sub recording variants. Frigate can now store multiple recording variants per camera, expose those variants through the recordings API, and serve variant-specific VOD playlists through routes such as /vod/variant/sub/....
The UI now uses the available recording variants and browser playback capability to choose an appropriate playback source, with a user-selectable Auto, Main, and Sub preference. This is applied across timeline playback, export preview, and object detail playback.
The backend also includes a fallback path for sub playback: when a native sub recording is not available for a requested time range, Frigate can generate a lower-resolution sub recording from the main segment, store it under the standard sub variant, and mark it with transcoded_from_main.
Additional changes include recording metadata for codec, resolution, bitrate, and variant; database migrations for recording variants and generated-sub tracking; tests for variant VOD selection and fallback behavior; improved storage graph sorting; and a small MQTT TLS guard so tls_insecure is only applied when TLS is configured.
Substream Configuration Examples
Record the main stream as the normal full-resolution recording and also record the camera substream as the sub variant:
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://user:password@192.168.1.10:554/main
roles:
- record
record_variant: main
- path: rtsp://user:password@192.168.1.10:554/sub
roles:
- detect
- record
record_variant: sub
detect:
width: 640
height: 360
fps: 5
record:
enabled: true
Using go2rtc restreams:
go2rtc:
streams:
front_door:
- rtsp://user:password@192.168.1.10:554/main
front_door_sub:
- rtsp://user:password@192.168.1.10:554/sub
cameras:
front_door:
ffmpeg:
inputs:
- path: rtsp://127.0.0.1:8554/front_door
input_args: preset-rtsp-restream
roles:
- record
record_variant: main
- path: rtsp://127.0.0.1:8554/front_door_sub
input_args: preset-rtsp-restream
roles:
- detect
- record
record_variant: sub
detect:
width: 640
height: 360
fps: 5
record:
enabled: true
If record_variant is omitted on a record input, it defaults to main. Each camera can only use a given recording variant once, so the main and sub recording inputs should use distinct variant names.
|
||
|---|---|---|
| .. | ||
| 001_create_events_table.py | ||
| 002_add_clip_snapshot.py | ||
| 003_create_recordings_table.py | ||
| 004_add_bbox_region_area.py | ||
| 005_make_end_time_nullable.py | ||
| 006_add_motion_active_objects.py | ||
| 007_add_retain_indefinitely.py | ||
| 008_add_sub_label.py | ||
| 009_add_object_filter_ratio.py | ||
| 010_add_plus_image_id.py | ||
| 011_update_indexes.py | ||
| 012_add_segment_size.py | ||
| 013_create_timeline_table.py | ||
| 014_event_updates_for_fp.py | ||
| 015_event_refactor.py | ||
| 016_sublabel_increase.py | ||
| 017_update_indexes.py | ||
| 018_add_dbfs.py | ||
| 019_create_regions_table.py | ||
| 020_update_index_recordings.py | ||
| 021_create_previews_table.py | ||
| 022_create_review_segment_table.py | ||
| 023_add_regions.py | ||
| 024_create_export_table.py | ||
| 025_create_user_table.py | ||
| 026_add_notification_tokens.py | ||
| 027_create_explore_index.py | ||
| 028_optional_event_thumbnail.py | ||
| 029_add_user_role.py | ||
| 030_create_user_review_status.py | ||
| 031_create_trigger_table.py | ||
| 032_add_password_changed_at.py | ||
| 033_create_export_case_table.py | ||
| 034_add_export_case_to_exports.py | ||
| 035_add_motion_heatmap.py | ||
| 036_add_recording_variants.py | ||
| 037_add_recordings_transcoded_from_main.py | ||