github.com/qiniu/go-sdk/v7@v7.27.0/qvs/namespace.go (about)

     1  package qvs
     2  
     3  import (
     4  	"context"
     5  	"net/url"
     6  )
     7  
     8  type M map[string]interface{}
     9  
    10  type PatchOperation struct {
    11  	Op    string      `json:"op"`    // 更该或删除某个属性,replace:更改,delete:删除
    12  	Key   string      `json:"key"`   // 要修改或删除的属性
    13  	Value interface{} `json:"value"` // 要修改或删除属性的值
    14  }
    15  
    16  type DomainInfo struct {
    17  	Domain string `json:"domain"`
    18  	Type   string `json:"type"`
    19  	CNAME  string `json:"cname"`
    20  	State  int    `json:"state"`
    21  }
    22  
    23  type SipAddr struct {
    24  	SipServerID   string   `json:"sipServerId,omitempty"`
    25  	SipServerIP   string   `json:"sipServerIP,omitempty"`
    26  	SipServerPort []string `json:"sipServerPort,omitempty"`
    27  }
    28  
    29  type NameSpace struct {
    30  	ID                     string   `json:"id"`
    31  	Name                   string   `json:"name"`                         // 空间名称(格式"^[a-zA-Z0-9_-]{1,100}$")
    32  	Desc                   string   `json:"desc,omitempty"`               // 空间描述
    33  	AccessType             string   `json:"accessType"`                   // 接入类型"gb28181"或者“rtmp”
    34  	RTMPURLType            int      `json:"rtmpUrlType"`                  // accessType为“rtmp”时,推拉流地址计算方式,1:static, 2:dynamic
    35  	Zone                   string   `json:"zone"`                         // zone为服务区域配置项,可选项为z0, z1, z2,默认为z0. z0表示华东, z1表示华北、z2表示华南
    36  	Domains                []string `json:"domains"`                      // 直播域名
    37  	Callback               string   `json:"callback,omitempty"`           // 后台服务器回调URL
    38  	Disabled               bool     `json:"disabled"`                     // 流是否被启用, false:启用,true:禁用
    39  	RecordTemplateId       string   `json:"recordTemplateId,omitempty"`   // 录制模版id
    40  	SnapShotTemplateId     string   `json:"snapshotTemplateId,omitempty"` // 截图模版id
    41  	RecordTemplateApplyAll bool     `json:"recordTemplateApplyAll"`       // 空间模版是否应用到全局
    42  	SnapTemplateApplyAll   bool     `json:"snapshotTemplateApplyAll"`     // 截图模版是否应用到全局
    43  	HLSLowLatency          bool     `json:"hlsLowLatency"`                // HLS低延时开关
    44  	CreatedAt              int64    `json:"createdAt,omitempty"`          // 空间创建时间
    45  	UpdatedAt              int64    `json:"updatedAt,omitempty"`          // 空间更新时间
    46  	DevicesCount           int64    `json:"deviceCount"`                  // 设备数量
    47  	StreamCount            int64    `json:"streamCount"`                  // 流数量
    48  	OnlineStreamCount      int64    `json:"onlineStreamCount"`            // 在线流数量
    49  	DisabledStreamCount    int64    `json:"disabledStreamCount"`          // 禁用流数量
    50  
    51  	UrlMode  int       `json:"urlMode"`  // 推拉流地址计算方式,1:static, 2:dynamic
    52  	SipAddrs []SipAddr `json:"sipAddrs"` // sip信息数组
    53  
    54  	OnDemandPull bool `json:"onDemandPull"` // 按需拉流开关
    55  }
    56  
    57  /*
    58  创建空间API
    59  
    60  请求参数Body:
    61  name必填
    62  accessType必填
    63  rtmpUrlType当accessType为"rtmp"时必填
    64  domains当rtmpUrlType为1时必填
    65  */
    66  func (manager *Manager) AddNamespace(ns *NameSpace) (*NameSpace, error) {
    67  	var ret NameSpace
    68  	err := manager.client.CallWithJson(context.Background(), &ret, "POST", manager.url("/namespaces"), nil, ns)
    69  	if err != nil {
    70  		return nil, err
    71  	}
    72  	return &ret, nil
    73  }
    74  
    75  /*
    76  查询空间信息API
    77  */
    78  func (manager *Manager) QueryNamespace(nsId string) (*NameSpace, error) {
    79  	var ret NameSpace
    80  	err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s", nsId), nil)
    81  	if err != nil {
    82  		return nil, err
    83  	}
    84  	return &ret, nil
    85  }
    86  
    87  /*
    88  更新空间API
    89  
    90  可编辑参数: name/desc/callBack/recordTemplateId/snapshotTemplateId/recordTemplateApplyAll/snapshotTemplateApplyAll
    91  */
    92  func (manager *Manager) UpdateNamespace(nsId string, ops []PatchOperation) (*NameSpace, error) {
    93  	req := M{"operations": ops}
    94  	var ret NameSpace
    95  	err := manager.client.CallWithJson(context.Background(), &ret, "PATCH", manager.url("/namespaces/%s", nsId), nil, req)
    96  	if err != nil {
    97  		return nil, err
    98  	}
    99  	return &ret, nil
   100  }
   101  
   102  /*
   103  删除空间API
   104  */
   105  func (manager *Manager) DeleteNamespace(nsId string) error {
   106  	return manager.client.Call(context.Background(), nil, "DELETE", manager.url("/namespaces/%s", nsId), nil)
   107  }
   108  
   109  /*
   110  列出空间API
   111  */
   112  func (manager *Manager) ListNamespace(offset, line int, sortBy string) ([]NameSpace, int64, error) {
   113  	ret := struct {
   114  		Items []NameSpace `json:"items"`
   115  		Total int64       `json:"total"`
   116  	}{}
   117  
   118  	query := url.Values{}
   119  	setQuery(query, "offset", offset)
   120  	setQuery(query, "line", line)
   121  	setQuery(query, "sortBy", sortBy)
   122  
   123  	err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces?%v", query.Encode()), nil)
   124  	return ret.Items, ret.Total, err
   125  }
   126  
   127  /*
   128  禁用空间API
   129  */
   130  func (manager *Manager) DisableNamespace(nsId string) error {
   131  	return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/namespaces/%s/disabled", nsId), nil, nil)
   132  }
   133  
   134  /*
   135  启用空间API
   136  */
   137  func (manager *Manager) EnableNamespace(nsId string) error {
   138  	return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/namespaces/%s/enabled", nsId), nil, nil)
   139  }
   140  
   141  /*
   142  添加域名API
   143  
   144  请求参数Body: 只需填入domain和type
   145  
   146  domainType支持四种类型 "publishRtmp":rtmp推流, "liveRtmp": rtmp播放, "liveHls": hls播放, "liveHdl": flv播放
   147  */
   148  func (manager *Manager) AddDomain(nsId string, domainInfo *DomainInfo) error {
   149  	return manager.client.CallWithJson(context.Background(), nil, "POST", manager.url("/namespaces/%s/domains", nsId), nil, domainInfo)
   150  }
   151  
   152  /*
   153  删除域名API
   154  */
   155  func (manager *Manager) DeleteDomain(nsId string, domain string) error {
   156  	return manager.client.Call(context.Background(), nil, "DELETE", manager.url("/namespaces/%s/domains/%s", nsId, domain), nil)
   157  }
   158  
   159  /*
   160  域名列表API
   161  */
   162  func (manager *Manager) ListDomain(nsId string) ([]DomainInfo, error) {
   163  	ret := struct {
   164  		Items []DomainInfo `json:"items"`
   165  	}{}
   166  
   167  	err := manager.client.Call(context.Background(), &ret, "GET", manager.url("/namespaces/%s/domains", nsId), nil)
   168  	return ret.Items, err
   169  }