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 }