English | 简体中文
声网的云端转码服务是专为实时互动产品中的直播场景而开发。云端转码服务允许你在服务器端获取 RTC 频道中主播的音视频源流,并对其进行转码、混音、合图等音视频处理,最后将处理后的音视频流发布到声网的 RTC 频道,供观众端订阅。通过使用云端转码服务,观众无需订阅多个主播的音视频流,从而减轻了下行带宽压力和客户端设备的性能消耗。
获取声网App ID -------- 声网Agora - 文档中心 - 如何获取 App ID
点击创建应用
选择你要创建的应用类型
获取App 证书 ----- 声网Agora - 文档中心 - 获取 App 证书
在声网控制台的项目管理页面,找到你的项目,点击配置。
点击主要证书下面的复制图标,即可获取项目的 App 证书。
开启云端转码服务 请联系声网技术支持
在开始创建云端转码之前,你需要调用 acquire 方法获取一个 tokenName。一个 builderToken 仅可用于一次云端转码任务。
需要设置的参数有:
通过调用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 方法开始云端转码。
需要设置的参数有:
通过调用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 方法查询云端转码状态。
需要设置的参数有:
通过调用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 请求销毁。
需要设置的参数有:
通过调用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
}
具体的业务响应码请参考响应状态码文档
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。