Add specific presets for restream and record with audio (#5094)

* Add more ffmpeg presets

* Update docs

* Update tests

* Update docs to optimize setup
This commit is contained in:
Nicolas Mowen 2023-01-15 08:40:42 -07:00 committed by GitHub
parent 65bc644d03
commit 99577a57e6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 21 deletions

View File

@ -29,12 +29,13 @@ Input args presets help make the config more readable and handle use cases for d
See [the camera specific docs](/configuration/camera_specific.md) for more info on non-standard cameras and recommendations for using them in Frigate. See [the camera specific docs](/configuration/camera_specific.md) for more info on non-standard cameras and recommendations for using them in Frigate.
| Preset | Usage | Other Notes | | Preset | Usage | Other Notes |
| ------------------------- | ----------------------- | --------------------------------------------------- | | ------------------------- | ------------------------- | --------------------------------------------------- |
| preset-http-jpeg-generic | HTTP Live Jpeg | Recommend restreaming live jpeg instead | | preset-http-jpeg-generic | HTTP Live Jpeg | Recommend restreaming live jpeg instead |
| preset-http-mjpeg-generic | HTTP Mjpeg Stream | Recommend restreaming mjpeg stream instead | | preset-http-mjpeg-generic | HTTP Mjpeg Stream | Recommend restreaming mjpeg stream instead |
| preset-http-reolink | Reolink HTTP-FLV Stream | Only for reolink http, not when restreaming as rtsp | | preset-http-reolink | Reolink HTTP-FLV Stream | Only for reolink http, not when restreaming as rtsp |
| preset-rtmp-generic | RTMP Stream | | | preset-rtmp-generic | RTMP Stream | |
| preset-rtsp-generic | RTSP Stream | This is the default when nothing is specified | | preset-rtsp-generic | RTSP Stream | This is the default when nothing is specified |
| preset-rtsp-restream | RTSP Stream from restream | Use when using rtsp restream as source |
| preset-rtsp-udp | RTSP Stream via UDP | Use when camera is UDP only | | preset-rtsp-udp | RTSP Stream via UDP | Use when camera is UDP only |
| preset-rtsp-blue-iris | Blue Iris RTSP Stream | Use when consuming a stream from Blue Iris | | preset-rtsp-blue-iris | Blue Iris RTSP Stream | Use when consuming a stream from Blue Iris |
@ -67,9 +68,10 @@ cameras:
Output args presets help make the config more readable and handle use cases for different types of streams to ensure consistent recordings. Output args presets help make the config more readable and handle use cases for different types of streams to ensure consistent recordings.
| Preset | Usage | Other Notes | | Preset | Usage | Other Notes |
| --------------------------- | --------------------------------- | --------------------------------------------- | | -------------------------------- | --------------------------------- | --------------------------------------------- |
| preset-record-generic | Record WITHOUT audio | This is the default when nothing is specified | | preset-record-generic | Record WITHOUT audio | This is the default when nothing is specified |
| preset-record-generic-audio | Record WITH audio | Use this to enable audio in recordings | | preset-record-generic-audio-aac | Record WITH aac audio | Use this to enable audio in recordings |
| preset-record-generic-audio-copy | Record WITH original audio | Use this to enable audio in recordings |
| preset-record-mjpeg | Record an mjpeg stream | Recommend restreaming mjpeg stream instead | | preset-record-mjpeg | Record an mjpeg stream | Recommend restreaming mjpeg stream instead |
| preset-record-jpeg | Record live jpeg | Recommend restreaming live jpeg instead | | preset-record-jpeg | Record live jpeg | Recommend restreaming live jpeg instead |
| preset-record-ubiquiti | Record ubiquiti stream with audio | Recordings with ubiquiti non-standard audio | | preset-record-ubiquiti | Record ubiquiti stream with audio | Recordings with ubiquiti non-standard audio |

View File

@ -47,8 +47,11 @@ One connection is made to the camera. One for the restream, `detect` and `record
cameras: cameras:
test_cam: test_cam:
ffmpeg: ffmpeg:
output_args:
record: preset-record-audio-copy
inputs: inputs:
- path: rtsp://127.0.0.1:8554/test_cam # <--- the name here must match the name of the camera - path: rtsp://127.0.0.1:8554/test_cam?video=copy&audio=aac # <--- the name here must match the name of the camera
input_args: preset-rtsp-restream
roles: roles:
- record - record
- detect - detect
@ -65,8 +68,11 @@ Two connections are made to the camera. One for the sub stream, one for the rest
cameras: cameras:
test_cam: test_cam:
ffmpeg: ffmpeg:
output_args:
record: preset-record-audio-copy
inputs: inputs:
- path: rtsp://127.0.0.1:8554/test_cam # <--- the name here must match the name of the camera - path: rtsp://127.0.0.1:8554/test_cam?video=copy&audio=aac # <--- the name here must match the name of the camera
input_args: preset-rtsp-restream
roles: roles:
- record - record
- path: rtsp://192.168.1.5:554/stream # <--- camera high res stream - path: rtsp://192.168.1.5:554/stream # <--- camera high res stream

View File

@ -247,6 +247,13 @@ PRESETS_INPUT = {
"-use_wallclock_as_timestamps", "-use_wallclock_as_timestamps",
"1", "1",
], ],
"preset-rtsp-restream": _user_agent_args
+ [
"-rtsp_transport",
"tcp",
TIMEOUT_PARAM,
"5000000",
],
"preset-rtsp-udp": _user_agent_args "preset-rtsp-udp": _user_agent_args
+ [ + [
"-avoid_negative_ts", "-avoid_negative_ts",
@ -311,7 +318,7 @@ PRESETS_RECORD_OUTPUT = {
"copy", "copy",
"-an", "-an",
], ],
"preset-record-generic-audio": [ "preset-record-generic-audio-aac": [
"-f", "-f",
"segment", "segment",
"-segment_time", "-segment_time",
@ -327,6 +334,20 @@ PRESETS_RECORD_OUTPUT = {
"-c:a", "-c:a",
"aac", "aac",
], ],
"preset-record-generic-audio-copy": [
"-f",
"segment",
"-segment_time",
"10",
"-segment_format",
"mp4",
"-reset_timestamps",
"1",
"-strftime",
"1",
"-c",
"copy",
],
"preset-record-mjpeg": [ "preset-record-mjpeg": [
"-f", "-f",
"segment", "segment",

View File

@ -136,10 +136,10 @@ class TestFfmpegPresets(unittest.TestCase):
def test_ffmpeg_output_record_preset(self): def test_ffmpeg_output_record_preset(self):
self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][ self.default_ffmpeg["cameras"]["back"]["ffmpeg"]["output_args"][
"record" "record"
] = "preset-record-generic-audio" ] = "preset-record-generic-audio-aac"
frigate_config = FrigateConfig(**self.default_ffmpeg) frigate_config = FrigateConfig(**self.default_ffmpeg)
frigate_config.cameras["back"].create_ffmpeg_cmds() frigate_config.cameras["back"].create_ffmpeg_cmds()
assert "preset-record-generic-audio" not in ( assert "preset-record-generic-audio-aac" not in (
" ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"]) " ".join(frigate_config.cameras["back"].ffmpeg_cmds[0]["cmd"])
) )
assert "-c:v copy -c:a aac" in ( assert "-c:v copy -c:a aac" in (