mirror of
				https://github.com/blakeblackshear/frigate.git
				synced 2025-10-27 10:52:11 +01:00 
			
		
		
		
	add camera level ffmpeg params
This commit is contained in:
		
							parent
							
								
									d3524ee46f
								
							
						
					
					
						commit
						d51e9446ff
					
				| @ -229,7 +229,12 @@ cameras: | ||||
|           hwaccel_args: | ||||
|           # Optional: stream specific input args (default: inherit) | ||||
|           input_args: | ||||
| 
 | ||||
|       # Optional: camera specific global args (default: inherit) | ||||
|       global_args: | ||||
|       # Optional: camera specific hwaccel args (default: inherit) | ||||
|       hwaccel_args: | ||||
|       # Optional: camera specific input args (default: inherit) | ||||
|       input_args: | ||||
|       # Optional: camera specific output args (default: inherit) | ||||
|       output_args: | ||||
| 
 | ||||
|  | ||||
| @ -164,6 +164,9 @@ CAMERA_FFMPEG_SCHEMA = vol.Schema( | ||||
|             'input_args': vol.Any(str, [str]), | ||||
|         }], vol.Msg(each_role_used_once, msg="Each input role may only be used once"),  | ||||
|             vol.Msg(detect_is_required, msg="The detect role is required")), | ||||
|         'global_args':  vol.Any(str, [str]), | ||||
|         'hwaccel_args': vol.Any(str, [str]), | ||||
|         'input_args': vol.Any(str, [str]), | ||||
|         'output_args': { | ||||
|             vol.Optional('detect', default=DETECT_FFMPEG_OUTPUT_ARGS_DEFAULT): vol.Any(str, [str]), | ||||
|             vol.Optional('record', default=RECORD_FFMPEG_OUTPUT_ARGS_DEFAULT): vol.Any(str, [str]), | ||||
| @ -392,12 +395,12 @@ class MqttConfig(): | ||||
|         } | ||||
| 
 | ||||
| class CameraInput(): | ||||
|     def __init__(self, global_config, ffmpeg_input): | ||||
|     def __init__(self, camera_config, global_config, ffmpeg_input): | ||||
|         self._path = ffmpeg_input['path'] | ||||
|         self._roles = ffmpeg_input['roles'] | ||||
|         self._global_args = ffmpeg_input.get('global_args', global_config['global_args']) | ||||
|         self._hwaccel_args = ffmpeg_input.get('hwaccel_args', global_config['hwaccel_args']) | ||||
|         self._input_args = ffmpeg_input.get('input_args', global_config['input_args']) | ||||
|         self._global_args = ffmpeg_input.get('global_args', camera_config.get('global_args', global_config['global_args'])) | ||||
|         self._hwaccel_args = ffmpeg_input.get('hwaccel_args', camera_config.get('hwaccel_args', global_config['hwaccel_args'])) | ||||
|         self._input_args = ffmpeg_input.get('input_args', camera_config.get('input_args', global_config['input_args'])) | ||||
| 
 | ||||
|     @property | ||||
|     def path(self): | ||||
| @ -421,7 +424,7 @@ class CameraInput(): | ||||
| 
 | ||||
| class CameraFfmpegConfig(): | ||||
|     def __init__(self, global_config, config): | ||||
|         self._inputs = [CameraInput(global_config, i) for i in config['inputs']] | ||||
|         self._inputs = [CameraInput(config, global_config, i) for i in config['inputs']] | ||||
|         self._output_args = config.get('output_args', global_config['output_args']) | ||||
| 
 | ||||
|     @property | ||||
|  | ||||
| @ -160,7 +160,7 @@ class TestConfig(TestCase): | ||||
|         assert('dog' in frigate_config.cameras['back'].objects.filters) | ||||
|         assert(frigate_config.cameras['back'].objects.filters['dog'].threshold == 0.7) | ||||
|      | ||||
|     def test_ffmpeg_params(self): | ||||
|     def test_ffmpeg_params_global(self): | ||||
|         config = { | ||||
|             'ffmpeg': { | ||||
|                 'input_args': ['-re'] | ||||
| @ -190,6 +190,64 @@ class TestConfig(TestCase): | ||||
|         } | ||||
|         frigate_config = FrigateConfig(config=config) | ||||
|         assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd']) | ||||
| 
 | ||||
|     def test_ffmpeg_params_camera(self): | ||||
|         config = { | ||||
|             'mqtt': { | ||||
|                 'host': 'mqtt' | ||||
|             }, | ||||
|             'cameras': { | ||||
|                 'back': { | ||||
|                     'ffmpeg': { | ||||
|                         'inputs': [ | ||||
|                             { 'path': 'rtsp://10.0.0.1:554/video', 'roles': ['detect'] } | ||||
|                         ], | ||||
|                         'input_args': ['-re'] | ||||
|                     }, | ||||
|                     'height': 1080, | ||||
|                     'width': 1920, | ||||
|                     'objects': { | ||||
|                         'track': ['person', 'dog'], | ||||
|                         'filters': { | ||||
|                             'dog': { | ||||
|                                 'threshold': 0.7 | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         frigate_config = FrigateConfig(config=config) | ||||
|         assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd']) | ||||
| 
 | ||||
|     def test_ffmpeg_params_input(self): | ||||
|         config = { | ||||
|             'mqtt': { | ||||
|                 'host': 'mqtt' | ||||
|             }, | ||||
|             'cameras': { | ||||
|                 'back': { | ||||
|                     'ffmpeg': { | ||||
|                         'inputs': [ | ||||
|                             { 'path': 'rtsp://10.0.0.1:554/video', 'roles': ['detect'], 'input_args': ['-re'] } | ||||
|                         ] | ||||
|                     }, | ||||
|                     'height': 1080, | ||||
|                     'width': 1920, | ||||
|                     'objects': { | ||||
|                         'track': ['person', 'dog'], | ||||
|                         'filters': { | ||||
|                             'dog': { | ||||
|                                 'threshold': 0.7 | ||||
|                             } | ||||
|                         } | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         frigate_config = FrigateConfig(config=config) | ||||
|         assert('-re' in frigate_config.cameras['back'].ffmpeg_cmds[0]['cmd']) | ||||
|      | ||||
|      | ||||
|     def test_inherit_clips_retention(self): | ||||
|         config = { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user