huaweicloud-sparkrtc-recordrules-go:华为云SparkRTC录制规则管理示例

SparkRTC 录制规则管理,包含创建录制规则、查询所有录制规则、更新录制规则、查询单个录制规则、和删除录制规则

Branch3Tags0

华为云实时音视频-录制规则管理示例(Go版本)

1. 介绍

华为云实时音视频录制管理介绍

华为云实时音视频服务(SparkRTC)提供高并发、低延迟、高清流畅、安全可靠的全场景、全互动、全实时的音视频服务,适用于在线教育、云会议、社交文娱等场景。

img

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

img

如需录制实时音视频互动内容,需配置录制规则和回调。详情请参考云端录制管理

配置录制规则的前提条件为:

  1. 创建桶:创建用于存储SparkRTC录制文件的OBS桶,若已有OBS桶,请直接执行2
  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控制台查看录制文件

    1. OBS管理控制台左侧导航栏选择“对象存储”。
    2. 在桶列表中单击存储SparkRTC录制文件的桶,进入“概览”页面。
    3. 在左侧导航栏,单击“对象”,查看录制文件信息。
    4. 您还可以对录制文件进行下载、分享等操作,具体请参见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 文档首次发布

Introduction

SparkRTC 录制规则管理,包含创建录制规则、查询所有录制规则、更新录制规则、查询单个录制规则、和删除录制规则

Customize my domain