zhangzengfei
2024-10-22 a254bc563003a9e7b3a8f1307df38b8ae4274a4f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
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
}