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
|
}
|