You need to enable JavaScript to run this app.
导航
录制配置
最近更新时间:2024.09.14 11:16:50首次发布时间:2023.12.28 21:21:52

阅读本文,您可以获取 Go SDK 录制配置的接口调用示例,实现快速开发。

说明

本文的调用示例包含接口的部分参数。由于参数间可能存在互斥关系,在调用时,请您参考注释,进行调整。

调用说明

  • 本文提供的接口调用示例均通过 AK 和 SK 初始化实例。
  • 接口的参数说明和错误码等信息可通过接口文档或打开 API Explorer文档说明页签查看。

前提条件

调用接口前,请先完成 Go SDK 的安装及初始化操作。

调用示例

本节为您介绍录制配置相关接口的功能和调用示例。

添加录制配置

您可以调用 CreateRecordPresetV2 接口添加录制配置。详细的参数说明可参见 CreateRecordPresetV2 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func StringPtrs(vals []string) []*string {
	ptrs := make([]*string, len(vals))
	for i := 0; i < len(vals); i++ {
		ptrs[i] = &vals[i]
	}
	return ptrs
}

func BoolPtr(v bool) *bool {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.CreateRecordPresetV2Body{
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看需要录制的直播流使用的域名所属的域名空间。
		Vhost: `push.example.com`,
		// 应用名称,取值与直播流地址的 AppName 字段取值相同,由 1 到 30 位数字(0 - 9)、大写小字母(A - Z、a - z)、下划线(_)、短横线(-)和句点(.)组成,默认为空。
		// note:
		// <li> App 取值为空时,Stream 取值也需为空,表示录制配置为 Vhost 级别的全局配置。 </li>
		// <li> App 取值不为空时,Stream 取值含义请参见 Stream 参数说明。 </li>
		App: StringPtr(`live`),
		// 流名称,取值与直播流地址的 StreamName 字段取值相同,支持填写星号(*)或由 1 到 100 位数字(0 - 9)、字母、下划线(_)、短横线(-)和句点(.)组成。
		// note:
		// <li> App 取值不为空、Stream 取值为空时,表示录制配置为 Vhost + App 级别的配置。 </li>
		// <li> App 取值不为空、Stream 取值不为空时,表示录制为 Vhost + App + Stream 的配置。 </li>
		Stream: StringPtr(`stream001`),
	}

	// 直播流录制配置的详细配置。
	RecordPresetConfig := live.CreateRecordPresetV2BodyRecordPresetConfig{
		// 是否录制转码流,默认值为 0,支持的取值及含义如下所示。
		// <li> 0:不录制; </li>
		// <li> 1:录制全部转码流; </li>
		// <li> 2:录制指定转码流,即通过转码后缀列表 TranscodeSuffixList 匹配转码流进行录制,如果转码流后缀列表为空仍表示录制全部转码流。 </li>
		// note:
		// 转码流和源流需至少选一个进行录制,即是否录制转码流(TranscodeRecord)和是否录制源流(OriginRecord)的取值至少一个不为 0。
		TranscodeRecord: Int32Ptr(1),
		// 是否源流录制,默认值为 0,支持的取值及含义如下所示。
		// <li> 0:不录制; </li>
		// <li> 1:录制。 </li>
		// note:
		// 转码流和源流需至少选一个进行录制,即是否录制转码流(TranscodeRecord)和是否录制源流(OriginRecord)的取值至少一个不为 0。
		OriginRecord: Int32Ptr(0),
		// 录制为 HLS 格式时,单个 TS 切片时长,单位为秒,默认值为 10,取值范围为 [5,30]。
		SliceDuration: Int32Ptr(5),
	}

	// 转码流后缀列表,转码流录制配置为根据转码流列表匹配(TranscodeRecord 取值为 2)时生效,TranscodeSuffixList 默认配置为空,效果等同于录制全部转码流。
	TranscodeSuffixList := []string{"_hd", "_bd"}

	RecordPresetConfig.TranscodeSuffixList = StringPtrs(TranscodeSuffixList)

	// 录制为 FLV 格式时的录制参数。
	// note:
	// 您需至少配置一种录制格式,即 FlvParam、HlsParam、Mp4Param 至少开启一个。
	FlvParam := live.CreateRecordPresetV2BodyRecordPresetConfigFlvParam{
		// 当前格式的录制是否开启,默认值为 false,支持的取值及含义如下所示。
		// <li> false:不开启; </li>
		// <li> true:开启。 </li>
		Enable: BoolPtr(true),
		// 断流录制场景下,单文件录制时长,单位为秒,默认值为 7200,取值范围为 -1 和 [300,86400]。
		// <li> 取值为 -1 时,表示不限制录制时长,录制结束后生成一个完整的录制文件。 </li>
		// <li> 取值为 [300,86400] 之间的值时,表示根据设置的录制文件时长,到达时长立即生成录制文件,完成录制后一起上传。 </li>
		// note:
		// <li> 断流录制场景仅在录制格式为 HLS 时生效,且断流录制和实时录制为二选一配置。 </li>
		// <li> 如录制过程中出现断流,对应生成的录制文件时长也会相应缩短。 </li>
		Duration: Int32Ptr(7200),
		// 实时录制场景下,断流等待时长,单位为秒,默认值为 180,取值范围为 [0,3600]。如果实际断流时间小于断流等待时长,录制任务不会停止;如果实际断流时间大于断流等待时长,录制任务会停止,断流恢复后重新开始一个新的录制任务。
		ContinueDuration: Int32Ptr(180),
		// 实时录制场景下,单文件录制时长,单位为秒,默认值为 1800,取值范围为 [300,21600]。录制时间到达设置的单文件录制时长时,会立即生成录制文件实时上传存储。
		// note:
		// 如录制过程中出现断流,对应生成的录制文件时长也会相应缩短。
		RealtimeRecordDuration: Int32Ptr(300),
		// 断流录制场景下,断流拼接时长,单位为秒,默认值为 0,支持的取值及含义如下所示。
		// <li> -1:一直拼接,表示每次断流都不会影响录制任务,录制完成后生成一个完整的录制文件; </li>
		// <li> 0:不拼接,表示每次断流结束录制任务生成一个录制文件,断流恢复重新开始一个新的录制任务; </li>
		// <li> 大于 0:拼接容错时间,表示如果断流时间小于拼接容错时间时,则录制任务不会停止,不会生成新的录制文件;如果断流时间大于拼接容错时间,则录制任务停止,断流恢复后重新开始一个新的录制任务。 </li>
		// note:
		// 断流录制场景仅在录制格式为 HLS 时生效,且断流录制和实时录制为二选一配置。
		Splice: Int32Ptr(0),
	}

	// TOS 存储相关配置。
	// note:
	// 录制文件只能选择一个位置进行存储,即 TOSParam 和 VODParam 配置且配置其中一个。
	TOSParam := live.CreateRecordPresetV2BodyRecordPresetConfigFlvParamTOSParam{
		// 是否使用 TOS 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// TOS 存储对应的 Bucket。例如,存储位置为 live-test-tos-example/live/liveapp 时,Bucket 取值为 live-test-tos-example。
		// note:
		// 如果使用 TOS 存储,即 TOSParam 中 Enable 取值为 true 时,Bucket 为必填。
		Bucket: StringPtr(`live-test-tos-example`),
		// TOS 存储对应 Bucket 下的存储目录,默认为空。例如,存储位置为 live-test-tos-example/live/liveapp 时,StorageDir 取值为 live/liveapp。
		StorageDir: StringPtr(`live/liveapp`),
		// 录制文件的存储规则,最大长度为 200 个字符,支持以
		// record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} 样式设置存储规则,支持输入字母(A - Z、a - z)、数字(0 - 9)、短横线(-)、叹号(!)、下划线(_)、句点(.)、星号(*)及占位符。
		// 存储规则设置注意事项如下。
		// <li> 目录层级至少包含2级及以上,如 live/{App}/{Stream}。 </li>
		// <li> record 为自定义字段; </li>
		// <li> {PubDomain} 取值为当前配置的 vhost 值; </li>
		// <li> {App} 取值为当前配置的 AppName 值; </li>
		// <li> {Stream} 取值为当前配置的 StreamName 值; </li>
		// <li> {StartTime} 取值为录制的开始时间戳; </li>
		// <li> {EndTime} 取值为录制的结束时间戳。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	FlvParam.TOSParam = &TOSParam

	// VOD 存储相关配置。
	// note:
	// 录制文件只能选择一个位置进行存储,即 TOSParam 和 VODParam 配置且配置其中一个。
	VODParam := live.CreateRecordPresetV2BodyRecordPresetConfigFlvParamVODParam{
		// 是否使用 VOD 存储,默认为 false,支持的取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// 视频点播(VOD)空间名称。可登录[视频点播控制台](https://console.volcengine.com/vod/)查询。
		// note:
		// 如果使用 VOD 存储,即 VODParam 中 Enable 取值为 true 时,VodNamespace 为必填。
		VodNamespace: StringPtr(`Snapshot`),
		// 视频点播工作流模板 ID,对于存储在点播的录制文件,会使用该工作流模版对录制的视频进行处理,可登录[视频点播控制台](https://console.volcengine.com/vod/)获取工作流模板 ID,默认为空。
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 直播录制文件存储到点播时的视频分类 ID,您可以通过视频点播的 [ListVideoClassifications](https://www.volcengine.com/docs/4/101661) 接口查询视频分类 ID 等信息,默认为空。
		ClassificationID: Int32Ptr(1234),
		// 直播录制文件存储到点播时的存储类型,存储类型介绍请参考[媒资存储管理](https://www.volcengine.com/docs/4/73629#媒资存储)。默认值为 1,支持的取值及含义如下所示。
		// <li> 1:标准存储; </li>
		// <li> 2:归档存储。 </li>
		StorageClass: Int32Ptr(1),
		// 录制文件的存储规则,最大长度为 200 个字符,支持以
		// record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} 样式设置存储规则,支持输入字母(A - Z、a - z)、数字(0 - 9)、短横线(-)、叹号(!)、下划线(_)、句点(.)、星号(*)及占位符。
		// 存储规则设置注意事项如下。
		// <li> 目录层级至少包含2级及以上,如 live/{App}/{Stream}。 </li>
		// <li> record 为自定义字段; </li>
		// <li> {PubDomain} 取值为当前配置的 vhost 值; </li>
		// <li> {App} 取值为当前配置的 AppName 值; </li>
		// <li> {Stream} 取值为当前配置的 StreamName 值; </li>
		// <li> {StartTime} 取值为录制的开始时间戳; </li>
		// <li> {EndTime} 取值为录制的结束时间戳。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	FlvParam.VODParam = &VODParam

	RecordPresetConfig.FlvParam = &FlvParam

	// 录制为 HLS 合适时的录制参数。
	// note:
	// 您需至少配置一种录制格式,即 FlvParam、HlsParam、Mp4Param 至少开启一个。
	HlsParam := live.CreateRecordPresetV2BodyRecordPresetConfigHlsParam{
		// 当前格式的录制是否开启,默认 false,取值及含义如下所示。
		// <li> false:不开启; </li>
		// <li> true:开启。 </li>
		Enable: BoolPtr(true),
		// 断流录制单文件录制时长,单位为秒,默认值为 7200,取值范围为 -1,[300,86400],-1 表示一直录制,目前只对 HLS生效.
		Duration: Int32Ptr(7200),
		// 断流等待时长,取值范围[0,3600]
		ContinueDuration: Int32Ptr(180),
		// 实时录制文件时长,单位为 s,取值范围为 [300,21600]
		RealtimeRecordDuration: Int32Ptr(300),
		// 断流拼接间隔时长,对实时录制无效,单位为 s,默认值为 0。支持的取值如下所示。
		// <li> -1:一直拼接; </li>
		// <li> 0:不拼接; </li>
		// <li> 大于 0:断流拼接时间间隔,对 HLS 录制生效。 </li>
		Splice: Int32Ptr(0),
	}

	// TOS 存储相关配置
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	TOSParam1 := live.CreateRecordPresetV2BodyRecordPresetConfigHlsParamTOSParam{
		// 是否使用 TOS 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// TOS 存储空间,一般使用 CDN 对应的 Bucket
		// note:
		// 如果 TOSParam 中的 Enable 取值为 true,则 Bucket 必填。
		Bucket: StringPtr(`live-test-tos-example`),
		// TOS 存储目录,默认为空
		StorageDir: StringPtr(`/`),
		// 录制文件的存储位置。存储路径为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	HlsParam.TOSParam = &TOSParam1

	// VOD 存储相关配置
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	VODParam1 := live.CreateRecordPresetV2BodyRecordPresetConfigHlsParamVODParam{
		// 是否使用 VOD 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// 视频点播(VOD)空间名称。可登录[视频点播控制台](https://console.volcengine.com/vod/)查询
		// note:
		// 如果 VODParam 中的 Enable 取值为 true,则 VodNamespace 必填。
		VodNamespace: StringPtr(`Snapshot`),
		// 工作流模版 ID,对于存储在点播的录制文件,会使用该工作流模版对视频进行处理。可登录[视频点播控制台](https://console.volcengine.com/vod/)获取 ID
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 直播录制文件存储到点播时的视频分类 ID,您可以通过视频点播的 [ListVideoClassifications](https://www.volcengine.com/docs/4/101661) 接口查询视频分类 ID 等信息。
		ClassificationID: Int32Ptr(1234),
		// 直播录制文件存储到点播时的存储类型。默认值为 1,支持的取值及含义如下所示。
		// <li> 1:标准存储; </li>
		// <li> 2:归档存储。 </li>
		StorageClass: Int32Ptr(1),
		// 录制文件的存储位置,最大长度为 200 个字符。默认的存储位置为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} ,参数格式要求如下所示。
		// <li> 支持删除固定路径,如 {App}/{Stream}; </li>
		// <li> 不支持以正斜线(/)或者反斜线()开头; </li>
		// <li> 不支持 “//” 和 “/./” 等字符串; </li>
		// <li> 不支持 b、t、n、v、f、r 等字符; </li>
		// <li> 不支持 “..” 作为文件名; </li>
		// <li> 目录层级至少包含 2 级及以上,如 live/{App}/{Stream}。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	HlsParam.VODParam = &VODParam1

	RecordPresetConfig.HlsParam = &HlsParam

	// 录制为 MP4 格式时的录制参数。
	// note:
	// 您需至少配置一种录制格式,即 FlvParam、HlsParam、Mp4Param 至少开启一个。
	Mp4Param := live.CreateRecordPresetV2BodyRecordPresetConfigMp4Param{
		// 当前格式的录制是否开启,默认 false,取值及含义如下所示。
		// <li> false:不开启; </li>
		// <li> true:开启。 </li>
		Enable: BoolPtr(true),
		// 断流等待时长,取值范围[0,3600]
		ContinueDuration: Int32Ptr(180),
		// 断流录制单文件录制时长,单位为 s,默认值为 7200,取值范围为 -1,[300,86400],-1表示一直录制,目前只对HLS生效
		Duration: Int32Ptr(7200),
		// 实时录制文件时长,单位为 s,取值范围为 [300,21600]
		RealtimeRecordDuration: Int32Ptr(300),
		// 断流拼接间隔时长,对实时录制无效,单位为 s,默认值为 0。支持的取值如下所示。
		// <li> -1:一直拼接; </li>
		// <li> 0:不拼接; </li>
		// <li> 大于 0:断流拼接时间间隔,对 HLS 录制生效。 </li>
		Splice: Int32Ptr(0),
	}

	// TOS 存储相关配置
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	TOSParam2 := live.CreateRecordPresetV2BodyRecordPresetConfigMp4ParamTOSParam{
		// 是否使用 TOS 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// TOS 存储空间,一般使用 CDN 对应的 Bucket
		// note:
		// 如果 TOSParam 中的 Enable 取值为 true,则 Bucket 必填。
		Bucket: StringPtr(`live-test-tos-example`),
		// TOS 存储目录,默认为空
		StorageDir: StringPtr(`/`),
		// 录制文件的存储位置。存储路径为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	Mp4Param.TOSParam = &TOSParam2

	// VOD 存储相关配置
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	VODParam2 := live.CreateRecordPresetV2BodyRecordPresetConfigMp4ParamVODParam{
		// 是否使用 VOD 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// 视频点播(VOD)空间名称。可登录[视频点播控制台](https://console.volcengine.com/vod/)查询
		// note:
		// 如果 VODParam 中的 Enable 取值为 true,则 VodNamespace 必填。
		VodNamespace: StringPtr(`Snapshot`),
		// 工作流模版 ID,对于存储在点播的录制文件,会使用该工作流模版对视频进行处理。可登录[视频点播控制台](https://console.volcengine.com/vod/)获取 ID
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 直播录制文件存储到点播时的视频分类 ID,您可以通过视频点播的 [ListVideoClassifications](https://www.volcengine.com/docs/4/101661) 接口查询视频分类 ID 等信息。
		ClassificationID: Int32Ptr(1234),
		// 直播录制文件存储到点播时的存储类型。默认值为 1,支持的取值及含义如下所示。
		// <li> 1:标准存储; </li>
		// <li> 2:归档存储。 </li>
		StorageClass: Int32Ptr(1),
		// 录制文件的存储位置,最大长度为 200 个字符。默认的存储位置为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} ,参数格式要求如下所示。
		// <li> 支持删除固定路径,如 {App}/{Stream}; </li>
		// <li> 不支持以正斜线(/)或者反斜线()开头; </li>
		// <li> 不支持 “//” 和 “/./” 等字符串; </li>
		// <li> 不支持 b、t、n、v、f、r 等字符; </li>
		// <li> 不支持 “..” 作为文件名; </li>
		// <li> 目录层级至少包含 2 级及以上,如 live/{App}/{Stream}。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	Mp4Param.VODParam = &VODParam2

	RecordPresetConfig.Mp4Param = &Mp4Param

	body.RecordPresetConfig = RecordPresetConfig

	resp, err := service.CreateRecordPresetV2(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

删除录制配置

您可以调用 DeleteRecordPreset 接口删除录制配置。详细的参数说明可参见 DeleteRecordPreset 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DeleteRecordPresetBody{
		// 应用名称,您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待删除的录制配置 App 取值。
		App: StringPtr(`live`),
		// 录制配置的名称。可调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待删除录制配置的名称。
		Preset: `liverecord`,
		// 域名空间。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待删除录制配置的 Vhost 取值。
		Vhost: StringPtr(`push.example.com`),
		// 流名称。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待删除录制配置的 Stream 取值。
		Stream: StringPtr(`example_stream`),
	}

	resp, err := service.DeleteRecordPreset(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

更新录制配置

您可以调用 UpdateRecordPresetV2 接口更新录制配置。详细的参数说明可参见 UpdateRecordPresetV2 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func Int32Ptr(v int32) *int32 {
	return &v
}

func StringPtrs(vals []string) []*string {
	ptrs := make([]*string, len(vals))
	for i := 0; i < len(vals); i++ {
		ptrs[i] = &vals[i]
	}
	return ptrs
}

func BoolPtr(v bool) *bool {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.UpdateRecordPresetV2Body{
		// 域名空间。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待更新录制配置的 Vhost 取值。
		Vhost: `push.example.com`,
		// 应用名称,取值与直播流地址的 AppName 字段取值相同,用来指定待更新的录制配置,默认为空。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待更新录制配置的 App 取值。
		App: StringPtr(`live`),
		// 录制配置的名称。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待更新录制配置的 Name 取值。
		Preset: `liverecord`,
		// 流名称,取值与直播流地址的 StreamName 字段取值相应,用来指定待更新的录制配置,默认为空。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待更新录制配置的 Stream 取值。
		Stream: StringPtr(`example_stream`),
	}

	// 录制配置的详细参数配置。
	// note:
	// 以下录制参数,未传入值时表示与更新前的配置相同。
	RecordPresetConfig := live.UpdateRecordPresetV2BodyRecordPresetConfig{
		// 是否录制转码流,默认值为 0。支持的取值如下所示。
		// <li> 0:不录制; </li>
		// <li> 1:录制全部转码流; </li>
		// <li> 2:录制指定转码流,即通过转码后缀列表 TranscodeSuffixList 匹配转码流进行录制,如果转码流后缀列表为空仍表示录制全部转码流。 </li>
		// note:
		// 转码流和源流需至少选一个进行录制,即是否录制转码流(TranscodeRecord)和是否录制源流(OriginRecord)的取值至少一个不为 0。
		TranscodeRecord: Int32Ptr(1),
		// 是否录制源流,默认值为 0,支持的取值及含义如下所示。
		// <li> 0:不录制; </li>
		// <li> 1:录制。 </li>
		// note:
		// 转码流和源流需至少选一个进行录制,即是否录制转码流(TranscodeRecord)和是否录制源流(OriginRecord)的取值至少一个不为 0。
		OriginRecord: Int32Ptr(1),
		// 录制为 HLS 格式时,单个 TS 切片时长,单位为秒,默认值为 10,取值范围为 [5,30]。
		SliceDuration: Int32Ptr(5),
	}

	// 转码流后缀列表,转码流录制配置为根据转码流列表匹配(TranscodeRecord 取值为 2)时生效,TranscodeSuffixList 默认配置为空,效果等同于录制全部转码流。
	TranscodeSuffixList := []string{"_hd"}

	RecordPresetConfig.TranscodeSuffixList = StringPtrs(TranscodeSuffixList)

	// 录制为 FLV 格式时的录制参数。
	// note:
	// 您需至少配置一个录制格式,即 FlvParam、HlsParam、Mp4Param 至少开启一个。
	FlvParam := live.UpdateRecordPresetV2BodyRecordPresetConfigFlvParam{
		// 当前格式的录制是否开启,默认 false,取值及含义如下所示。
		// <li> false:不开启; </li>
		// <li> true:开启。 </li>
		Enable: BoolPtr(true),
		// 断流录制场景下,单文件录制时长,单位为秒,默认值为 7200,取值范围为 -1 和 [300,86400]。
		// <li> 取值为 -1 时,表示不限制录制时长,录制结束后生成一个完整的录制文件。 </li>
		// <li> 取值为 [300,86400] 之间的值时,表示根据设置的录制文件时长,到达时长立即生成录制文件,完成录制后一起上传。 </li>
		// note:
		// <li> 断流录制场景仅在录制格式为 HLS 时生效,且断流录制和实时录制为二选一配置。 </li>
		// <li> 如录制过程中出现断流,对应生成的录制文件时长也会相应缩短。 </li>
		Duration: Int32Ptr(7200),
		// 实时录制场景下,单文件录制时长,单位为秒,默认值为 1800,取值范围为 [300,21600]。录制时间到达设置的单文件录制时长时,会立即生成录制文件实时上传存储。
		// note:
		// 如录制过程中出现断流,对应生成的录制文件时长也会相应缩短。
		RealtimeRecordDuration: Int32Ptr(7200),
		// 断流录制场景下,断流拼接时长,单位为秒,默认值为 0,支持的取值及含义如下所示。
		// <li> -1:一直拼接,表示每次断流都不会影响录制任务,录制完成后生成一个完整的录制文件; </li>
		// <li> 0:不拼接,表示每次断流结束录制任务生成一个录制文件,断流恢复重新开始一个新的录制任务; </li>
		// <li> 大于 0:拼接容错时间,表示如果断流时间小于拼接容错时间时,则录制任务不会停止,不会生成新的录制文件;如果断流时间大于拼接容错时间,则录制任务停止,断流恢复后重新开始一个新的录制任务。 </li>
		// note:
		// 断流录制场景仅在录制格式为 HLS 时生效,且断流录制和实时录制为二选一配置。
		Splice: Int32Ptr(0),
		// 实时录制场景下,断流等待时长,单位为秒,默认值为 180,取值范围为 [0,3600]。如果实际断流时间小于断流等待时长,录制任务不会停止;如果实际断流时间大于断流等待时长,录制任务会停止,断流恢复后重新开始一个新的录制任务。
		ContinueDuration: Int32Ptr(180),
	}

	// TOS 存储相关配置。
	// note:
	// 录制文件只能选择一个位置进行存储,即 TOSParam 和 VODParam 配置且配置其中一个。
	TOSParam := live.UpdateRecordPresetV2BodyRecordPresetConfigFlvParamTOSParam{
		// 是否使用 TOS 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// TOS 存储对应的 Bucket。例如,存储位置为 live-test-tos-example/live/liveapp 时,Bucket 取值为 live-test-tos-example。
		// note:
		// 如果使用 TOS 存储,即 TOSParam 中 Enable 取值为 true 时,Bucket 为必填。
		Bucket: StringPtr(`live-test-tos-example`),
		// TOS 存储对应 Bucket 下的存储目录,默认为空。例如,存储位置为 live-test-tos-example/live/liveapp 时,StorageDir 取值为 live/liveapp。
		StorageDir: StringPtr(`live/liveapp`),
		// 录制文件的存储规则,最大长度为 200 个字符,支持以
		// record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} 样式设置存储规则,支持输入字母(A - Z、a - z)、数字(0 - 9)、短横线(-)、叹号(!)、下划线(_)、句点(.)、星号(*)及占位符。
		// 存储规则设置注意事项如下。
		// <li> 目录层级至少包含2级及以上,如 live/{App}/{Stream}。 </li>
		// <li> record 为自定义字段; </li>
		// <li> {PubDomain} 取值为当前配置的 vhost 值; </li>
		// <li> {App} 取值为当前配置的 AppName 值; </li>
		// <li> {Stream} 取值为当前配置的 StreamName 值; </li>
		// <li> {StartTime} 取值为录制的开始时间戳; </li>
		// <li> {EndTime} 取值为录制的结束时间戳。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	FlvParam.TOSParam = &TOSParam

	// VOD 存储相关配置。
	// note:
	// 录制文件只能选择一个位置进行存储,即 TOSParam 和 VODParam 配置且配置其中一个。
	VODParam := live.UpdateRecordPresetV2BodyRecordPresetConfigFlvParamVODParam{
		// 是否使用 VOD 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// 视频点播(VOD)空间名称。可登录[视频点播控制台](https://console.volcengine.com/vod/)查询。
		// note:
		// 如果使用 VOD 存储,即 VODParam 中 Enable 取值为 true 时,VodNamespace 为必填。
		VodNamespace: StringPtr(`Snapshot`),
		// 视频点播工作流模板 ID,对于存储在点播的录制文件,会使用该工作流模版对录制的视频进行处理,可登录[视频点播控制台](https://console.volcengine.com/vod/)获取工作流模板 ID,默认为空。
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 直播录制文件存储到点播时的视频分类 ID,您可以通过视频点播的 [ListVideoClassifications](https://www.volcengine.com/docs/4/101661) 接口查询视频分类 ID 等信息,默认为空。
		ClassificationID: Int32Ptr(1234),
		// 直播录制文件存储到点播时的存储类型,存储类型介绍请参考[媒资存储管理](https://www.volcengine.com/docs/4/73629#媒资存储)。默认值为 1,支持的取值及含义如下所示。
		// <li> 1:标准存储; </li>
		// <li> 2:归档存储。 </li>
		StorageClass: Int32Ptr(1),
		// 录制文件的存储规则,最大长度为 200 个字符,支持以
		// record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} 样式设置存储规则,支持输入字母(A - Z、a - z)、数字(0 - 9)、短横线(-)、叹号(!)、下划线(_)、句点(.)、星号(*)及占位符。
		// 存储规则设置注意事项如下。
		// <li> 目录层级至少包含2级及以上,如 live/{App}/{Stream}。 </li>
		// <li> record 为自定义字段; </li>
		// <li> {PubDomain} 取值为当前配置的 vhost 值; </li>
		// <li> {App} 取值为当前配置的 AppName 值; </li>
		// <li> {Stream} 取值为当前配置的 StreamName 值; </li>
		// <li> {StartTime} 取值为录制的开始时间戳; </li>
		// <li> {EndTime} 取值为录制的结束时间戳。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	FlvParam.VODParam = &VODParam

	RecordPresetConfig.FlvParam = &FlvParam

	// 录制为 HLS 格式时的录制参数。
	// note:
	// 您需至少配置一个录制格式,即 FlvParam、HlsParam、Mp4Param 至少开启一个。
	HlsParam := live.UpdateRecordPresetV2BodyRecordPresetConfigHlsParam{
		// 当前格式的录制是否开启,默认 false,取值及含义如下所示。
		// <li> false:不开启; </li>
		// <li> true:开启。 </li>
		Enable: BoolPtr(true),
		// 断流录制单文件录制时长,单位为 s,默认值为 7200,取值范围为 -1,[300,86400],-1表示一直录制,目前只对 HLS 生效。
		Duration: Int32Ptr(7200),
		// 实时录制文件时长,单位为 s,取值范围为 [300,21600]。
		RealtimeRecordDuration: Int32Ptr(7200),
		// 断流拼接间隔时长,对实时录制无效,单位为 s,默认值为 0。支持的取值如下所示。
		// <li> -1:一直拼接; </li>
		// <li> 0:不拼接; </li>
		// <li> 大于 0:断流拼接时间间隔,对 HLS 录制生效。 </li>
		Splice: Int32Ptr(0),
		// 断流等待时长,取值范围[0, 3600]。
		ContinueDuration: Int32Ptr(180),
	}

	// TOS 存储相关配置。
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	TOSParam1 := live.UpdateRecordPresetV2BodyRecordPresetConfigHlsParamTOSParam{
		// 是否使用 TOS 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// TOS 存储空间,一般使用 CDN 对应的 Bucket。
		// note:
		// 如果 TOSParam 中的 Enable 取值为 true,则 Bucket 必填。
		Bucket: StringPtr(`live-test-tos-example`),
		// TOS 存储目录,默认为空。
		StorageDir: StringPtr(`/`),
		// 录制文件的存储位置。存储路径为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	HlsParam.TOSParam = &TOSParam1

	// VOD 存储相关配置。
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	VODParam1 := live.UpdateRecordPresetV2BodyRecordPresetConfigHlsParamVODParam{
		// 是否使用 VOD 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// 视频点播(VOD)空间名称。可登录[视频点播控制台](https://console.volcengine.com/vod/)查询。
		// note:
		// 如果 VODParam 中的 Enable 取值为 true,则 VodNamespace 必填。
		VodNamespace: StringPtr(`Snapshot`),
		// 工作流模版 ID,对于存储在点播的录制文件,会使用该工作流模版对视频进行处理。可登录[视频点播控制台](https://console.volcengine.com/vod/)获取 ID。
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 直播录制文件存储到点播时的视频分类 ID,您可以通过视频点播的 [ListVideoClassifications](https://www.volcengine.com/docs/4/101661) 接口查询视频分类 ID 等信息。
		ClassificationID: Int32Ptr(1234),
		// 直播录制文件存储到点播时的存储类型。默认值为 1,支持的取值及含义如下所示。
		// <li> 1:标准存储; </li>
		// <li> 2:归档存储。 </li>
		StorageClass: Int32Ptr(1),
		// 录制文件的存储位置,最大长度为 200 个字符。默认的存储位置为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} ,参数格式要求如下所示。
		// <li> 支持删除固定路径,如 {App}/{Stream}; </li>
		// <li> 不支持以正斜线(/)或者反斜线()开头; </li>
		// <li> 不支持 “//” 和 “/./” 等字符串; </li>
		// <li> 不支持 b、t、n、v、f、r 等字符; </li>
		// <li> 不支持 “..” 作为文件名; </li>
		// <li> 目录层级至少包含 2 级及以上,如 live/{App}/{Stream}。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	HlsParam.VODParam = &VODParam1

	RecordPresetConfig.HlsParam = &HlsParam

	// 录制为 MP4 格式时的录制参数。
	// note:
	// 您需至少配置一个录制格式,即 FlvParam、HlsParam、Mp4Param 至少开启一个。
	Mp4Param := live.UpdateRecordPresetV2BodyRecordPresetConfigMp4Param{
		// 当前格式的录制是否开启,默认 false,取值及含义如下所示。
		// <li> false:不开启; </li>
		// <li> true:开启。 </li>
		Enable: BoolPtr(true),
		// 断流录制单文件录制时长,单位为 s,默认值为 7200,取值范围为 -1,[300,86400],-1表示一直录制,目前只对 HLS 生效。
		Duration: Int32Ptr(7200),
		// 实时录制文件时长,单位为 s,取值范围为 [300,21600]。
		RealtimeRecordDuration: Int32Ptr(7200),
		// 断流拼接间隔时长,对实时录制无效,单位为 s,默认值为 0。支持的取值如下所示。
		// <li> -1:一直拼接; </li>
		// <li> 0:不拼接; </li>
		// <li> 大于 0:断流拼接时间间隔,对 HLS 录制生效。 </li>
		Splice: Int32Ptr(0),
		// 断流等待时长,取值范围[0, 3600]。
		ContinueDuration: Int32Ptr(180),
	}

	// TOS 存储相关配置。
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	TOSParam2 := live.UpdateRecordPresetV2BodyRecordPresetConfigMp4ParamTOSParam{
		// 是否使用 TOS 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// TOS 存储空间,一般使用 CDN 对应的 Bucket。
		// note:
		// 如果 TOSParam 中的 Enable 取值为 true,则 Bucket 必填。
		Bucket: StringPtr(`live-test-tos-example`),
		// TOS 存储目录,默认为空。
		StorageDir: StringPtr(`/`),
		// 录制文件的存储位置。存储路径为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	Mp4Param.TOSParam = &TOSParam2

	// VOD 存储相关配置。
	// note:
	// TOSParam和VODParam配置且配置其中一个。
	VODParam2 := live.UpdateRecordPresetV2BodyRecordPresetConfigMp4ParamVODParam{
		// 是否使用 VOD 存储,默认为 false,取值及含义如下所示。
		// <li> false:不使用; </li>
		// <li> true:使用。 </li>
		Enable: BoolPtr(true),
		// 视频点播(VOD)空间名称。可登录[视频点播控制台](https://console.volcengine.com/vod/)查询。
		// note:
		// 如果 VODParam 中的 Enable 取值为 true,则 VodNamespace 必填。
		VodNamespace: StringPtr(`Snapshot`),
		// 工作流模版 ID,对于存储在点播的录制文件,会使用该工作流模版对视频进行处理。可登录[视频点播控制台](https://console.volcengine.com/vod/)获取 ID。
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 直播录制文件存储到点播时的视频分类 ID,您可以通过视频点播的 [ListVideoClassifications](https://www.volcengine.com/docs/4/101661) 接口查询视频分类 ID 等信息。
		ClassificationID: Int32Ptr(1234),
		// 直播录制文件存储到点播时的存储类型。默认值为 1,支持的取值及含义如下所示。
		// <li> 1:标准存储; </li>
		// <li> 2:归档存储。 </li>
		StorageClass: Int32Ptr(1),
		// 录制文件的存储位置,最大长度为 200 个字符。默认的存储位置为 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} ,参数格式要求如下所示。
		// <li> 支持删除固定路径,如 {App}/{Stream}; </li>
		// <li> 不支持以正斜线(/)或者反斜线()开头; </li>
		// <li> 不支持 “//” 和 “/./” 等字符串; </li>
		// <li> 不支持 b、t、n、v、f、r 等字符; </li>
		// <li> 不支持 “..” 作为文件名; </li>
		// <li> 目录层级至少包含 2 级及以上,如 live/{App}/{Stream}。 </li>
		ExactObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
	}

	Mp4Param.VODParam = &VODParam2

	RecordPresetConfig.Mp4Param = &Mp4Param

	body.RecordPresetConfig = &RecordPresetConfig

	resp, err := service.UpdateRecordPresetV2(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询录制配置列表

您可以调用 ListVhostRecordPresetV2 接口查询录制配置列表。详细的参数说明可参见 ListVhostRecordPresetV2 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.ListVhostRecordPresetV2Body{
		// 域名空间,即直播流地址的域名所属的域名空间。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看需要录制的直播流使用的域名所属的域名空间。
		Vhost: `push.example.com`,
		// 直播录制的存储类型,默认值为 tos,支持的取值及含义如下所示。
		// <li> vod:录制文件存在 VOD; </li>
		// <li> tos:录制文件存在 TOS。 </li>
		Type: StringPtr(`tos`),
	}

	resp, err := service.ListVhostRecordPresetV2(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

创建直播录制任务

您可以调用 CreatePullRecordTask 接口创建直播录制任务。详细的参数说明可参见 CreatePullRecordTask 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.CreatePullRecordTaskBody{
		// 域名空间。您可以调用 [ListVhostRecordPresetV2](https://www.volcengine.com/docs/6469/1126858) 接口查看待使用的录制配置的 Vhost 取值。
		Vhost: StringPtr(`push.example.com`),
		// 直播流使用的推流域名或拉流域名。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看直播流使用的域名。
		Domain: `push.example.com`,
		// 应用名称,即直播流地址的 AppName 字段取值,支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		App: `Live`,
		// 流名称,即直播流地址的 StreamName 字段取值,支持由大小写字母(A - Z、a - z)、数字(0 - 9)、字母、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 100 个字符。
		Stream: `example_stream`,
		// 待录制直播流的拉流地址。
		// note:
		// 当前仅支持 FLV 格式的拉流地址。
		StreamURL: `http://example.push.com/Live/example_stream.flv`,
		// 指定录制任务的开始时间,RFC3339 格式的时间戳,精度为秒。默认为空,表示立即开始。
		StartTime: StringPtr(`2023-06-30T15:04:05+08:00`),
		// 指定录制任务的结束时间,RFC3339 格式的时间戳,精度为秒,默认为空,表示录制到直播流结束。
		EndTime: StringPtr(`2023-06-30T15:05:05+08:00`),
	}

	resp, err := service.CreatePullRecordTask(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

停止直播录制任务

您可以调用 StopPullRecordTask 接口停止直播录制任务。详细的参数说明可参见 StopPullRecordTask 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.StopPullRecordTaskBody{
		// 任务 ID,录制任务的唯一标识。您可以调用 [ListPullRecordTask](https://www.volcengine.com/docs/6469/1111480) 接口查看直播录制任务的任务 ID。
		TaskID: `f831f3b0********1aa4dcf7621`,
	}

	resp, err := service.StopPullRecordTask(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询直播录制任务

您可以调用 ListPullRecordTask 接口查询直播录制任务。详细的参数说明可参见 ListPullRecordTask 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.ListPullRecordTaskBody{
		// 查询数据的页码,默认为 1,表示查询第一页的数据,取值范围为正整数。
		PageNum: 1,
		// 每页显示的数据条数,默认为 20,最大值为 500。
		PageSize: 5,
	}

	resp, err := service.ListPullRecordTask(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询录制历史详情

您可以调用 DescribeRecordTaskFileHistory 接口查询录制历史详情。详细的参数说明可参见 DescribeRecordTaskFileHistory 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.DescribeRecordTaskFileHistoryBody{
		// 域名空间,即直播流地址的域名所属的域名空间,默认为空表示查询所有录制历史。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看直播流使用的域名所属的域名空间。
		Vhost: StringPtr(`push.example.com`),
		// 应用名称,取值与直播流地址的 AppName 字段取值相同,默认为空表示查询 vhost 下的所有录制历史。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		App: StringPtr(`live`),
		// 流名称,取值与直播流地址的 StreamName 字段取值相同,默认为空表示查询 App 下的所有录制历史。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 100 个字符。
		// note:
		// 如果指定 Stream,必须同时指定 App 的值。
		Stream: StringPtr(`example_stream`),
		// 开始录制时间,RFC3339 格式的时间戳,精度为秒。当您查询指定录制任务详情时,DateFrom 应设置为开始时间之前的任意时间。
		DateFrom: `2023-11-01T00:00:00+08:00`,
		// 结束录制时间,RFC3339 格式的时间戳,精度为秒。结束时间需晚于 DateFrom,且与 DateFrom 间隔不超过 7 天。
		DateTo: `2023-11-07T23:59:59+08:00`,
		// 查询数据的页码,默认为 1,表示查询第一页的数据,取值范围为正整数。
		PageNum: 1,
		// 每页显示的数据条数,取值范围为正整数。
		PageSize: 30,
		// 录制文件保存位置,支持的取值及含义如下所示。
		// <li> tos:存储到 TOS(默认值); </li>
		// <li> vod:存储到 VOD。 </li>
		Type: StringPtr(`tos`),
	}

	resp, err := service.DescribeRecordTaskFileHistory(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

查询单个直播录制任务

您可以调用 GetPullRecordTask 接口查询单个直播录制任务。详细的参数说明可参见 GetPullRecordTask 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.GetPullRecordTaskBody{
		// 任务 ID,录制任务的唯一标识。您可以调用 [ListPullRecordTask](https://www.volcengine.com/docs/6469/1111480) 获取任务 ID。
		TaskID: `5b903f78c7f5ae*******01f6fe2eea`,
	}

	resp, err := service.GetPullRecordTask(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}

创建录制索引文件

您可以调用 CreateLiveStreamRecordIndexFiles 接口创建录制索引文件。详细的参数说明可参见 CreateLiveStreamRecordIndexFiles 接口文档。

接口调用示例如下所示。

package main

import (
	"context"
	"fmt"
	"os"

	"github.com/volcengine/volc-sdk-golang/base"
	live "github.com/volcengine/volc-sdk-golang/service/live/v20230101"
)

func StringPtr(v string) *string {
	return &v
}

func BoolPtr(v bool) *bool {
	return &v
}

func main() {
	// 强烈建议不要把 VOLC_ACCESSKEY 和 VOLC_SECRETKEY 保存到工程代码里,否则可能导致 AccessKey 泄露,威胁您账号下所有资源的安全。
	// 本示例通过从环境变量中读取 VOLC_ACCESSKEY 和 VOLC_SECRETKEY,来实现 API 访问的身份验证。运行代码示例前,请配置环境变量 VOLC_ACCESSKEY 和 VOLC_SECRETKEY
	service := live.NewInstance()
	service.SetCredential(base.Credentials{
		AccessKeyID:     os.Getenv("VOLC_ACCESSKEY"),
		SecretAccessKey: os.Getenv("VOLC_SECRETKEY"),
	})

	body := &live.CreateLiveStreamRecordIndexFilesBody{
		// 直播流使用的域名。您可以调用 [ListDomainDetail](https://www.volcengine.com/docs/6469/1126815) 接口或在视频直播控制台的[域名管理](https://console.volcengine.com/live/main/domain/list)页面,查看直播流使用的域名。
		Domain: `push.example.com`,
		// 应用名称,取值与直播流地址中 AppName 字段取值相同。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 30 个字符。
		App: `Live`,
		// 流名称,取值与直播流地址中 StreamName 字段取值相同。支持由大小写字母(A - Z、a - z)、数字(0 - 9)、下划线(_)、短横线(-)和句点(.)组成,长度为 1 到 100 个字符。
		Stream: `example_stream`,
		// 录制索引文件的开始时间,RFC3339 格式的时间戳,精度为秒。
		StartTime: `2023-06-30T15:04:05+08:00`,
		// 录制索引文件的结束时间,RFC3339 格式的时间戳,精度为秒。
		EndTime: `2023-06-30T15:04:05+08:00`,
		// 指定录制文件存储的 TOS Bucket。默认为空,表示与对应录制配置中的存储配置一致。
		// note:
		// <li> OutputBucket 参数用于覆盖录制配置中的 TOS 存储的 Bucket 参数,OutputObject 参数用于覆盖录制配置中 TOS 存储的 ExactObject 参数。 </li>
		// <li> 当您的录制配置存储位置为 VOD ,且创建录制任务仍需存储至 VOD 时,请勿配置 OutputBucket 和 OutputObject。 </li>
		OutputBucket: StringPtr(`testBucket`),
		// 指定录制文件存储到 TOS 是的存储规则,默认为空,表示与对应录制配置中的存储规则配置一致。
		// 支持以 record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime} 样式设置存储规则,支持输入字母(A - Z、a - z)、数字(0 - 9)、短横线(-)、叹号(!)、下划线(_)、句点(.)、星号(*)及占位符,最大长度 200 个字符。
		// 存储规则设置注意事项如下。
		// <li> 目录层级至少包含2级及以上,如 live/{App}/{Stream}。 </li>
		// <li> record 为自定义字段; </li>
		// <li> {PubDomain} 取值为当前配置的 vhost 值; </li>
		// <li> {App} 取值为当前配置的 AppName 值; </li>
		// <li> {Stream} 取值为当前配置的 StreamName 值; </li>
		// <li> {StartTime} 取值为录制的开始时间戳; </li>
		// <li> {EndTime} 取值为录制的结束时间戳。 </li>
		OutputObject: StringPtr(`record/{PubDomain}/{App}/{Stream}/{StartTime}_{EndTime}`),
		// 是否开启获取录制视频宽高数据的功能,开启后会获取视频宽和高信息,支持的取值及含义如下所示,默认不传时表示开启。
		// <li> true:开启; </li>
		// <li> false:禁用。 </li>
		NeedFFProbe: BoolPtr(true),
		// 将录制文件存储到点播时,是否开启索引文件与 TS 文件分离,默认禁用。
		// <li> true:启用,删除索引文件时不会删除关联的 TS 文件; </li>
		// <li> false:禁用,删除索引文件时会删除关联的 TS 文件。 </li>
		SeparatedTS: BoolPtr(false),
		// 将录制文件存储到点播时,如需进行视频处理,可选择已定义的视频处理工作流模板,获取方法请参见[工作流模板](https://www.volcengine.com/docs/4/65675),默认为空。
		WorkflowID: StringPtr(`25524a2d*********891d7daf4b9`),
		// 指定访问录制文件的地址中的网络协议,取值及含义如下所示。
		// <li> http:超文本传输协议(默认值); </li>
		// <li> https:安全的超文本传输协议。 </li>
		TSScheme: StringPtr(`http`),
	}

	resp, err := service.CreateLiveStreamRecordIndexFiles(context.Background(), body)

	if err != nil {
		fmt.Printf("error %v", err)
	} else {
		fmt.Printf("success %+v", resp)
	}
}