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  }