package nvcs import ( "encoding/xml" "fmt" "io/ioutil" dac "github.com/xinsnake/go-http-digest-auth-client" ) // 设置其他字符的第一个, 位置固定位7 // 摄像机信息暂时固定, 避免泄露 const ( hikISAPIOverlay7SetUrl = "/ISAPI/System/Video/inputs/channels/1/overlays/text/7" cameraWebAddr = "http://192.168.10.11:40080" cameraWebUser = "admin" cameraWebPassword = "a1234567" ) var overlayText TextOverlay type TextOverlay struct { Id int64 `xml:"id"` Enabled bool `xml:"enabled"` PositionX int64 `xml:"positionX"` PositionY int64 `xml:"positionY"` DisplayText string `xml:"displayText"` DirectAngle string `xml:"directAngle"` IsPersistentText bool `xml:"isPersistentText"` } func hikISAPIRequest(username, password, method, url, body string) ([]byte, error) { dr := dac.NewRequest(username, password, method, url, body) resp, err := dr.Execute() if err != nil { return nil, err } defer resp.Body.Close() return ioutil.ReadAll(resp.Body) } func addFloorToOSD(osdText string) error { overlay7Url := cameraWebAddr + hikISAPIOverlay7SetUrl // 获取左下角第一个字符的位置 if overlayText.DisplayText == "" { rsp, err := hikISAPIRequest(cameraWebUser, cameraWebPassword, "GET", overlay7Url, "") if err != nil { return fmt.Errorf("get osd info. %s", err.Error()) } err = xml.Unmarshal(rsp, &overlayText) if err != nil { return fmt.Errorf("xml unmarshal. %s", err.Error()) } } if overlayText.DisplayText == osdText { return nil } overlayText.DisplayText = osdText body, _ := xml.Marshal(overlayText) _, err := hikISAPIRequest(cameraWebUser, cameraWebPassword, "PUT", overlay7Url, string(body)) if err != nil { return fmt.Errorf("set osd. %s", err.Error()) } return nil }