mirror of
https://github.com/blakeblackshear/frigate.git
synced 2026-02-06 19:25:22 +03:00
[CHANGE] More resilient and slightly faster PTZ
This commit is contained in:
parent
9a4f970337
commit
1142e9ddd7
@ -98,6 +98,19 @@ class OnvifController:
|
|||||||
),
|
),
|
||||||
None,
|
None,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# status request for autotracking and filling ptz-parameters
|
||||||
|
status_request = ptz.create_type("GetStatus")
|
||||||
|
status_request.ProfileToken = profile.token
|
||||||
|
self.cams[camera_name]["status_request"] = status_request
|
||||||
|
try:
|
||||||
|
status = ptz.GetStatus(status_request)
|
||||||
|
logger.debug(f"Onvif status config for {camera_name}: {status}")
|
||||||
|
except Exception as e:
|
||||||
|
logger.warning(
|
||||||
|
f"Unable to get status from camera: {camera_name}: {e}"
|
||||||
|
)
|
||||||
|
status = None
|
||||||
|
|
||||||
# autoracking relative panning/tilting needs a relative zoom value set to 0
|
# autoracking relative panning/tilting needs a relative zoom value set to 0
|
||||||
# if camera supports relative movement
|
# if camera supports relative movement
|
||||||
@ -122,9 +135,7 @@ class OnvifController:
|
|||||||
move_request = ptz.create_type("RelativeMove")
|
move_request = ptz.create_type("RelativeMove")
|
||||||
move_request.ProfileToken = profile.token
|
move_request.ProfileToken = profile.token
|
||||||
if move_request.Translation is None and fov_space_id is not None:
|
if move_request.Translation is None and fov_space_id is not None:
|
||||||
move_request.Translation = ptz.GetStatus(
|
move_request.Translation = status.Position
|
||||||
{"ProfileToken": profile.token}
|
|
||||||
).Position
|
|
||||||
move_request.Translation.PanTilt.space = ptz_config["Spaces"][
|
move_request.Translation.PanTilt.space = ptz_config["Spaces"][
|
||||||
"RelativePanTiltTranslationSpace"
|
"RelativePanTiltTranslationSpace"
|
||||||
][fov_space_id]["URI"]
|
][fov_space_id]["URI"]
|
||||||
@ -146,7 +157,7 @@ class OnvifController:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if move_request.Speed is None:
|
if move_request.Speed is None:
|
||||||
move_request.Speed = ptz.GetStatus({"ProfileToken": profile.token}).Position
|
move_request.Speed = status.Position if status else None
|
||||||
self.cams[camera_name]["relative_move_request"] = move_request
|
self.cams[camera_name]["relative_move_request"] = move_request
|
||||||
|
|
||||||
# setup absolute moving request for autotracking zooming
|
# setup absolute moving request for autotracking zooming
|
||||||
@ -154,13 +165,6 @@ class OnvifController:
|
|||||||
move_request.ProfileToken = profile.token
|
move_request.ProfileToken = profile.token
|
||||||
self.cams[camera_name]["absolute_move_request"] = move_request
|
self.cams[camera_name]["absolute_move_request"] = move_request
|
||||||
|
|
||||||
# status request for autotracking
|
|
||||||
status_request = ptz.create_type("GetStatus")
|
|
||||||
status_request.ProfileToken = profile.token
|
|
||||||
self.cams[camera_name]["status_request"] = status_request
|
|
||||||
status = ptz.GetStatus(status_request)
|
|
||||||
logger.debug(f"Onvif status config for {camera_name}: {status}")
|
|
||||||
|
|
||||||
# setup existing presets
|
# setup existing presets
|
||||||
try:
|
try:
|
||||||
presets: list[dict] = ptz.GetPresets({"ProfileToken": profile.token})
|
presets: list[dict] = ptz.GetPresets({"ProfileToken": profile.token})
|
||||||
@ -486,7 +490,10 @@ class OnvifController:
|
|||||||
|
|
||||||
onvif: ONVIFCamera = self.cams[camera_name]["onvif"]
|
onvif: ONVIFCamera = self.cams[camera_name]["onvif"]
|
||||||
status_request = self.cams[camera_name]["status_request"]
|
status_request = self.cams[camera_name]["status_request"]
|
||||||
status = onvif.get_service("ptz").GetStatus(status_request)
|
try:
|
||||||
|
status = onvif.get_service("ptz").GetStatus(status_request)
|
||||||
|
except Exception as e:
|
||||||
|
pass # We're unsupported, that'll be reported in the next check.
|
||||||
|
|
||||||
# there doesn't seem to be an onvif standard with this optional parameter
|
# there doesn't seem to be an onvif standard with this optional parameter
|
||||||
# some cameras can report MoveStatus with or without PanTilt or Zoom attributes
|
# some cameras can report MoveStatus with or without PanTilt or Zoom attributes
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user