更新时间:2024-07-02 GMT+08:00

Go SDK使用指导

本章节介绍了Go SDK的使用说明,您可以参考本章节进行快速集成开发。

开发前准备

  • 注册华为账号并开通华为云,完成实名认证

    国际站和欧洲站用户在以下情况下需要进行账号实名认证。

    • 根据中国大陆相关法规要求,购买和使用中国大陆节点云产品服务的用户需要实名认证。
    • 购买视频直播服务时,如果您选择的区域包含中国大陆,则需要实名认证。
  • 具备已备案的域名用于直播推流和播放,并在视频直播控制台添加推流和播放域名,且已完成域名关联
  • 已具备开发环境 ,支持go 1.14及以上版本。
  • 已获取华为云账号对应的Access Key(AK)和Secret Access Key(SK)。请在华为云控制台我的凭证 > 访问密钥页面上创建和查看您的AK/SK。具体请参见访问密钥
  • 已获取直播服务对应区域的项目ID,请在华为云控制台我的凭证 > API凭证页面上查看项目ID。具体请参见API凭证

安装SDK

视频直播服务端Go SDK支持go 1.14及以上版本。执行go version检查当前Go的版本信息。

使用go get安装华为云Go SDK,执行如下命令安装华为云Go SDK库以及相关依赖库,具体的SDK版本号请参见SDK开发中心

1
2
3
4
# 安装华为云Go库
go get github.com/huaweicloud/huaweicloud-sdk-go-v3
# 安装依赖
go get github.com/json-iterator/go

开始使用

  1. 导入依赖模块。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    import (
        "fmt"
        "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
        "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config"
        "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler"
        live "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1"
        "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1/model"
        "net/http"
        "os"
    )
    

  2. 配置客户端属性。

    1. 默认配置
      1
      2
      # Use default configuration
      httpConfig := config.DefaultHttpConfig()
      
    2. (可选操作)配置代理。
      1
      2
      3
      4
      5
      6
      7
      8
      9
      // 根据需要配置网络代理
      // 代理服务器的password直接写入代码,会有很大安全风险。建议密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
      // 代理配置设置前,请先在本地环境中设置环境变量PROXY_PASSWORD
      httpConfig.WithProxy(config.NewProxy().
          WithSchema("http").
          WithHost("proxy.huaweicloud.com").
          WithPort(80).
          WithUsername("testuser").
          WithPassword(os.Getenv("PROXY_PASSWORD")))
      
    3. (可选操作)配置连接。
      1
      httpConfig.WithTimeout(30);
      
    4. (可选操作)配置SSL。
      1
      2
      // 根据需要配置是否跳过SSL证书校验
      httpConfig.WithIgnoreSSLVerification(true);
      

  3. 初始化认证信息。

    支持两种方式认证,您可以根据实际情况进行选择。

    • 使用永久AK/SK

      首先需要获取永久AK和SK,以及projectId,您可以参考开发前准备获取。

      1
      2
      3
      4
      5
      auth := basic.NewCredentialsBuilder().
                  WithAk(ak).
                  WithSk(sk).
                  WithProjectId(projectId).
                  Build()
      
    • 使用临时AK/SK

      首先需要获取临时AK、SK和SecurityToken,您可以通过token获取或者通过委托授权获取

      1
      2
      3
      4
      5
      6
      auth := basic.NewCredentialsBuilder().
                  WithAk(ak).
                  WithSk(sk).
                  WithProjectId(projectId).
                  WithSecurityToken(securityToken).
                  Build()
      
    相关参数说明如下所示:
    • ak:华为云账号Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
    • sk:华为云账号Secret Access Key,建议以密文形式存储在配置文件或者环境变量中,待使用时再解密,以确保安全。
    • projectId:云服务所在项目ID ,根据您需要操作的项目所属区域选择对应的项目ID 。
    • securityToken:采用临时AK/SK认证场景下的安全票据。

  4. 初始化客户端。

    1
    2
    3
    4
    5
    6
    7
    # 初始化直播服务的客户端
    client := live.NewLiveClient(
        live.LiveClientBuilder().
            WithEndpoints(endpoints).
            WithCredential(auth).
            WithHttpConfig(config.DefaultHttpConfig()).  
            Build())
    

    endpoint:直播服务应用区域和各服务的终端节点,具体请参见地区和终端节点

  5. 发送请求并查看响应。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    // 初始化请求,以调用接口查询直播转码模板为例
    request := &model.ShowTranscodingsTemplateRequest{
        Domain: "play.example.huaweicloud.com",
    }
    response, err := client.ShowTranscodingsTemplate(request)
    if err == nil {
        fmt.Printf("%+v\n",response)
    } else {
        fmt.Println(err)
    }
    

  6. 异常处理。

    表1 异常处理

    一级分类

    一级分类说明

    ServiceResponseError

    service response error

    url.Error

    connect endpoint error

    1
    2
    3
    4
    5
    6
    7
    # 异常处理
    response, err := client.ShowTranscodingsTemplate(request)
    if err == nil {
        fmt.Println(response)
    } else {
        fmt.Println(err)
    }
    

  7. 原始Http侦听器。

    在某些场景下可能对业务发出的Http请求进行Debug,需要看到原始的Http请求和返回信息,SDK提供侦听器功能获取原始的和加密的Http请求和返回信息。

    原始信息打印仅在debug阶段使用,请不要在生产系统中将原始的Http头和Body信息打印到日志,这些信息并未加密且其中包含敏感数据;当Body体为二进制内容,即Content-Type标识为二进制时body为"***",详细内容不输出。

    认证用的ak和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

    本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    func RequestHandler(request http.Request) {
        fmt.Println(request)
    }
    
    func ResponseHandler(response http.Response) {
        fmt.Println(response)
    }
    
    client := live.NewLiveAPIClient(
        live.LiveAPIClientBuilder().
            WithEndpoints([]string{"{your endpoint}"}).
            WithCredential(
                basic.NewCredentialsBuilder().
                    WithAk(os.Getenv("HUAWEICLOUD_SDK_AK")).
                    WithSk(os.Getenv("HUAWEICLOUD_SDK_SK")).
                    WithProjectId("{your project id}").
                       Build()).
            WithHttpConfig(config.DefaultHttpConfig().
                WithIgnoreSSLVerification(true).
                WithHttpHandler(httphandler.
                    NewHttpHandler().
                        AddRequestHandler(RequestHandler).
                        AddResponseHandler(ResponseHandler))).
            Build())
    

代码示例

调用前请根据实际情况替换如下变量:{your endpoint} 以及 {your project id}。

认证用的AK、SK直接写入代码,会有很大安全风险,建议密文形式存放在配置文件或者环境变量中,待使用时再解密,以确保安全。

本示例以AK、SK保存在环境变量中为例。运行本示例前,请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package main

import (
    "fmt"
    "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/config"
    "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/httphandler"
    live "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1"
    "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/live/v1/model"
    "net/http"
    "os"
)

func RequestHandler(request http.Request) {
    fmt.Println(request)
}

func ResponseHandler(response http.Response) {
    fmt.Println(response)
}

func main() {
    client := live.NewLiveAPIClient(
        live.LiveAPIClientBuilder().
            WithEndpoints([]string{"{your endpoint}"}).
            WithCredential(
                basic.NewCredentialsBuilder().
                    WithAk(os.Getenv("HUAWEICLOUD_SDK_AK")).
                    WithSk(os.Getenv("HUAWEICLOUD_SDK_SK")).
                    WithProjectId("{your project id}").
                    Build()).
            WithHttpConfig(config.DefaultHttpConfig().
                WithIgnoreSSLVerification(true).
                WithHttpHandler(httphandler.
                    NewHttpHandler().
                        AddRequestHandler(RequestHandler).
                        AddResponseHandler(ResponseHandler))).
            Build())

    request := &model.ShowTranscodingsTemplateRequest{
        Domain: "play.example.huaweicloud.com",
    }
    response, err := client.ShowTranscodingsTemplate(request)
    if err == nil {
        fmt.Println("%+v\n",response)
    } else {
        fmt.Println(err)
    }
}