2 Star 0 Fork 0

agoraio-community/agora-rest-client-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

云端转码服务

English | 简体中文

服务简介

声网的云端转码服务是专为实时互动产品中的直播场景而开发。云端转码服务允许你在服务器端获取 RTC 频道中主播的音视频源流,并对其进行转码、混音、合图等音视频处理,最后将处理后的音视频流发布到声网的 RTC 频道,供观众端订阅。通过使用云端转码服务,观众无需订阅多个主播的音视频流,从而减轻了下行带宽压力和客户端设备的性能消耗。

环境准备

API 接口调用示例

获取云端转码资源

在开始创建云端转码之前,你需要调用 acquire 方法获取一个 tokenName。一个 builderToken 仅可用于一次云端转码任务。

需要设置的参数有:

  • appId: 声网的项目 AppID
  • username: 声网的Basic Auth认证的用户名
  • password: 声网的Basic Auth认证的密码
  • instanceId: 用户指定的实例 ID

通过调用Acquire方法来实现获取云端转码资源

	ctx := context.Background()
    appId := "xxxx"
    username := "xxxx"
    password := "xxxx"
    credential := auth.NewBasicAuthCredential(username, password)
    config := &agora.Config{
        AppID:      appId,
        Credential: credential,
        DomainArea: domain.CN,
        Logger:     agoraLogger.NewDefaultLogger(agoraLogger.DebugLevel),
}

	cloudTranscoderClient, err := cloudtranscoder.NewClient(config)
	if err != nil {
		log.Fatalln(err)
	}
    
    acquireResp, err := cloudTranscoderClient.Acquire(ctx, &cloudTranscoderAPI.AcquireReqBody{
        InstanceId: instanceId,
    })
    if err != nil {
        log.Fatalln(err)
    }
	if acquireResp.IsSuccess() {
        log.Printf("acquire success:%+v\n", acquireResp)
	} else {
        log.Fatalf("acquire failed:%+v\n", acquireResp)
    }

开启云端转码

通过 acquire 方法获取云端转码资源后,调用 create 方法开始云端转码。

需要设置的参数有:

  • builderToken: 通过 acquire 方法获取的 tokenName
  • 更多 Body中的参数见Create接口文档

通过调用Create方法来实现创建云端转码

 createResp, err := cloudTranscoderClient.Create(ctx, tokenName, &cloudTranscoderAPI.CreateReqBody{
  Services: &cloudTranscoderAPI.CreateReqServices{
   CloudTranscoder: &cloudTranscoderAPI.CloudTranscoderPayload{
    ServiceType: "cloudTranscoderV2",
    Config: &cloudTranscoderAPI.CloudTranscoderConfig{
     Transcoder: &cloudTranscoderAPI.CloudTranscoderConfigPayload{
      IdleTimeout: 300,
      AudioInputs: []cloudTranscoderAPI.CloudTranscoderAudioInput{
       {
        Rtc: &cloudTranscoderAPI.CloudTranscoderRtc{
         RtcChannel: "test-abc",
         RtcUID:     123,
         RtcToken:   "xxxxxx",
        },
       },
      },
      Outputs: []cloudTranscoderAPI.CloudTranscoderOutput{
       {
        Rtc: &cloudTranscoderAPI.CloudTranscoderRtc{
         RtcChannel: "test-efg",
         RtcUID:     456,
         RtcToken:   "xxxxx",
        },
        AudioOption: &cloudTranscoderAPI.CloudTranscoderOutputAudioOption{
         ProfileType: "AUDIO_PROFILE_MUSIC_STANDARD",
        },
       },
      },
     },
    },
   },
  },
 })
 if err != nil {
  log.Fatalln(err)
 }

 if createResp.IsSuccess() {
  log.Printf("create success:%+v\n", createResp)
 } else {
  log.Printf("create failed:%+v\n", createResp)
  return
 }

查询云端转码

开始云端转码后,你可以调用 query 方法查询云端转码状态。

需要设置的参数有:

  • taskId: 从 Create 方法获取到的 taskId
  • builderToken: 通过 acquire 方法获取的 tokenName

通过调用Query方法来实现查询云端转码状态:

  queryResp, err := cloudTranscoderClient.Query(ctx, taskId, tokenName)
  if err != nil {
   log.Println(err)
   return
  }

  if queryResp.IsSuccess() {
   log.Printf("query success:%+v\n", queryResp)
  } else {
   log.Printf("query failed:%+v\n", queryResp)
   return
  }

更新云端转码

开始云端转码后,你可以调用 update 方法更新云端转码状态。

需要设置的参数有:

  • taskId: 从 Create 方法获取到的 taskId

  • builderToken: 通过 acquire 方法获取的 tokenName

  • sequenceId: Update 请求的序列号。取值需要大于或等于 0。请确保后一次 Update 请求的序列号大于前一次 Update 请求的序列号。序列号可以确保声网服务器按照你指定的最新配置来更新 cloud transcoder。

  • 更多 Body中的参数见Update接口文档

通过调用Update方法来实现更新云端转码

 updateResp, err := cloudTranscoderClient.Update(ctx, taskId, tokenName, 1, &cloudTranscoderAPI.UpdateReqBody{
  Services: &cloudTranscoderAPI.CreateReqServices{
   CloudTranscoder: &cloudTranscoderAPI.CloudTranscoderPayload{
    ServiceType: "cloudTranscoderV2",
    Config: &cloudTranscoderAPI.CloudTranscoderConfig{
     Transcoder: &cloudTranscoderAPI.CloudTranscoderConfigPayload{
      IdleTimeout: 300,
      AudioInputs: []cloudTranscoderAPI.CloudTranscoderAudioInput{
       {
        Rtc: &cloudTranscoderAPI.CloudTranscoderRtc{
         RtcChannel: "test-abc",
         RtcUID:     123,
         RtcToken:   "xxxxxx",
        },
       },
      },
      Outputs: []cloudTranscoderAPI.CloudTranscoderOutput{
       {
        Rtc: &cloudTranscoderAPI.CloudTranscoderRtc{
         RtcChannel: "test-efg",
         RtcUID:     456,
         RtcToken:   "xxxxx",
        },
        AudioOption: &cloudTranscoderAPI.CloudTranscoderOutputAudioOption{
         ProfileType: "AUDIO_PROFILE_MUSIC_HIGH_QUALITY_STEREO",
        },
       },
      },
     },
    },
   },
  },
 })
 if err != nil {
  log.Println(err)
  return
 }

 if updateResp.IsSuccess() {
  log.Printf("update success:%+v\n", updateResp)
 } else {
  log.Printf("update failed:%+v\n", updateResp)
  return
 }

停止云端转码

如果你不再需要云端转码,你可以发起 Delete 请求销毁。

需要设置的参数有:

  • taskId: 从 Create 方法获取到的 taskId
  • builderToken: 通过 acquire 方法获取的 tokenName

通过调用Delete方法来实现停止云端转码

  deleteResp, err := cloudTranscoderClient.Delete(ctx, taskId, tokenName)
  if err != nil {
   log.Println(err)
   return
  }
  if deleteResp.IsSuccess() {
   log.Printf("delete success:%+v\n", deleteResp)
  } else {
   log.Printf("delete failed:%+v\n", deleteResp)
   return
  }

错误码和响应状态码处理

具体的业务响应码请参考响应状态码文档

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/agoraio-community/agora-rest-client-go.git
git@gitee.com:agoraio-community/agora-rest-client-go.git
agoraio-community
agora-rest-client-go
agora-rest-client-go
main

搜索帮助