SparkRTC 录制规则管理,包含创建录制规则、查询所有录制规则、更新录制规则、查询单个录制规则、和删除录制规则
华为云实时音视频-录制规则管理示例(Go版本)
1. 介绍
华为云实时音视频录制管理介绍
华为云实时音视频服务(SparkRTC)提供高并发、低延迟、高清流畅、安全可靠的全场景、全互动、全实时的音视频服务,适用于在线教育、云会议、社交文娱等场景。

SparkRTC服务支持将实时音视频互动内容进行录制并将录制的内容存储到OBS桶中,您可以在OBS服务中对录制的音视频文件进行下载、分享等处理。

如需录制实时音视频互动内容,需配置录制规则和回调。详情请参考云端录制管理。
配置录制规则的前提条件为:
- 创建桶:创建用于存储SparkRTC录制文件的OBS桶,若已有OBS桶,请直接执行2。
- 云资源授权:在SparkRTC服务中对存储录制文件的OBS桶进行授权,允许SparkRTC服务将录制文件存储在对应的OBS桶中。
本示例展示了用户如何通过华为云实时音视频的Go SDK (CloudRTC) 配置录制规则和回调,进行实施录制、以及最后如何查看录制文件。
同时提供了其他录制规则管理接口示例,包括 删除录制规则、查询录制规则列表、查询录制规则、和 更新录制规则。用户可通过这些接口自定义录制的规则。
- 请参考接口:录制规则管理
2.开发前准备
- 创建应用
- obs桶授权
具体操作步骤,开发前准备
3.安装SDK:
本示例基于华为云实时音视频SDK V3.0版本开发。
go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3
4. 开始使用
步骤1:创建录制规则
描述
创建或更新录制规则。
- 若当前app在请求的location中无录制规则,则会创建新的录制规则
- 若当前app在请求的location中已有录制规则,则会更新原来的录制规则
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion("<YOUR REGION>", endpoint)).
WithCredential(auth).
Build())
object := "/record"
var ecordMaxDurationToMergeFile int32 = 120
var recordPrefix string = "{publish_domain}/{record_format}/{stream}/{file_start_time}"
var recordSliceDuration int32 = 60
request := &model.CreateRecordRuleRequest{
AppId: "2312",
Body: &model.RecordRuleReq{
ObsAddr: &model.RecordObsFileAddr{
Location: model.GetRecordObsFileAddrLocationEnum().CN_NORTH_4,
ProjectId: "123123",
Bucket: "123123",
Object: &object,
},
RecordFormats: []model.RecordRuleReqRecordFormats{
model.GetRecordRuleReqRecordFormatsEnum().HLS,
model.GetRecordRuleReqRecordFormatsEnum().MP4,
},
HlsConfig: &model.HlsRecordConfig{
RecordCycle: 300,
RecordPrefix: &recordPrefix,
RecordSliceDuration: &recordSliceDuration,
RecordMaxDurationToMergeFile: &ecordMaxDurationToMergeFile,
},
Mp4Config: &model.Mp4RecordConfig{
RecordCycle: 300,
RecordPrefix: &recordPrefix,
RecordMaxDurationToMergeFile: &ecordMaxDurationToMergeFile,
},
},
}
response, err := client.CreateRecordRule(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
步骤2:配置录制事件回调
描述
配置增值(录制)事件上报回调。
当任务发生订阅了的事件时,通过该接口配置的回调地址通知。
回调内容请参见增值(录制)事件回调通知内容。
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
regionInfo := "<YOUR REGION>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion(regionInfo, endpoint)).
WithCredential(auth).
Build())
authKey := "<AuthKey>"
request := &model.UpdateRecordCallbackRequest{
AppId: "<APPID>",
Body: &model.AppCallbackUrlReq{
Url: "<Your URL>",
AuthKey: &authKey,
},
}
response, err := client.UpdateRecordCallback(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
步骤3:启动录制任务
描述
本示例演示启动单流录制任务
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
regionInfo := "<YOUR REGION>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion(regionInfo, endpoint)).
WithCredential(auth).
Build())
isRecordAudio := true
var MaxTime int32 = 60
// CAMERASTREAM or SCREENSTREAM
videoType := model.GetIndividualStreamJobReqVideoTypeEnum().CAMERASTREAM
// LD, SD, HD, or FHD
streamType := model.GetIndividualStreamJobReqSelectStreamTypeEnum().HD
request := &model.CreateIndividualStreamJobRequest{
AppId: "<APPID>",
Body: &model.IndividualStreamJobReq{
RoomId: "<RoomID>",
UserId: "<UserID>",
IsRecordAudio: &isRecordAudio,
VideoType: &videoType,
SelectStreamType: &streamType,
MaxIdleTime: &MaxTime,
RecordParam: &model.RecordParam{
RecordRuleId: "<RecordRuleId>",
},
},
}
response, err := client.CreateIndividualStreamJob(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
步骤4:查看录制文件
录制完成后,您可以在OBS控制台中或通过回调消息查看录制文件。
-
通过OBS控制台查看录制文件
-
通过回调消息查看录制文件
若您设置了录制回调地址,则每生成一个录制文件都将收到录制回调消息。具体录制回调配置方法及消息字段说明请参见配置录制回调。
录制规则管理:查询录制规则
描述
查询应用下面的所有录制规则资源。
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion("<YOUR REGION>", endpoint)).
WithCredential(auth).
Build())
request := &model.ListRecordRulesRequest{
AppId: "<APPID>",
}
response, err := client.ListRecordRules(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
录制规则管理:更新录制任务
描述
使用步骤1生成的rule_id,对该录制规则内容进行更新操作。
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion("<YOUR REGION>", endpoint)).
WithCredential(auth).
Build())
object := "/record"
var ecordMaxDurationToMergeFile int32 = 120
var recordPrefix string = "{publish_domain}/{record_format}/{stream}/{file_start_time}"
var recordSliceDuration int32 = 60
request := &model.UpdateRecordRuleRequest{
AppId: "<APPID>",
RuleId: "<RuleID>",
Body: &model.RecordRuleReq{
ObsAddr: &model.RecordObsFileAddr{
Location: model.GetRecordObsFileAddrLocationEnum().CN_NORTH_4,
ProjectId: "1234",
Bucket: "1234",
Object: &object,
},
RecordFormats: []model.RecordRuleReqRecordFormats{
model.GetRecordRuleReqRecordFormatsEnum().HLS,
model.GetRecordRuleReqRecordFormatsEnum().MP4,
},
HlsConfig: &model.HlsRecordConfig{
RecordCycle: 300,
RecordPrefix: &recordPrefix,
RecordSliceDuration: &recordSliceDuration,
RecordMaxDurationToMergeFile: &ecordMaxDurationToMergeFile,
},
Mp4Config: &model.Mp4RecordConfig{
RecordCycle: 300,
RecordPrefix: &recordPrefix,
RecordMaxDurationToMergeFile: &ecordMaxDurationToMergeFile,
},
},
}
response, err := client.UpdateRecordRule(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
录制规则管理:查询单个录制规则
描述
使用步骤1生成的rule_id,查询该录制规则内容。
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion("<YOUR REGION>", endpoint)).
WithCredential(auth).
Build())
request := &model.ShowRecordRuleRequest{
AppId: "<APPID>",
RuleId: "<RuleID>",
}
response, err := client.ShowRecordRule(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
录制规则管理:删除录制规则
描述
使用步骤1生成的rule_id,删除该录制规则内容。
示例代码
package main
import (
"fmt"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
region "github.com/huaweicloud/huaweicloud-sdk-go-v3/core/region"
cloudrtc "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2"
"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/cloudrtc/v2/model"
)
func main() {
ak := "<YOUR AK>"
sk := "<YOUR SK>"
endpoint := "<CloudRTC URL>"
projectID := "<YOUR projectID>"
auth := basic.NewCredentialsBuilder().
WithProjectId(projectID).
WithAk(ak).
WithSk(sk).
Build()
client := cloudrtc.NewCloudRTCClient(
cloudrtc.CloudRTCClientBuilder().
WithRegion(region.NewRegion("<YOUR REGION>", endpoint)).
WithCredential(auth).
Build())
request := &model.DeleteRecordRuleRequest{
AppId: "<APPID>",
RuleId: "<RuleID>",
}
response, err := client.DeleteRecordRule(request)
if err == nil {
fmt.Printf("%+v\n", response)
} else {
fmt.Println(err)
}
}
5.参考文件
6.修订记录
| 发布日期 | 文档版本 | 修订说明 |
|---|---|---|
| 2023-08-11 | 1.0 | 文档首次发布 |