You need to enable JavaScript to run this app.
导航

服务端 SDK for Go 使用说明

最近更新时间2023.12.05 11:26:11

首次发布时间2022.12.01 12:07:11

使用说明

您可通过服务端 SDK for Go 来调用慢直播 OpenAPI,实现快速开发。我们提供了多语言的服务端 SDK,功能包括:

  • SDK 封装了签名,避免过于繁琐的自行计算。

  • SDK 封装了常用的 OpenAPI 调用,包含请求和响应,并提供了对应的示例,例如空间管理、设备管理、视频流管理、证书管理、视图、慢直播媒体管理、级联操作等。

  • SDK 封装了常用的操作流程,比如服务端生成临时安全凭证。

开源

火山引擎 SDK for Go 项目
火山引擎 SDK for Go 版本发布

获取与安装

使用以下方法安装火山引擎 SDK for Go:

go get -u github.com/volcengine/volc-sdk-golang

安全凭证配置

您需要获取火山引擎账号的 Access Key 和 Secret Key(AK/AK)来初始化服务端 SDK。可通过火山引擎控制台右上角『个人 > API访问密钥』获取火山引擎账号的 AK/SK(建议使用子账号的 AK/SK),如下图所示:

alt

配置长期访问凭证

为保证账号和数据的安全,建议通过以下步骤将获取的火山引擎账号的 AK/SK 配置为长期访问凭证,然后在代码中使用环境变量获取 AK/SK 的方式进行调用。本章节介绍不同操作系统下配置长期访问凭证的操作步骤。

1. 打开终端并执行以下命令打开文件。
nano ~/.bash_profile
        
2. 在文件末尾添加火山引擎账号的 AK/SK,然后保存文件并退出。
export ACCESS_KEY=AKLTNTM0NDdlZTJkZmEwNDZjNmFjMzhlN2NlNmExxxxxxxx
export SECRET_KEY=TjJVNE1qQmpNemMyWmpNeE5ESXdPRGhqTW1GaU1qSTJNMkpqWldRxxxxxx==
        
3. 执行以下命令生效配置信息。
source ~/.bash_profile
        
4. 执行以下命令验证配置信息。
echo $ACCESS_KEY
echo $SECRET_KEY
        
如果配置成功,则返回如下结果:
AKLTNTM0NDdlZTJkZmEwNDZjNmFjMzhlN2NlNmExxxxxxxx
TjJVNE1qQmpNemMyWmpNeE5ESXdPRGhqTW1GaU1qSTJNMkpqWldRxxxxxx==
        

初始化客户端

使用以下方法初始化客户端:

AK/SK 信息可从环境变量获取,详细的配置方式,参考 配置长期访问凭证

func InitSDKClient() {
   var ak, sk, host string
   {
      ak = os.Getenv("ACCESS_KEY")
      sk = os.Getenv("SECRET_KEY")
      host = "open.volcengineapi.com"
   }
   aiot.DefaultInstance.Client.SetAccessKey(ak)
   aiot.DefaultInstance.Client.SetSecretKey(sk)
   aiot.DefaultInstance.SetHost(host)
}
API 调用示例

注:可点击以下说明中对应的接口名称链接到火山引擎文档中心查看接口的参数定义。

空间管理

创建空间

示例:

createSpace := &aiot.CreateSpaceRequest{
   AccessType: "gb28181",
   GB: GB{
      PullOnDemand: true,
   },
   Region:    "cn-beijing-a",
   SpaceName: "golang-sdk-create",
}
resp, _, err := aiot.DefaultInstance.CreateSpace(createSpace)

删除空间

示例:

spaceQuery := &aiot.SpaceRequest{
   SpaceID: spaceID,
}
deleteRes, _, err := aiot.DefaultInstance.DeleteSpace(spaceQuery)

查看空间信息

示例:

space, _, err := aiot.DefaultInstance.GetSpace(&aiot.SpaceRequest{
   SpaceID: spaceID,
})

更新空间信息

示例:

updateArg := &aiot.UpdateSpaceRequest{
   SpaceID:     spaceID,
   Description: &description,
}
respUpdateSpace, _, err := aiot.DefaultInstance.UpdateSpace(updateArg)

启用或停用空间

示例:

spaceQuery := &aiot.SpaceRequest{
   SpaceID: spaceID,
}
//启用空间
resp1, _, err = aiot.DefaultInstance.StartSpace(spaceQuery)
//停用空间
resp, _, err = aiot.DefaultInstance.StopSpace(spaceQuery)

查看空间列表

示例:

listSpace := &aiot.ListSpacesRequest{}
respListSpaces, _, err := aiot.DefaultInstance.ListSpaces(listSpace)

空间 > 域名管理

添加域名

示例:

add := aiot.AddSpaceDomainRequest{
    SpaceID: "***",
    Domain: "***",
    Type: "push",
}
res, _, err := aiot.DefaultInstance.AddSpaceDomain(add)

更新域名

示例:

update := &aiot.UpdateSpaceDomainRequest{
    SpaceID: "***",
    SpaceDomain: "***",
    Default: true,
}
res, _, err := aiot.DefaultInstance.UpdateSpaceDomain(update)

查看域名

示例:

res, _, err := aiot.DefaultInstance.GetSpaceDomain(spaceID, domain)

查看域名列表

示例:

res, _, err := aiot.DefaultInstance.ListSpaceDomains(spaceID)

删除域名

示例:

res, _, err := aiot.DefaultInstance.DeleteSpaceDomain(spaceID, domain)

上传证书

示例:

cert := &aiot.UploadCertRequest{
    CertName: "***",
    CertDesc: "***",
    SSLPublic: "***",
    SSLPrivate: "***",
}
res, _, err := aiot.DefaultInstance.UploadCert(cert)

查看证书列表

示例:

list := &aiot.ListCertificatesRequest{
    PageSize: 20,
    PageNumber: 1,
}
res, _, err := aiot.DefaultInstance.ListCertificates(list)

查看证书

示例:

res, _, err := aiot.DefaultInstance.CertDetail(chainID string)

绑定证书

示例:

bind := &aiot.BindCertRequest{
    SpaceID: "***",
    Domain: "***",
    ChainID: "***",
    DomainType: "***",
}
res, _, err := aiot.DefaultInstance.BindCert(bind)

证书解绑

示例:

unbind := &aiot.UnbindCertRequest{
    SpaceID: "***",
    Domain: "***",
}
res, _, err := aiot.DefaultInstance.UnbindCert(unbind)

删除证书

示例:

del := &aiot.DeleteCertRequest{
    ChainID: "***",
}
res, _, err := aiot.DefaultInstance.DeleteCert(del)

使能时间防盗链

示例:

enable := &aiot.UpdateAuthInSpaceRequest{
    SpaceID: "***",
    Domain: "***",
    MainKey: "***",
    SpareKey: "***",
    ValidDuration: int64,
}
res, _, err := aiot.DefaultInstance.UpdateAuthInSpace(enable)

关闭时间防盗链

示例:

res, _, err := aiot.DefaultInstance.DisableAuthInSpace(spaceID, domain string)

空间 > 模板管理

获取模板

示例:

resp, _, err := aiot.DefaultInstance.GetSpaceTemplate(&aiot.SpaceRequest{
    SpaceID: "***",
})

配置模板

示例:

set := &aiot.SetSpaceTemplateRequest{
    TemplateID: "***",
    TemplateType: "record",
    SpaceID: "***",
}
resp, _, err := aiot.DefaultInstance.SetSpaceTemplate(set)

查询模板占用

示例:

check := &aiot.CheckBindTemplateRequest{
    TemplateID: "***",
    TemplateType: "record",
    PageNumber: 1,
    PageSize : 20,
}
resp, _, err := aiot.DefaultInstance.CheckBindTemplate(check)

释放空间模板

示例:

cancel := &aiot.CancelBindTemplateRequest{
    SpaceID: "***",
    TemplateType: "record",
}
resp, _, err := aiot.DefaultInstance.CancelBindTemplate(check)

设备管理

查看设备列表

示例:

list := &aiot.ListDevicesRequest{
    SpaceID: "***",
    PageSize: 20,
    PageNumer: 1,
}
res, _, err := aiot.DefaultInstance.ListDevices(list)

创建设备

示例:

deviceReq := &aiot.CreateDeviceRequest{
   SpaceID:               spaceID,
   Type:                  deviceType.String(),
   DeviceName:            "***",
   DeviceNSID:            &sipID,
   Username:              &sipID,
   Password:              &password,
   AutoPullAfterRegister: &autoPull,
   Description:           "***",
}
res, _, err := aiot.DefaultInstance.CreateDevice(deviceReq)

查看设备信息

示例:

get := &aiot.GetDeviceRequest{
    SpaceID: "***",
    DeviceID: "***",
}
res, _, err := aiot.DefaultInstance.GetDevice(get)

查看设备通道列表

示例:

channels := &aiot.DeviceRequest{
    DeviceID: "***",
}
res, _, err := aiot.DefaultInstance.GetDeviceChannels(channels)

编辑设备信息

示例:

update := &aiot.UpdateDeviceRequest{
    DeviceID: "***",
    Description: "update",
}
res, _, err := aiot.DefaultInstance.UpdateDevice(update)

启用或停用设备

示例:

device := &aiot.DeviceRequest{
    DeviceID: "***",
}
//启用设备
res, _, err := aiot.DefaultInstance.StartDevice(device)
//停用设备
res, _, err := aiot.DefaultInstance.StopDevice(device)

删除设备

示例:

del := &aiot.DeviceRequest{
    DeviceID: "***",
}
res, _, err := aiot.DefaultInstance.DeleteDevice(del)

刷新设备

示例:

fresh := &aiot.FreshDeviceRequest{
    SpaceID: "***",
    DeviceID: "***",
}
res, _, err := aiot.DefaultInstance.FreshDevice(fresh)

生成 SIPID

示例:

gen := &aiot.GenSipIDRequest{
    DeviceType: "***",
    SipServerID: "***",
}
res, _, err := aiot.DefaultInstance.GenSipID(gen)

视频流管理

查看视频流列表

示例:

list := &aiot.ListStreamsRequest{
    SpaceID: "***",
    PageSize: 20,
    PagenNumber: 1,
}
res, _, err := aiot.DefaultInstance.ListStreams(list)

查看视频流

示例:

get := &aiot.StreamRequest{
    StreamID: "***",
}
res, _, err := aiot.DefaultInstance.GetStream(get)

创建视频流

示例:

cre := &aiot.CreateStreamRequest{
    SpaceID: "***",
    StreamName: "new_stream",
}
res, _, err := aiot.DefaultInstance.CreateStream(cre)

编辑视频流

示例:

update := &aiot.UpdateStreamRequest{
    SpaceID: "***",
    StreamID: "***",
    Description: "***",
}
res, _, err := aiot.DefaultInstance.UpdateStream(update)

启用、停用、禁用、解禁视频流

示例:

stream := &aiot.StreamRequest{
    StreamID: "***",
}

//启用、停用视频流
res, _ err := aiot.DefaultInstance.StartStream(stream)
res, _ err := aiot.DefaultInstance.StopStream(stream)
//禁用、解禁视频流
res, _ err := aiot.DefaultInstance.ForbidStream(stream)
res, _ err := aiot.DefaultInstance.UnforbidStream(stream)

删除视频流

示例:

del := &aiot.StreamRequest{
    StreamID: "***",
}
res, _, err := aiot.DefaultInstance.DeleteStream(del)

录制回放

示例:

records := &aiot.ListHistoryRequest{
    SpaceID: "***",
    StreamID: "***",
    PageSize: 20,
    PagenNumber: 1,
    StartTs: "2021-12-07T18:30:00+08:00",
    EndTs: "2021-12-07T18:30:00+08:00",
}
res, _, err := aiot.DefaultInstance.ListDeviceRecords(records)

视频截图

示例:

screenshots := &aiot.ListHistoryRequest{
    SpaceID: "***",
    StreamID: "***",
    PageSize: 20,
    PagenNumber: 1,
    StartTs: "2021-12-07T18:30:00+08:00",
    EndTs: "2021-12-07T18:30:00+08:00",
}
res, _, err := aiot.DefaultInstance.ListDeviceScreenshots(screenshots)

云端录像播放

示例:

cloud := &aiot.CloudRecordPlayRequest{
    StreamID: "***",
    StartTs: "1664173508",
    EndTs: "1664173508",
    TokenValid: 3600,
}
res, _, err := aiot.DefaultInstance.CloudRecordPlay(cloud)

查看帧率码率

示例:

get := &aiot.GetStreamDataRequest{
    StreamID: "***",
    StartTime: "1664173508",
    EndTime: "1664173508",
}
res, _, err := aiot.DefaultInstance.GetStreamData(get)

查询推流记录

logs := &aiot.StreamLogsRequest{
    StreamID: "***",
    StartTs: "1664173508",
    EndTs: "1664173508",
    PageSize: 20, 
    PageNumber: 1,
}
res, _, err := aiot.DefaultInstance.StreamLogs(logs)

报警管理

报警使能

示例:

set := &aiot.SetAlarmGuardRequest{
    DeviceNSID: "***",
    ChannelID: "***",
    Enable: "true",
}
res, _, err := aiot.DefaultInstance.SetAlarmGuard(set)

报警重置

示例:

reset := &aiot.ResetAlarmRequest{
    DeviceNSID: "***",
    ChannelID: "***",
}
res, _, err := aiot.DefaultInstance.ResetAlarm(reset)

报警列表查询

示例:

list := &aiot.ListAlarmNotifyRequest{
    PageSize: 20,
    PageNumber: 1,
    DeviceNSID: "***",
    ChannelID: "***",
    StartTime: 1660031340,
    EndTime: 1660031340,
    AlarmMethod: []int{},
    AlarmPriority: []int{},
    AlarmType2: []int{},
    AlarmType5: []int{},
    AlarmType6: []int{},
}
res, _, err := aiot.DefaultInstance.ListAlarmNotify(list)

删除报警记录

示例:

res, _, err := aiot.DefaultInsance.DeleteAlarmNotify(notifyID string)

模板管理

查看截图模板列表

示例:

list := &aiot.ListTemplateRequest{
    PageSize: 1,
    PageNumber: 1,
}
res, _, err := aiot.DefaultInstance.ListScreenshotTemplates(list)

查看截图模板

示例:

get := &aiot.TemplateRequest{
    TemplateID: "***",
}
res, _, err := aiot.DefaultInstance.GetScreenshotTemplate(get)

创建截图模板

示例:

create := &aiot.CreateTemplateRequest{
   TemplateName: "***",
   Screenshot: &aiot.ScreenshotTemplate{
      ScreenshotPeriod: 10000,
      Bucket: aiot.TemplateBucketConfig{
         Path: "/aiot-snapshot/pic/",
      },
      TTL: aiot.TemplateTTLConfig{
         Days: -1,
      },
      Type: []aiot.ScreenshotType{"realtime"},
   },
}
res, _, err := aiot.DefaultInstance.CreateScreenshotTemplate(create)

编辑截图模板

示例:

update := &aiot.UpdateTemplateRequest{
    TemplateID: "***",
    TemplateName: "new template",
}
res, _, err := aiot.DefaultInstnace.UpdateScreenshotTemplate(update)

删除截图模板

示例:

del := &aiot.DeleteTemplateRequest{
   TemplateID: "***",
   TemplateType: "screenshot",
}
res, _, err := aiot.DefaultInstance.DeleteScreenshotTemplate(del)

查看录制模板列表

示例:

list := &aiot.ListTemplateRequest{
    PageSize: 1,
    PageNumber: 1,
}
res, _, err := aiot.DefaultInstance.ListRecordTemplates(list)

查看录制模板

示例:

get := &aiot.TemplateRequest{
    TemplateID: "***",
}
res, _, err := aiot.DefaultInstance.GetRecordTemplate(get)

创建录制模板

示例:

create := &aiot.CreateTemplateRequest{
   TemplateName: "***",
   Record: &aiot.RecordTemplate{
      RecordDuration: 10000,
      Bucket: aiot.TemplateBucketConfig{
         Path: "/aiot-record/",
      },
      TTL: aiot.TemplateTTLConfig{
         Days: -1,
      },
      Type: "realtime",
      Format: "hls",
   },
}
res, _, err := aiot.DefaultInstance.CreateRecordTemplate(create)

编辑录制模板

示例:

update := &aiot.UpdateTemplateRequest{
    TemplateID: "***",
    TemplateName: "new template",
}
res, _, err := aiot.DefaultInstnace.UpdateRecordTemplate(update)

删除录制模板

示例:

del := &aiot.DeleteTemplateRequest{
   TemplateID: "***",
   TemplateType: "record",
}
res, _, err := aiot.DefaultInstance.DeleteRecordTemplate(del)

查看 AI 模板列表

示例:

list := &aiot.ListTemplateRequest{
    PageSize: 1,
    PageNumber: 1,
}
res, _, err := aiot.DefaultInstance.ListAITemplates(list)

查看 AI 模板

示例:

get := &aiot.TemplateRequest{
    TemplateID: "***",
}
res, _, err := aiot.DefaultInstance.GetAITemplate(get)

创建 AI 模板

示例:

create := &aiot.CreateTemplateRequest{
   TemplateName: "***",
   AI: &aiot.AITemplate{
      ImageTTL: 10,
      TemplateItems: map[string]aiot.AITemplateItem{
         "hinder": aiot.AITemplateItem{
            CapabilityType: "hinder",
            ConfidenceThreshold: 50,
            EnableTimes: aiot.EnableTimes{
               {
                  EnableFrom: "00:00:00",
                  EnableTo: "23:59:59",
               },
         },
            Extra: nil,
            FrameInterval: 1000,
            GrabStrategy: "timing",
            Status: true,
         },
      },
   },
}
res, _, err := aiot.DefaultInstance.CreateAITemplate(create)

编辑 AI 模板

示例:

update := &aiot.UpdateTemplateRequest{
    TemplateID: "***",
    TemplateName: "new template",
}
res, _, err := aiot.DefaultInstnace.UpdateAITemplate(update)

删除 AI 模板

示例:

del := &aiot.DeleteTemplateRequest{
   TemplateID: "***",
   TemplateType: "ai",
}
res, _, err := aiot.DefaultInstance.DeleteAITemplate(del)

数据工程

带宽和流量查询

示例:

req := &aiot.GetDataProjectWithBindWidthAndFlowRequest{
    SpaceID: "***",
    StreamName: "***",
    StartTime: "1658486583",
    EndTime: "1658486583",
    Data: "BindWidth",
}
res, _, err := aiot.DefaultInstance.GetDataProjectWithBindWidthAndFlow(req)

昨日数据查询

示例:

res, _, err := aiot.DefautltInstance.GetTotalData(time string) //1658486583

推流数据查询

示例:

get := &aiot.GetPushStreamCntRequest{
    SpaceID: "***",
    StartTime: "1658486583",
    EndTime: "1658486583",
}
res, _, err := aiot.DefaultInstance.GetPushStreamCnt(get)

语音对讲

开始语音对讲

示例:

start := &aiot.StartVoiceTalkRequest{
    SpaceID: "***",
    DeviceNSID: "***",
    UseTcp: true,
}
res, _, err := aiot.DefaultInstance.StartVoiceTalk(start)

结束语音对讲

示例:

stop := &aiot.StopVoiceTalkRequestRequest{
    SpaceID: "***",
    DeviceNSID: "***",
}
res, _, err := aiot.DefaultInstance.StopVoiceTalk(stop)

慢直播媒体处理

慢直播媒体处理应用列表

示例:

list := &aiot.SlowLiveRequest{
    PageSize: 1,
    PageNumber: 1,
}
res, _, err := aiot.DefaultInstance.ListSlowLive(list)

创建慢直播媒体处理应用

示例:

arg := &aiot.CreateSlowLiveRequest{
   MergingMode:      "单屏",
   Name:             fmt.Sprintf("e2e_test"),
   OutputEncoding:   "H264",
   OutputFrameRate:  25,
   OutputResolution: "540*960",
   RelatedSpaces:    []string{"***"},
}
res, _, err := aiot.DefaultInstance.CreateSlowLive(create)

编辑慢直播媒体处理应用

示例:

update := &aiot.UpdateSlowLiveRequest{
    LiveStreamID: "***",
    ID: "***",
    AccountID: "***",
    Name: "new_name",
}
res, _, err := aiot.DefaultInstance.UpdateSlowLive(update)

启动/停止慢直播媒体处理应用

示例:

//启动慢直播
res, _, err := aiot.DefaultInstance.StartSlowLive(slowLiveID string)
//停止慢直播
res, _, err := aiot.DefaultInstance.StopSlowLive(slowLiveID string)

删除慢直播媒体处理应用

示例:

res, _, err := aiot.DefaultInstance.DeleteSlowLive(slowLiveID string)