From 523fe81fb25007ef19f63cfaf16c486ad21a131c Mon Sep 17 00:00:00 2001 From: ila <2+ila@noreply.git.ilapage.cn> Date: Thu, 13 Aug 2026 11:52:26 +0800 Subject: [PATCH] fix: parse ONVIF media service address (#48) --- .../server/app/sense/adapters/onvif/parser.go | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/Sense/server/app/sense/adapters/onvif/parser.go b/Sense/server/app/sense/adapters/onvif/parser.go index 56b2665..f3b1283 100644 --- a/Sense/server/app/sense/adapters/onvif/parser.go +++ b/Sense/server/app/sense/adapters/onvif/parser.go @@ -54,3 +54,33 @@ func ParseStreamURI(data []byte) (string, error) { } } } + +func ParseMediaServiceAddress(data []byte) (string, error) { + decoder := xml.NewDecoder(strings.NewReader(string(data))) + mediaDepth := 0 + for { + token, err := decoder.Token() + if err != nil { + return "", fmt.Errorf("media_service_not_found") + } + switch value := token.(type) { + case xml.StartElement: + if value.Name.Local == "Media" { + mediaDepth++ + continue + } + if mediaDepth > 0 && value.Name.Local == "XAddr" { + var address string + if err := decoder.DecodeElement(&address, &value); err != nil { + return "", err + } + return strings.TrimSpace(address), nil + } + case xml.EndElement: + if value.Name.Local == "Media" && mediaDepth > 0 { + mediaDepth-- + } + } + } +} +