# huaweicloud-sparkrtc-recordrules-go **Repository Path**: HuaweiCloudDeveloper/huaweicloud-sparkrtc-recordrules-go ## Basic Information - **Project Name**: huaweicloud-sparkrtc-recordrules-go - **Description**: SparkRTC 录制规则管理,包含创建录制规则、查询所有录制规则、更新录制规则、查询单个录制规则、和删除录制规则 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master-dev - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-08-02 - **Last Updated**: 2025-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 华为云实时音视频-录制规则管理示例(Go版本) ## 1. 介绍 ### 华为云实时音视频录制管理介绍 华为云实时音视频服务(SparkRTC)提供高并发、低延迟、高清流畅、安全可靠的全场景、全互动、全实时的**音视频服务**,适用于在线教育、云会议、社交文娱等场景。 ![img](https://support.huaweicloud.com/productdesc-rtc/zh-cn_image_0000001129807754.png) SparkRTC服务支持**将实时音视频互动内容进行录制**并将录制的内容存储到OBS桶中,您可以在OBS服务中对录制的音视频文件进行下载、分享等处理。 ![img](https://support.huaweicloud.com/usermanual-rtc/zh-cn_image_0000001126106056.png) 如需录制实时音视频互动内容,需配置录制规则和回调。详情请参考[云端录制管理](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0006.html)。 配置录制规则的前提条件为: 1. [创建桶](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0006.html#rtc_04_0006__zh-cn_topic_0232655499_section1439935553015):创建用于存储SparkRTC录制文件的OBS桶,若已有OBS桶,请直接执行[2](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0006.html#rtc_04_0006__zh-cn_topic_0232655499_li63809264279)。 2. [云资源授权](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0006.html#rtc_04_0006__zh-cn_topic_0232655499_section4159236111015):在SparkRTC服务中对存储录制文件的OBS桶进行授权,允许SparkRTC服务将录制文件存储在对应的OBS桶中。 本示例展示了用户如何通过华为云实时音视频的Go SDK (CloudRTC) **配置录制规则和回调**,**进行实施录制**、以及最后如何**查看录制文件**。 同时提供了其他录制规则管理接口示例,包括 **删除录制规则**、**查询录制规则列表**、**查询录制规则**、和 **更新录制规则**。用户可通过这些接口自定义录制的规则。 - 请参考接口:[*录制规则管理*](https://support.huaweicloud.com/api-rtc/CreateRecordRule.html) ## 2.开发前准备 - 创建应用 - obs桶授权 具体操作步骤,[*开发前准备*](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0006.html) ## 3.安装SDK: 本示例基于华为云实时音视频SDK V3.0版本开发。 ``` go get -u github.com/huaweicloud/huaweicloud-sdk-go-v3 ``` ## 4. 开始使用 #### 步骤1:创建录制规则 ##### 描述 创建或更新录制规则。 - 若当前app在请求的location中无录制规则,则会创建新的录制规则 - 若当前app在请求的location中已有录制规则,则会更新原来的录制规则 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" auth := basic.NewCredentialsBuilder(). WithProjectId(projectID). WithAk(ak). WithSk(sk). Build() client := cloudrtc.NewCloudRTCClient( cloudrtc.CloudRTCClientBuilder(). WithRegion(region.NewRegion("", 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:配置录制事件回调 ##### 描述 配置增值(录制)事件上报回调。 当任务发生订阅了的事件时,通过该接口配置的回调地址通知。 回调内容请参见[增值(录制)事件回调通知内容](https://support.huaweicloud.com/api-rtc/rtc_07_0021.html)。 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" regionInfo := "" auth := basic.NewCredentialsBuilder(). WithProjectId(projectID). WithAk(ak). WithSk(sk). Build() client := cloudrtc.NewCloudRTCClient( cloudrtc.CloudRTCClientBuilder(). WithRegion(region.NewRegion(regionInfo, endpoint)). WithCredential(auth). Build()) authKey := "" request := &model.UpdateRecordCallbackRequest{ AppId: "", Body: &model.AppCallbackUrlReq{ Url: "", AuthKey: &authKey, }, } response, err := client.UpdateRecordCallback(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } ``` #### 步骤3:启动录制任务 ##### 描述 本示例演示启动单流录制任务 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" regionInfo := "" 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: "", Body: &model.IndividualStreamJobReq{ RoomId: "", UserId: "", IsRecordAudio: &isRecordAudio, VideoType: &videoType, SelectStreamType: &streamType, MaxIdleTime: &MaxTime, RecordParam: &model.RecordParam{ RecordRuleId: "", }, }, } response, err := client.CreateIndividualStreamJob(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } ``` #### 步骤4:查看录制文件 录制完成后,您可以在OBS控制台中或通过回调消息查看录制文件。 - 通过OBS控制台查看录制文件 1. 在[OBS管理控制台](https://storage.huaweicloud.com/obs)左侧导航栏选择“对象存储”。 2. 在桶列表中单击存储SparkRTC录制文件的桶,进入“概览”页面。 3. 在左侧导航栏,单击“对象”,查看录制文件信息。 4. 您还可以对录制文件进行下载、分享等操作,具体请参见[OBS帮助中心](https://support.huaweicloud.com/usermanual-obs/obs_03_0303.html)。 - 通过回调消息查看录制文件 若您设置了录制回调地址,则每生成一个录制文件都将收到录制回调消息。具体录制回调配置方法及消息字段说明请参见[配置录制回调](https://support.huaweicloud.com/usermanual-rtc/rtc_04_0007.html)。 #### 录制规则管理:查询录制规则 ##### 描述 查询应用下面的所有录制规则资源。 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" auth := basic.NewCredentialsBuilder(). WithProjectId(projectID). WithAk(ak). WithSk(sk). Build() client := cloudrtc.NewCloudRTCClient( cloudrtc.CloudRTCClientBuilder(). WithRegion(region.NewRegion("", endpoint)). WithCredential(auth). Build()) request := &model.ListRecordRulesRequest{ AppId: "", } response, err := client.ListRecordRules(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } ``` #### 录制规则管理:更新录制任务 ##### 描述 使用步骤1生成的rule_id,对该录制规则内容进行更新操作。 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" auth := basic.NewCredentialsBuilder(). WithProjectId(projectID). WithAk(ak). WithSk(sk). Build() client := cloudrtc.NewCloudRTCClient( cloudrtc.CloudRTCClientBuilder(). WithRegion(region.NewRegion("", 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: "", 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,查询该录制规则内容。 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" auth := basic.NewCredentialsBuilder(). WithProjectId(projectID). WithAk(ak). WithSk(sk). Build() client := cloudrtc.NewCloudRTCClient( cloudrtc.CloudRTCClientBuilder(). WithRegion(region.NewRegion("", endpoint)). WithCredential(auth). Build()) request := &model.ShowRecordRuleRequest{ AppId: "", RuleId: "", } response, err := client.ShowRecordRule(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } ``` #### 录制规则管理:删除录制规则 ##### 描述 使用步骤1生成的rule_id,删除该录制规则内容。 ##### 示例代码 ```go package main import ( "fmt" "os" "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和sk直接写到代码中有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全; // 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK。 ak := os.Getenv("HUAWEICLOUD_SDK_AK") sk := os.Getenv("HUAWEICLOUD_SDK_SK") endpoint := "" projectID := "" auth := basic.NewCredentialsBuilder(). WithProjectId(projectID). WithAk(ak). WithSk(sk). Build() client := cloudrtc.NewCloudRTCClient( cloudrtc.CloudRTCClientBuilder(). WithRegion(region.NewRegion("", endpoint)). WithCredential(auth). Build()) request := &model.DeleteRecordRuleRequest{ AppId: "", RuleId: "", } response, err := client.DeleteRecordRule(request) if err == nil { fmt.Printf("%+v\n", response) } else { fmt.Println(err) } } ``` ## 5.参考文件 - 华为云实时音视频[*《开发指南》*](https://support.huaweicloud.com/api-rtc/rtc_07_0001.html) - 华为云实时音视频[*《API参考》*](https://support.huaweicloud.com/api-rtc/rtc_07_0002.html) ## 6.修订记录 | 发布日期 | 文档版本 | 修订说明 | | :--------: | :------: | :----------: | | 2023-08-11 | 1.0 | 文档首次发布 |