github.com/qiniu/go-sdk/v7@v7.27.0/qvs/device.go (about) 1 package qvs 2 3 import ( 4 "context" 5 "net/url" 6 ) 7 8 type Device struct { 9 NamespaceId string `json:"nsId"` 10 Name string `json:"name"` 11 GBId string `json:"gbId"` 12 Type int `json:"type"` 13 Username string `json:"username"` 14 Password string `json:"password"` 15 PullIfRegister bool `json:"pullIfRegister"` // 按需拉流 16 Desc string `json:"desc"` 17 NamespaceName string `json:"nsName"` 18 State string `json:"state"` 19 Channels int `json:"channels"` 20 Vendor string `json:"vendor"` 21 CreatedAt int64 `json:"createdAt"` 22 UpdatedAt int64 `json:"updatedAt"` 23 LastRegisterAt int64 `json:"lastRegisterAt"` 24 LastKeepaliveAt int64 `json:"lastKeepaliveAt"` 25 } 26 27 type QueryChannelsArgs struct { 28 CmdArgs []string 29 Prefix string `json:"prefix"` 30 } 31 32 type Channel struct { 33 GBID string `json:"gbId"` 34 Name string `json:"name"` 35 State string `json:"state"` 36 Vendor string `json:"vendor"` 37 LastSyncAt int64 `json:"lastSyncAt"` 38 } 39 40 type DeviceChannels struct { 41 OnlineCount int `json:"onlineCount"` 42 OfflineCount int `json:"offlineCount"` 43 Total int `json:"total"` 44 Items []Channel `json:"items"` 45 } 46 47 type DeviceVideoItems struct { 48 Items []deviceVideoItem `json:"items"` 49 } 50 51 type deviceVideoItem struct { 52 PlayUrls RoutePlayUrls `json:"playUrls"` 53 Start int `json:"start"` 54 End int `json:"end"` 55 Type string `json:"type"` 56 } 57 58 /* 59 创建设备API 60 参数device需要赋值字段: 61 62 NamespaceId 必填 63 Name 64 GBId 65 Username 必填 66 Password 必填 67 PullIfRegister 68 Desc 69 Type 70 */ 71 func (manager *Manager) AddDevice(device *Device) (*Device, error) { 72 var ret Device 73 err := manager.client.CallWithJson(context.Background(), &ret, "POST", manager.url("/namespaces/%s/devices", device.NamespaceId), nil, device) 74 if err != nil { 75 return nil, err 76 } 77 return &ret, nil 78 } 79 80 /* 81 删除设备API 82 */ 83 func (manager *Manager) DeleteDevice(nsId string, gbId string) error { 84 return manager.client.Call(context.Background(), nil, "DELETE", manager.url("/namespaces/%s/devices/%s", nsId, gbId), nil) 85 } 86 87 /* 88 查询设备API 89 */ 90 func (manager *Manager) QueryDevice(nsId string, gbId string) (*Device, error) { 91 var ret Device 92 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s/devices/%s", nsId, gbId), nil) 93 if err != nil { 94 return nil, err 95 } 96 return &ret, nil 97 } 98 99 /* 100 查询设备列表API 101 */ 102 func (manager *Manager) ListDevice(nsId string, offset, line int, prefix, state string, qType int) ([]Device, int64, error) { 103 ret := struct { 104 Items []Device `json:"items"` 105 Total int64 `json:"total"` 106 }{} 107 108 query := url.Values{} 109 setQuery(query, "offset", offset) 110 setQuery(query, "line", line) 111 setQuery(query, "state", state) 112 setQuery(query, "prefix", prefix) 113 setQuery(query, "qtype", qType) 114 115 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s/devices?%v", nsId, query.Encode()), nil) 116 return ret.Items, ret.Total, err 117 } 118 119 /* 120 更新设备API 121 */ 122 func (manager *Manager) UpdateDevice(nsId string, gbId string, ops []PatchOperation) (*Device, error) { 123 req := M{"operations": ops} 124 var ret Device 125 err := manager.client.CallWithJson(context.Background(), &ret, "PATCH", manager.url("/namespaces/%s/devices/%s", nsId, gbId), nil, req) 126 if err != nil { 127 return nil, err 128 } 129 return &ret, nil 130 } 131 132 /* 133 启动设备拉流API 134 */ 135 func (manager *Manager) StartDevice(nsId string, gbId string, channels []string) error { 136 req := M{"channels": channels} 137 return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/namespaces/%s/devices/%s/start", nsId, gbId), nil, req) 138 } 139 140 /* 141 停止设备拉流API 142 */ 143 func (manager *Manager) StopDevice(nsId string, gbId string, channels []string) error { 144 req := M{"channels": channels} 145 return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/namespaces/%s/devices/%s/stop", nsId, gbId), nil, req) 146 } 147 148 /* 149 查询通道列表 150 */ 151 func (manager *Manager) ListChannels(nsId string, gbId string, prefix string) (*DeviceChannels, error) { 152 var ret DeviceChannels 153 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s/devices/%s/channels?prefix=%s", nsId, gbId, prefix), nil) 154 if err != nil { 155 return nil, err 156 } 157 return &ret, nil 158 } 159 160 /* 161 同步设备通道 162 */ 163 func (manager *Manager) FetchCatalog(nsId, gbId string) error { 164 return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/namespaces/%s/devices/%s/catalog/fetch", nsId, gbId), nil, nil) 165 } 166 167 /* 168 查询通道详情 169 */ 170 func (manager *Manager) QueryChannel(nsId, gbId, channelId string) (*Channel, error) { 171 var ret Channel 172 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s/devices/%s/channels/%s", nsId, gbId, channelId), nil) 173 if err != nil { 174 return nil, err 175 } 176 return &ret, nil 177 } 178 179 /* 180 删除通道 181 */ 182 func (manager *Manager) DeleteChannel(nsId, gbId, channelId string) error { 183 return manager.client.Call(context.Background(), nil, "DELETE", manager.url("/namespaces/%s/devices/%s/channels/%s", nsId, gbId, channelId), nil) 184 } 185 186 /* 187 查询本地录像列表 188 普通设备chId可以忽略, 置为空字符串即可 189 */ 190 func (manager *Manager) QueryGBRecordHistories(nsId, gbId, chId string, start, end int) (*DeviceVideoItems, error) { 191 var ret DeviceVideoItems 192 err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s/devices/%s/recordhistories?start=%d&end=%d&chId=%s", nsId, gbId, start, end, chId), nil) 193 if err != nil { 194 return nil, err 195 } 196 return &ret, nil 197 }