Extend onvif server to support Unifi Protect

This commit is contained in:
Alex Cortelyou
2024-12-23 23:43:39 -08:00
parent 8ecaabfce9
commit 3a50b3678d
2 changed files with 103 additions and 10 deletions
+13
View File
@@ -70,6 +70,10 @@ func onvifDeviceService(w http.ResponseWriter, r *http.Request) {
// important for Hass: Media section
res = onvif.GetCapabilitiesResponse(r.Host)
case onvif.ActionGetServices:
// important for Unifi: Media section
res = onvif.GetServicesResponse(r.Host)
case onvif.ActionGetSystemDateAndTime:
// important for Hass
res = onvif.GetSystemDateAndTimeResponse()
@@ -95,8 +99,13 @@ func onvifDeviceService(w http.ResponseWriter, r *http.Request) {
case onvif.ActionGetProfiles:
// important for Hass: H264 codec, width, height
// important for Unifi: framerate, bitrate, quality
res = onvif.GetProfilesResponse(streams.GetAll())
case onvif.ActionGetVideoSources:
// important for Unifi: framerate, resolution
res = onvif.GetVideoSourcesResponse(streams.GetAll())
case onvif.ActionGetStreamUri:
host, _, err := net.SplitHostPort(r.Host)
if err != nil {
@@ -107,6 +116,10 @@ func onvifDeviceService(w http.ResponseWriter, r *http.Request) {
uri := "rtsp://" + host + ":" + rtsp.Port + "/" + onvif.FindTagValue(b, "ProfileToken")
res = onvif.GetStreamUriResponse(uri)
case onvif.ActionGetSnapshotUri:
uri := "http://" + r.Host + "/api/frame.jpeg?src=" + onvif.FindTagValue(b, "ProfileToken")
res = onvif.GetSnapshotUriResponse(uri)
default:
http.Error(w, "unsupported action", http.StatusBadRequest)
log.Debug().Msgf("[onvif] unsupported request:\n%s", b)