本文提供了直接调用虚拟演播厅OpenAPI的Demo,具体逻辑请根据实际情况自行编写。
虚拟演播厅调用流程
虚拟演播厅整个调用流程顺序如下 :
重要
请先添加视频资源再添加布局,否则布局无法生效。
示例代码
创建导播台
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" uuid "github.com/satori/go.uuid" "testing" ) // 创建导播台 func CreateCaster(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 创建导播台请求参数 createCasterRequest := live.CreateCreateCasterRequest() createCasterRequest.ClientToken = uuid.NewV1().String() createCasterRequest.CasterName = "导播台测试" // 不生效的话,请通过接口【设置导播台】来设置 createCasterRequest.ChargeType = "PostPaid" createCasterRequest.NormType = "4" _, err = liveClient.CreateCaster(createCasterRequest) if err != nil { t.Fatal(err) } }
关于CreateCaster接口的请求参数等更多信息,请参见创建导播台。
设置导播台
package caster import ( "fmt" "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 设置导播台 func SetCasterConfig(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 设置导播台配置参数 createSetCasterConfig := live.CreateSetCasterConfigRequest() createSetCasterConfig.CasterId = "xxxxxx" createSetCasterConfig.CasterName = "导播台测试" createSetCasterConfig.ChannelEnable = "1" createSetCasterConfig.Delay = "0" createSetCasterConfig.DomainName = "xxxxxxxx" createSetCasterConfig.ProgramEffect = "1" createSetCasterConfig.ProgramName = "test loop play" // 转码设置(横竖屏模式及清晰度设置) // 参考如下文档:SetCasterConfig // 其中:CasterTemplate取值范围如下 // lp_ld:流畅、lp_sd:标清、lp_hd:高清、lp_ud:超清。 // lp_ld_v:竖屏流畅、lp_sd_v:竖屏标清、lp_hd_v:竖屏高清、lp_ud_v:竖屏超清。 createSetCasterConfig.TranscodeConfig = `{"CasterTemplate": "lp_ld"}` // 录制 // json字段含义请参考:AddLiveAppRecordConfig createSetCasterConfig.RecordConfig = fmt.Sprintf(`{ "endpoint": "oss-cn-shanghai.aliyuncs.com", "ossBucket": "test-record", "videoFormat": [{"format": "flv", "interval": 900, "prefix":"record/{AppName}/{StreamName}/{StartTime}_{EndTime}" }]}`) _, err = liveClient.SetCasterConfig(createSetCasterConfig) if err != nil { t.Fatal(err) } }
关于SetCasterConfig接口的更多信息,请参见配置导播台。
添加视频资源
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 添加资源 func AddCasterVideoResource(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 创建导播台视频资源 addCasterVideoResourceRequest := live.CreateAddCasterVideoResourceRequest() addCasterVideoResourceRequest.CasterId = "xxxx" addCasterVideoResourceRequest.ResourceName = "测试使用视频资源" addCasterVideoResourceRequest.LiveStreamUrl = "xxxxxxxxxxxx" addCasterVideoResourceRequest.PtsCallbackInterval = "1000" addCasterVideoResourceResp, err := liveClient.AddCasterVideoResource(addCasterVideoResourceRequest) if err != nil { t.Fatal(err) } resourceID := addCasterVideoResourceResp.ResourceId // 视频资源与通道一一绑定 setCasterChannelRequest := live.CreateSetCasterChannelRequest() setCasterChannelRequest.CasterId = "xxx" setCasterChannelRequest.PlayStatus = "1" setCasterChannelRequest.ChannelId = "RV01" setCasterChannelRequest.ResourceId = resourceID _, err = liveClient.SetCasterChannel(setCasterChannelRequest) if err != nil { t.Fatal(err) } }
关于AddCasterVideoResource接口的更多信息,请参见添加导播台视频资源。
添加虚拟演播厅布局
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 设置导播台 func AddStudioLayout(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } request := live.CreateAddStudioLayoutRequest() request.Scheme = "https" request.CasterId = "xxxx" request.LayoutName = "绿幕" request.LayoutType = "studio" //request.CommonConfig = "{\"ChannelId\":\"RV01\" }" request.BgImageConfig = "{ \"Id\":\"k12kj31kj23\", \"ImageUrl\":\"\", \"MaterialId\":\"xxxx\" }" request.ScreenInputConfigList = "[{ \"Index\":\"1\", \"ChannelId\":\"RV01\", \"Color\":\"green\", \"PositionX\":\"0.1\", \"PositionY\":\"0.2\", \"HeightNormalized\":\"0.4\" } ]" request.MediaInputConfigList = "[{ \"Id\":\"k12kj31****\", \"Index\":\"1\", \"ChannelId\":\"RV07\", \"FillMode\":\"none\", \"PositionRefer\":\"topLeft\", \"WidthNormalized\":\"0\", \"HeightNormalized\":\"0.4854\", \"PositionNormalized\":\"[0.3691, 0.1958]\" }]" request.LayerOrderConfigList = "[{ \"Type\":\"background\", \"Id\":\"k12kj31kj23\" }, { \"Type\":\"media\", \"Id\":\"k12kj31****\" }]" _, err = liveClient.AddStudioLayout(request) if err != nil { t.Fatal(err) } }
关于AddStudioLayout接口的更多信息,请参见添加虚拟演播厅布局。
启动导播台、设置播放场景
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" "time" ) // 启动导播台、设置播放场景 func StartCaster(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 启动导播台 startCasterRequest := live.CreateStartCasterRequest() startCasterRequest.CasterId = "xxx" startCasterResp, err := liveClient.StartCaster(startCasterRequest) if err != nil { t.Fatal(err) } // 因为资源加载需要时间,如果立马启动,则可能资源尚未加载成功,所以需要暂停一下 time.Sleep(time.Second) // 设置播放场景 // PVW (可选设置) setCasterSceneConfigRequest := live.CreateSetCasterSceneConfigRequest() setCasterSceneConfigRequest.LayoutId = "xxx" setCasterSceneConfigRequest.CasterId = "xxx" setCasterSceneConfigRequest.SceneId = startCasterResp.PvwSceneInfos.SceneInfo[0].SceneId _, err = liveClient.SetCasterSceneConfig(setCasterSceneConfigRequest) if err != nil { t.Fatal(err) } // PGM (必选设置) setCasterSceneConfigRequest.SceneId = startCasterResp.PgmSceneInfos.SceneInfo[0].SceneId _, err = liveClient.SetCasterSceneConfig(setCasterSceneConfigRequest) if err != nil { t.Fatal(err) } }
关于StartCaster接口的更多信息,请参见启动导播台。
关于SetCasterSceneConfig接口的更多信息,请参见设置场景配置。
更新导播台场景配置
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 新导播台场景配置 func UpdateCasterSceneConfig(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } request := live.CreateUpdateCasterSceneConfigRequest() request.Scheme = "https" request.CasterId = "xxxx" request.SceneId = "xxxx" request.LayoutId = "xxxx" _, err = liveClient.UpdateCasterSceneConfig(request) if err != nil { t.Fatal(err) } }
关于UpdateCasterSceneConfig接口的请求参数等更多信息,请参见更新导播场景配置。
停止导播台
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 停止导播台 func StopCaster(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 停止导播台 stopCasterRequest := live.CreateStopCasterRequest() stopCasterRequest.CasterId = "xxxx" _, err = liveClient.StopCaster(stopCasterRequest) if err != nil { t.Fatal(err) } }
关于StopCaster接口的更多信息,请参见停止导播台。
删除虚拟演播厅布局
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 删除虚拟演播厅布局 func DeleteStudioLayout(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } request := live.CreateDeleteStudioLayoutRequest() request.Scheme = "https" request.CasterId = "xxxx" request.LayoutId = "xxxx" _, err = liveClient.DeleteStudioLayout(request) if err != nil { t.Fatal(err) } }
关于DeleteStudioLayout接口的更多信息,请参见删除虚拟演播厅布局。
删除导播台
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 删除导播台 func DeleteCaster(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 删除导播台 request := live.CreateDeleteCasterRequest() request.Scheme = "https" request.CasterId = "xxxx" _, err = liveClient.DeleteCaster(request) if err != nil { t.Fatal(err) } }
关于DeleteCaster接口的更多信息,请参见删除导播台。
修改虚拟演播厅布局
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 修改虚拟演播厅布局 func ModifyStudioLayout(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 修改虚拟演播厅布局 request := live.CreateModifyStudioLayoutRequest() request.Scheme = "https" request.CasterId = "xxxx" request.LayoutId = "xxxx" request.LayoutName = "modify" //request.CommonConfig = "{\"ChannelId\":\"RV01\" }" request.BgImageConfig = "{ \"Id\":\"k12kj31kj23\", \"ImageUrl\":\"https://xxxxx_!!6000000005962-2-tps-1920-1080.png\", \"MaterialId\":\"\" }" request.ScreenInputConfigList = "[{ \"Index\":\"1\", \"ChannelId\":\"RV01\", \"Color\":\"green\", \"PositionX\":\"0.1\", \"PositionY\":\"0.2\", \"HeightNormalized\":\"0.4\" } ]" request.MediaInputConfigList = "[{ \"Id\":\"k12kj31****\", \"Index\":\"1\", \"ChannelId\":\"RV08\", \"FillMode\":\"none\", \"PositionRefer\":\"topLeft\", \"WidthNormalized\":\"0\", \"HeightNormalized\":\"0.4854\", \"PositionNormalized\":\"[0.3691, 0.1958]\" }]" request.LayerOrderConfigList = "[{ \"Type\":\"background\", \"Id\":\"k12kj31kj23\" }, { \"Type\":\"media\", \"Id\":\"k12kj31****\" }]" _, err = liveClient.ModifyStudioLayout(request) if err != nil { t.Fatal(err) } }
关于ModifyStudioLayout接口的相关信息,请参见修改虚拟演播厅布局。
查询虚拟演播厅布局
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "github.com/go-ini/ini" "testing" ) // 获取虚拟演播厅布局设置 func DescribeStudioLayouts(t *testing.T) { cfg, err := ini.Load("conf/config.ini") if err != nil { t.Fatal(err) } // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从配置文件中读取AccessKey,来实现API访问的身份验证。如何配置文件,请参见视频直播 > 开发参考 > SDK参考 > 服务端SDK > Go SDK使用说明。 accessKeyID := cfg.Section("").Key("access_key_id").String() accessKeySecret := cfg.Section("").Key("access_key_secret").String() liveClient, err := live.NewClientWithAccessKey("cn-shanghai", accessKeyID, accessKeySecret) if err != nil { t.Fatal(err) } // 获取虚拟演播厅布局设置 request := live.CreateDescribeStudioLayoutsRequest() request.Scheme = "https" request.CasterId = "xxxx" //request.LayoutId = "xxxx" _, err = liveClient.DescribeStudioLayouts(request) if err != nil { t.Fatal(err) } }
关于DescribeStudioLayouts接口的相关信息,请参见接口的相关信息,请参见查询虚拟演播厅布局。
文档内容是否对您有帮助?