简介
此SDK主要帮助您快速接入七牛云的视频监控平台
主要有如下功能:
- 空间管理
- 流管理
- 设备管理
- 模板管理
- 录制管理
- 数据统计管理
开源
安装
$ go get -u github.com/qiniu/api.v7
鉴权
七牛 Go SDK 的所有的功能,都需要合法的授权。授权凭证的签算需要七牛账号下的一对有效的Access Key
和Secret Key
,这对密钥可以通过如下步骤获得:
- 点击注册开通七牛开发者帐号
- 如果已有账号,直接登录七牛开发者后台,点击这里🔗查看 Access Key 和 Secret Key
快速接入
下面以rtmp
接入方式举例,讲述接入流程,sdk接口详细说明见后面的章节
- 创建qvs manager
ak := "your access key"
sk := "your secret key"
mac := auth.New(ak, sk)
manager := qvs.NewManager(mac, nil)
- 创建空间
构造好NameSpace
结构体之后,调用AddNamespace
创建空间
ns := &NameSpace{
Name: "testNamespace",
AccessType: "rtmp",// 接入类型"gb28181"或者“rtmp”
RTMPURLType: 1, // accessType为“rtmp”时,推拉流地址计算方式,1:static, 2:dynamic
Domains: []string{"qiniu1.com"}, // 直播域名
}
ns1, err := manager.AddNamespace(ns)
- 创建流
构造好Stream
结构体之后,调用AddStream
创建流
stream := &Stream{
StreamID: "test001",
}
_, err = manager.AddStream(ns1.ID, stream)
- 生成推拉流地址
ret, err := manager.DynamicPublishPlayURL("2akrarwwhi0ff", "test1", &qvs.DynamicLiveRoute{PublishIP: "127.0.0.1", PlayIP: "127.0.0.1", UrlExpireSec: 0})
if err != nil {
fmt.Printf("err=%s\n", err.Error())
}
publishUrl := ret.PublishUrl
playUrl := ret.PlayUrls.Rtmp
- 在推流端(一般是摄像头)使用
publishUrl
推流
- 可以使用
ffplay
或者vlc
播放playUrl
的流
空间管理
空间管理的所有接口需要先通过ak
、sk
创建qvs manager
ak := "your access key"
sk := "your secret key"
mac := auth.New(ak, sk)
manager := qvs.NewManager(mac, nil)
创建空间
func (manager *Manager) AddNamespace(ns *NameSpace) (*NameSpace, error)
参数说明
NameSpace结构体说明
成员 |
类型 |
是否必须 |
说明 |
ID |
string |
否 |
空间id |
Name |
string |
是 |
空间名称(格式"^[a-zA-Z0-9_-]{1,100}$") |
Desc |
string |
否 |
空间描述 |
AccessType |
string |
是 |
接入类型"gb28181"或者“rtmp” |
RTMPURLType |
int |
当accessType为"rtmp"时必填 |
accessType为“rtmp”时,推拉流地址计算方式,1:static, 2:dynamic |
Zone |
string |
否 |
zone为服务区域配置项,可选项为z0, z1, z2,默认为z0. z0表示华东, z1表示华北、z2表示华南 |
Domains |
[]string |
当rtmpUrlType为1时必填 |
直播域名 |
Callback |
string |
否 |
后台服务器回调URL |
Disabled |
bool |
否 |
流是否被启用, false:启用,true:禁用 |
RecordTemplateId |
string |
否 |
录制模版id |
SnapShotTemplateId |
string |
否 |
截图模版id |
RecordTemplateApplyAll |
bool |
否 |
空间模版是否应用到全局 |
SnapTemplateApplyAll |
bool |
否 |
截图模版是否应用到全局 |
HLSLowLatency |
bool |
否 |
HLS低延时开关 |
CreatedAt |
int64 |
否 |
空间创建时间 |
UpdatedAt |
int64 |
否 |
空间更新时间 |
DevicesCount |
int64 |
否 |
设备数量 |
StreamCount |
int64 |
否 |
流数量 |
OnlineStreamCount |
int64 |
否 |
在线流数量 |
DisabledStreamCount |
int64 |
否 |
禁用流数量 |
OnDemandPull |
bool |
否 |
按需拉流开关,默认关闭 |
示例
ns := &NameSpace{
Name: "testNamespace",
AccessType: "rtmp",// 接入类型"gb28181"或者“rtmp”
RTMPURLType: 1, // accessType为“rtmp”时,推拉流地址计算方式,1:static, 2:dynamic
Domains: []string{"qiniu1.com"}, // 直播域名
}
ns1, err := manager.AddNamespace(ns)
删除空间
func (manager *Manager) DeleteNamespace(nsId string)
参数说明
示例
// 删除空间
nsId := "2akrarsj8zp0w"
manager.DeleteNamespace(nsId)
更新空间
func (manager *Manager) UpdateNamespace(nsId string, ops []PatchOperation) (*NameSpace, error)
参数说明
PatchOperation结构体说明
成员 |
类型 |
说明 |
Op |
string |
更该或删除某个属性,replace:更改,delete:删除 |
Key |
string |
要修改或删除的属性 |
Value |
interface |
要修改或删除属性的值 |
示例
// 更新空间
nsId := "2akrarsj8zp0w"
ops := []PatchOperation{
{
Op: "replace",
Key: "name",
Value: "testNamespace2",
},
{
Op: "replace",
Key: "zone",
Value: "z1",
},
}
ns3, err := manager.UpdateNamespace(nsId, ops)
查询空间信息
func (manager *Manager) QueryNamespace(nsId string) (*NameSpace, error)
参数说明
示例
// 查询空间信息
nsId := "2akrarsj8zp0w"
manager.DeleteNamespace(nsId)
获取空间列表
func (manager *Manager) ListNamespace(offset, line int, sortBy string) ([]NameSpace, int64, error)
参数说明
参数 |
说明 |
offset |
在全部namespace中的偏移量 |
line |
一次返回多少条 |
sortBy |
asc 表示升序, desc 表示降序, 默认按创建时间降序排列(可参与排序的字段有createdAt, updatedAt).asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 |
示例
// 获取空间列表
offset := 0
line := 100
sortBy := "asc"
nss, total, err := manager.ListNamespace(offset, line, sortBy)
禁用空间
func (manager *Manager) DisableNamespace(nsId string) error
参数说明
示例
// 禁用空间
nsId := "2akrarsj8zp0w"
err := manager.DisableNamespace(nsId)
启用空间
func (manager *Manager) EnableNamespace(nsId string) error
参数说明
示例
// 启用空间
nsId := "2akrarsj8zp0w"
err := manager.EnableNamespace(nsId)
流管理
创建流
本接口仅用于接入类型为RTMP的空间
func (manager *Manager) AddStream(nsId string, stream *Stream) (*Stream, error)
参数说明
Stream结构体说明
StreamID |
类型 |
说明 |
StreamID |
string |
流名称, 流名称在空间中唯一,可包含 字母、数字、中划线、下划线;1 ~ 100 个字符长;创建后将不可修改 |
Desc |
string |
关于流的描述信息 |
NamespaceId |
string |
所属的空间ID |
Namespace |
string |
所属的空间名称 |
RecordTemplateId |
string |
录制模版ID,配置流维度的录制模板 |
SnapShotTemplateId |
string |
截图模版ID,配置流维度的截图模板 |
Status |
bool |
设备是否在线 |
Disabled |
bool |
流是否被禁用 |
LastPushedAt |
int64 |
最后一次推流时间,0:表示没有推流 |
CreatedAt |
int64 |
流创建时间 |
UpdatedAt |
int64 |
流更新时间 |
UserCount |
int |
在线观看人数 |
ClientIp |
string |
推流端ip |
AudioFrameRate |
int64 |
直播流的实时音频帧率 |
BitRate |
int64 |
直播流的实时码率 |
VideoFrameRate |
int64 |
直播流的实时视频帧率 |
示例
// 创建流
stream := &Stream{
StreamID: "test003",
}
_, err = manager.AddStream(ns1.ID, stream)
删除流
func (manager *Manager) DeleteStream(nsId string, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
// 删除流
manager.DeleteStream(ns1.ID, "test001")
查询流信息
func (manager *Manager) QueryStream(nsId string, streamId string) (*Stream, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
// 查询流信息
manager.QueryStream(ns1.ID, "test001")
更新流
func (manager *Manager) UpdateStream(nsId string, streamId string, ops []PatchOperation) (*Stream, error)
参数说明
示例
// 更新流
stream := &Stream{
StreamID: "test003",
}
ops := []PatchOperation{
{
Op: "replace",
Key: "desc",
Value: "test",
},
}
stream1, err := manager.UpdateStream(ns1.ID, stream.StreamID, ops)
获取流列表
func (manager *Manager) ListStream(nsId string, offset, line int, prefix, sortBy string, qType int) ([]Stream, int64, error)
参数说明
参数 |
说明 |
nsId |
空间id |
offset |
在全部流中的偏移量 |
line |
一次返回多少条 |
prefix |
流ID 前缀,可以流ID 前缀进行检索查询 |
sortBy |
asc 表示升序, desc 表示降序, 默认按创建时间降序排列(可参与排序的字段有createdAt, updatedAt, lastPushedAt). asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 |
qType |
查询流类型, 0:全部,1:在线流,2:离线流 |
示例
// **获取流列表**
streams, total, err := manager.ListStream(ns1.ID, 0, 2, "test", "desc:updatedAt", 0)
获取动态推拉流地址
func (manager *Manager) DynamicPublishPlayURL(nsId string, streamId string, route *DynamicLiveRoute) (*RouteRet, error)
参数说明
DynamicLiveRoute结构体说明
成员 |
类型 |
说明 |
PublishIP |
string |
推流端对外IP地址 |
PlayIP |
string |
拉流端对外IP地址 |
UrlExpireSec |
int64 |
地址过期时间,urlExpireSec:100代表100秒后过期; 默认urlExpireSec:0,永不过期. |
RouteRet结构体说明
成员 |
类型 |
说明 |
PublishUrl |
string |
rtmp推流地址 |
PlayUrls |
RoutePlayUrls,详见RoutePlayUrls结构体说明 |
拉流URLs |
PublishUrlExpired |
int64 |
推拉流地址过期时间点(unix时间戳,单位second) |
RoutePlayUrls结构体说明
成员 |
类型 |
说明 |
Rtmp |
string |
rtmp播放地址 |
Flv |
string |
flv播放地址 |
Hls |
string |
hls播放地址 |
示例
// 获取动态推拉流地址
ret, err := manager.DynamicPublishPlayURL("2akrarwwhi0ff", "test1", &qvs.DynamicLiveRoute{PublishIP: "127.0.0.1", PlayIP: "127.0.0.1", UrlExpireSec: 0})
获取静态推拉流地址
func (manager *Manager) StaticPublishPlayURL(nsId, streamId string, route *StaticLiveRoute) (string, error)
参数说明
StaticLiveRoute结构体说明
成员 |
类型 |
说明 |
Domain |
string |
域名 |
DomainType |
string |
域名类型 |
UrlExpireSec |
int64 |
地址过期时间,urlExpireSec:100代表100秒后过期; 默认urlExpireSec:0,永不过期. |
示例
// 获取静态推拉流地址
ret, err := manager.StaticPublishPlayURL(ns1.ID, "1", &StaticLiveRoute{Domain: "qvs-publish.qiniu1.com", DomainType: DomainPublishRTMP})
禁用流
func (manager *Manager) DisableStream(nsId string, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
// 禁用流
manager.DeleteStream(ns1.ID, "test001")
启用流
func (manager *Manager) EnableStream(nsId string, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
// 启用流
manager.DeleteStream(ns1.ID, "test001")
停用流
func (manager *Manager) StopStream(nsId string, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
// 停用流
manager.StopStream(ns1.ID, "test001")
查询推流记录
func (manager *Manager) QueryStreamPubhistories(nsId string, streamId string, start, end int, line, offset int) ([]StreamPublishHistory, int64, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
start |
推流开始时间(unix timestamp in second) |
end |
推流结束时间(unix timestamp in second) |
line |
一次返回多少条 |
offset |
在全部流中的偏移量 |
示例
// 查询推流记录
start := 1587975463
end := 1587976463
offset := 0
line := 1
manager.DeleteStream(ns1.ID, "test001", start, end, line, offset)
设备管理
创建设备
func (manager *Manager) AddDevice(device *Device) (*Device, error)
参数说明
Device结构体说明
成员 |
类型 |
说明 |
NamespaceId |
string |
所属的空间ID |
Name |
string |
设备名称 |
GBId |
string |
设备国标ID |
Type |
int |
设备类型,取值1(摄像头), 2(平台) |
Username |
string |
用户名 |
Password |
string |
密码 |
PullIfRegister |
bool |
注册成功后启动拉流, 默认关闭 |
Desc |
string |
设备描述 |
NamespaceName |
string |
所属的空间名称 |
State |
string |
状态(offline: 离线, online: 在线, notReg: 未注册, locked: 锁定) |
Channels |
int |
设备通道数 |
Vendor |
string |
厂商 |
CreatedAt |
int64 |
创建时间,Unix时间戳,秒 |
UpdatedAt |
int64 |
更新时间,Unix时间戳,秒 |
LastRegisterAt |
int64 |
上一次注册时间,Unix时间戳,秒 |
LastKeepaliveAt |
int64 |
上一次心跳时间,Unix时间戳,秒 |
示例
// 创建设备
device := &Device {
Name: "device1",
Desc: "test gb28181",
Username: "username",
Password: "password"
}
dev, err := manager.AddDevice(device)
删除设备
DeleteDevice(nsId string, gbId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
示例
// 删除设备
dev, err := manager.DeleteDevice(ns1.ID, "device1")
更新设备
func (manager *Manager) UpdateDevice(nsId string, gbId string, ops []PatchOperation) (*Device, error)
参数说明
示例
// 更新设备
ops := []PatchOperation{
{
Op: "replace",
Key: "desc",
Value: "test",
},
}
dev, err := manager.UpdateDevice(ns1.ID, dev.gbId, ops)
查询设备信息
func (manager *Manager) QueryDevice(nsId string, gbId string) (*Device, error)
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
示例
// 删除设备
nsId := "testNsId"
gbId := "testGbId"
dev, err := manager.QueryDevice(nsId, gbId)
查询设备列表
func (manager *Manager) ListDevice(nsId string, offset, line int, prefix, state string, qType int) ([]Device, int64, error)
参数说明
参数 |
说明 |
nsId |
空间id |
offset |
在全部Device中的偏移量 |
line |
一次返回多少条 |
prefix |
可以通过gbid前缀进行检索查询 |
state |
按设备状态查询,offline: 离线, online: 在线, notReg: 未注册, locked: 锁定 |
qtype |
按设备类型查询,0:全部, 1:摄像头, 2:平台 |
示例
// 查询设备列表
nsId := "testNsId"
gbId := "testGbId"
dev, err := manager.ListDevice(ns1.ID, 0, 2, "302", "", 0)
查询通道列表
func (manager *Manager) ListChannels(nsId string, gbId string, prefix string) (*DeviceChannels, error)
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
prefix |
通道国标ID前缀 |
示例
// 删除设备
nsId := "testNsId"
gbId := "testGbId"
prefix := "320"
dev, err := manager.ListChannels(nsId, gbId, prefix)
启动设备拉流
func (manager *Manager) StartDevice(nsId string, gbId string, channels []string) error
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
channels |
平台设备指定需要启动的通道国标ID(为空表示启动平台下的所有设备) |
示例
// 启动设备拉流
nsId := "testNsId"
gbId := "testGbId"
channels := []string{"31011500991320000028"}
dev, err := manager.StartDevice(nsId, gbId, channels)
停止设备拉流
func (manager *Manager) StopDevice(nsId string, gbId string, channels []string) error
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
channels |
平台设备指定需要结束的通道国标ID(为空表示停止平台下的所有设备) |
示例
// 停止设备拉流
nsId := "testNsId"
gbId := "testGbId"
channels := []string{"31011500991320000028"}
dev, err := manager.StartDevice(nsId, gbId, channels)
同步设备通道
func (manager *Manager) FetchCatalog(nsId, gbId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
示例
err = c.FetchCatalog("3nm4x0vyz7xlu", "31011500991180000270")
查询通道详情
func (manager *Manager) QueryChannel(nsId, gbId, channelId string) (*Channel, error)
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
channelId |
通道id |
示例
channel, err := c.QueryChannel("3nm4x0vyz7xlu", "31011500991180000270", "31011500991180000135")
删除通道
func (manager *Manager) DeleteChannel(nsId, gbId, channelId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
channelId |
通道id |
示例
err = c.DeleteChannel("3nm4x0vyz7xlu", "31011500991180000270", "31011500991180000135")
查询本地录像列表
func (manager *Manager) QueryGBRecordHistories(nsId, gbId, chId string, start, end int) (*DeviceVideoItems, error)
参数说明
参数 |
说明 |
nsId |
空间id |
gbId |
国标id |
channelId |
网关设备时为通道ID(普通设备可以忽略) |
start |
查询开始时间(unix时间戳,单位为秒) |
end |
查询结束时间(unix时间戳,单位为秒) |
示例
ret, err := c.QueryGBRecordHistories("3nm4x0vyz7xlu", "31011500991180000270", "34020000001310000020", 1604817540, 1604903940)
模板管理
创建模板
func (manager *Manager) AddTemplate(tmpl *Template) (*Template, error)
参数说明
Template结构体说明
成员 |
类型 |
说明 |
ID |
string |
模板id |
Name |
string |
模版名称,格式为 4 ~ 100个字符,可包含小写字母、数字、中划线、汉字 |
Desc |
string |
模版描述 |
Bucket |
string |
模版对应的对象存储的bucket |
DeleteAfterDays |
int |
储过期时间,默认永久不过期 |
TemplateType |
int |
板类型,取值:0(录制模版), 1(截图模版) |
FileType |
int |
件存储类型,取值:0(普通存储),1(低频存储) |
RecordType |
int |
录制模式, 0(不录制),1(实时录制), 2(按需录制) |
RecordFileFormat |
int |
录制文件存储格式(多选), 范围:1(001)~7(111), 从左往右的三位二进制数分别代表MP4, FLV, M3U8; 0代表不选择该格式, 1代表选择;例如:2(010)代表选择FLV格式,6(110)代表选择MP4和FLV格式,1(001)代表选择M3U8格式,7(111)代表三种格式均选择 |
TSFileNameTemplate |
string |
ts文件名模板,例如:record/ts/${namespaceId}/${streamId}/${startMs}-${endMs}.ts |
RecordSnapFileNameFmt |
string |
截图文件名格式,例如:/record/snap/${namespaceId}/${streamId}/${startMs}.jpg |
RecordInterval |
int |
录制文件长度 |
M3u8FileNameTemplate |
string |
m3u8文件命名格式 |
FLVFileNameTemplate |
string |
flv文件命名格式 |
MP4FileNameTemplate |
string |
mp4文件命名格式 |
JpgOverwriteStatus |
bool |
开启覆盖式截图(一般用于流封面) |
JpgSequenceStatus |
bool |
开启序列式截图 |
JpgOnDemandStatus |
bool |
开启按需截图 |
JpgOverwriteFileNameTemplate |
string |
覆盖式截图文件命名格式:snapshot/jpg/${namespaceId}/${streamId}/${streamId}.jpg |
JpgSequenceFileNameTemplate |
string |
序列式截图文件命名格式:snapshot/jpg/${namespaceId}/${streamId}/${startMs}.jpg |
JpgOnDemandFileNameTemplate |
string |
按需式截图文件命名格式:snapshot/jpg/${namespaceId}/${streamId}/ondemand-${startMs}.jpg |
SnapInterval |
int |
序列式截图时间间隔 |
CreatedAt |
int64 |
模板创建时间 |
UpdatedAt |
int64 |
模板更新时间 |
Zone |
string |
one为服务区域配置项,可选项为z0, z1, z2,默认为z0. z0表示华东, z1表示华北、z2表示华南 |
示例
// 创建模板
tmpl := &Template{
Name: "test001",
Bucket: "xxxx",
TemplateType: 1,
JpgOverwriteStatus: true,
RecordType: 2,
Zone: "z0",
RecordFileFormat: 1,
}
tmpl1, err := c.AddTemplate(tmpl)
删除模板
func (manager *Manager) DeleteTemplate(templId string) error
参数说明
示例
// 删除模板
manager.DeleteTemplate(tmpl1.ID)
更新模板
func (manager *Manager) UpdateTemplate(templId string, ops []PatchOperation) (*Template, error)
参数说明
示例
// 更新模板
ps := []PatchOperation{
{
Op: "replace",
Key: "name",
Value: "test002",
},
{
Op: "replace",
Key: "zone",
Value: "z1",
},
}
tmpl2, err := manager.UpdateTemplate(tmpl1.ID, ops)
查询模板信息
func (manager *Manager) QueryTemplate(templId string) (*Template, error)
参数说明
示例
// 查询模板信息
tmpl2, err := manager.QueryTemplate("2akrarsl22iil")
获取模板列表
func (manager *Manager) ListTemplate(offset, line int, sortBy string, templateType int, match string) ([]Template, int64, error)
参数说明
参数 |
说明 |
offset |
在全部templates中的偏移量 |
line |
一次返回多少条 |
sortBy |
默认按创建时间降序排列, sortBy由"asc/desc"和可参与排序的字段组成, 其中 asc 表示升序, desc 表示降序, 可参与排序的字段有createdAt, updatedAt. asc:updatedAt表示更新时间从小到大排序, desc:updatedAt表示更新时间从大到小排序 |
templateType |
模板类型,取值:0(录制模版), 1(截图模版) |
match |
模糊匹配查询(模版名称包含match串时返回) |
示例
// 获取模板列表
nss, total, err := c.ListTemplate(0, 2, "asc:updatedA", 1, "")
录制管理
查询录制记录
func (manager *Manager) QueryStreamRecordHistories(nsId string, streamId string, start, end int, marker string, line int, format string) ([]RecordHistory, string, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
start |
查询开始时间(unix时间戳,单位为秒) |
end |
查询结束时间(unix时间戳,单位为秒) |
marker |
上次返回的marker值 |
line |
一次返回多少条 |
format |
查询录制格式,""为查询所有格式视频 |
示例
// 查询录制记录
nsId := "2akrarsj8zp0w"
streamId := "test01"
start := 1587975463
end := 1587976463
marker := ""
line := 10
format := ""
recordHistory, err := manager.QueryStreamRecordHistories(nsId, streamId, start, end, marker, line, format)
获取截图列表
func (manager *Manager) StreamsSnapshots(nsId string, streamId string, start, end int, qtype int, line int, marker string) ([]byte, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
start |
查询开始时间(unix时间戳,单位为秒) |
end |
查询结束时间(unix时间戳,单位为秒) |
qtype |
1:实时截图对应的图片列表 |
line |
限定返回截图的个数,只能输入1-100的整数,不指定默认返回30个 |
示例
// 查询录制记录
nsId := "2akrarsj8zp0w"
streamId := "test01"
start := 1587975463
end := 1587976463
marker := ""
line := 10
qtype := 1
recordHistory, err := manager.StreamsSnapshots(nsId, streamId, start, end, qtype, line)
获取直播封面截图
func (manager *Manager) QueryStreamCover(nsId string, streamId string) (string, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
// 获取直播封面截图
nsId := "2akrarsj8zp0w"
streamId := "test01"
cover, err := manager.QueryStreamCover(nsId, streamId)
按需截图
func (manager *Manager) OndemandSnap(nsId, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
err := c.OndemandSnap("2xenzw5o81ods", "31011500991320000356")
删除截图
func (manager *Manager) DeleteSnapshots(nsId, streamId string, files []string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
files |
需要删除的文件列表 |
示例
err = c.DeleteSnapshots("2xenzw5o81ods", "31011500991320000356", []string{"test.jpg"})
启动按需录制
func (manager *Manager) StartRecord(nsId, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
err = c.StartRecord("2xenzw5o81ods", "31011500991320000356")
停止按需录制
func (manager *Manager) StopRecord(nsId, streamId string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
示例
err = c.StopRecord("2xenzw5o81ods", "31011500991320000356")
删除录制片段
func (manager *Manager) DeleteStreamRecordHistories(nsId, streamId string, files []string) error
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
files |
需要删除的文件列表(从查询录制记录file 字段获取文件名) |
示例
err = c.DeleteStreamRecordHistories("2xenzw5o81ods", "31011500991320000356", []string{"record/2xenzw5o81ods/31011500991320000356/1604989846152-1604990735281-852640.m3u8"})
录制视频片段合并
func (manager *Manager) RecordClipsSaveas(nsId, streamId string, arg *saveasArgs) (*saveasReply, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流id |
arg |
详见saveasArgs结构体说明 |
saveasArgs结构体说明
成员 |
类型 |
说明 |
fname |
string |
保存的文件名(需要带上文件格式后缀),不指定系统会随机生成 |
format |
string |
保存的文件格式,可以为m3u8, mp4或者flv |
start |
int |
查询开始时间(unix时间戳,单位为秒) |
end |
int |
查询结束时间(unix时间戳,单位为秒) |
deleteTs |
bool |
在不生成m3u8格式文件时是否删除对应的ts文件 |
pipeline |
string |
数据处理的私有队列,不指定则使用公共队列 |
notifyUrl |
string |
保存成功回调通知地址,不指定则不通知 |
deleteAfterDays |
int |
文件过期时间,默认和录制模版中的设置保持一致 |
saveasReply结构体说明
成员 |
类型 |
说明 |
fname |
string |
表示保存后在存储空间里的文件名。使用存储空间的下载域名可以访问这文件 |
persistentId |
string |
持久化异步处理任务ID,异步模式才会返回该字段,可以通过该字段查询转码进度 |
bucket |
string |
文件存储的bucket |
duration |
int |
合并后文件的时长(单位为秒) |
示例
ret, err := c.RecordClipsSaveas("2xenzw5o81ods", "31011500991320000356", &saveasArgs{
Format: "m3u8",
Start: 1604989846,
End: 1604990735,
})
录制回放
func (manager *Manager) RecordsPlayback(nsId, streamId string, start, end int) (string, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流ID |
start |
查询开始时间(unix时间戳,单位为秒) |
end |
查询结束时间(unix时间戳,单位为秒) |
数据统计管理
查询带宽数据
func (manager *Manager) QueryBandwidth(nsId, streamId, tu string, start, end int) (*FlowBadwidthData, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流ID |
start |
年月日模式(20191001)或者年月日时分秒模式(20201012204005) |
end |
年月日模式(20191002)或者年月日时分秒模式(20201012204005) |
tu |
时间粒度 可以是 5min, hour, day |
示例
ret, err = c.QueryBandwidth("", "", "hour", 20200901, 20200902)
查询流量数据
func (manager *Manager) QueryFlow(nsId, streamId, tu string, start, end int) (*FlowBadwidthData, error)
参数说明
参数 |
说明 |
nsId |
空间id |
streamId |
流ID |
start |
年月日模式(20191001)或者年月日时分秒模式(20201012204005) |
end |
年月日模式(20191002)或者年月日时分秒模式(20201012204005) |
tu |
时间粒度 可以是 5min, hour, day |
示例
ret, err := c.QueryFlow("", "", "5min", 20200901, 20200902)