虚拟演播厅API调用Demo

本文提供了直接调用虚拟演播厅OpenAPI的Demo,具体逻辑请根据实际情况自行编写。

虚拟演播厅调用流程

虚拟演播厅整个调用流程顺序如下 :

重要

请先添加视频资源再添加布局,否则布局无法生效。

  1. 创建导播台

  2. 设置导播台

  3. 添加视频资源

  4. 添加虚拟演播厅布局

  5. 启动导播台

  6. 更新导播台场景配置

  7. 停止导播台

  8. 删除虚拟演播厅布局

  9. 删除导播台

示例代码

说明
  • 创建导播台

    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接口的相关信息,请参见接口的相关信息,请参见查询虚拟演播厅布局