播单型导播台API调用Demo

本文提供了直接调用播单型导播台OpenAPI的Demo,具体逻辑请根据实际情况自行编写。

播单型导播台调用流程

示例代码

说明
  • 创建导播台

    package caster
    
    import (
        "github.com/aliyun/alibaba-cloud-sdk-go/services/live"
        uuid "github.com/satori/go.uuid"
        "testing"
    		"github.com/go-ini/ini"
    )
    
    // 创建导播台
    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 = "6"
        _, err = liveClient.CreateCaster(createCasterRequest)
        if err != nil {
            t.Fatal(err)
        }
    }

    关于CreateCaster接口的请求参数等更多信息,请参见创建导播台

  • 设置导播台

    package caster
    
    import (
        "github.com/aliyun/alibaba-cloud-sdk-go/services/live"
        "testing"
      	"github.com/go-ini/ini"
    )
    
    // 设置导播台
    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 (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"testing"
    	"github.com/go-ini/ini"
    )
    
    func TestAddShowIntoShowList(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)
    	}
    	req := live.CreateAddShowIntoShowListRequest()
    	req.CasterId = "xxxxx"
    	req.ResourceType = "live" // live:直播素材, vod:点播素材, pic:图片素材。
    	req.RegionId = "cn-shanghai"
    	req.ShowName = "创建播单型导播台demo"
    	req.ResourceUrl = "xxxxxx"
    	req.ResourceId = ""
    	//RepeatTimes和Duration两者只允许设置其中一个。
    	req.Duration = "10" // 单个节目播放时间长度,单位:秒。
    	//req.RepeatTimes = "2" // RepeatTimes为重复次数,示例:0表示重复0次(实际播放1次),1表示重复1次(实际播放2次),以此类推。
    	//req.Spot = requests.NewInteger(0) // 插入到播放列表的位置。位置从0 开始,默认添加到当前节目单的末尾。
    	rsp, err := liveClient.AddShowIntoShowList(req)
    	if err != nil {
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于AddShowIntoShowList接口的更多信息,请参见添加节目到节目单

  • 启动导播台

    package caster
    
    import (
        "github.com/aliyun/alibaba-cloud-sdk-go/services/live"
        "testing"
        "time"
    		"github.com/go-ini/ini"
    )
    
    // 启动导播台、设置播放场景
    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 (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"testing"
    	"github.com/go-ini/ini"
    )
    
    func TestPlayChoosenShow(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)
    	}
    	req := live.CreatePlayChoosenShowRequest()
    	req.CasterId = "xxxxx"
    	req.ShowId = "xxxxx"
    	req.RegionId = "cn-shanghai"
    	rsp, err := liveClient.PlayChoosenShow(req)
    	if err != nil {
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于PlayChoosenShow接口的更多信息,请参见手动切换节目

  • 停止导播台

    package caster
    
    import (
        "github.com/aliyun/alibaba-cloud-sdk-go/services/live"
        "testing"
      	"github.com/go-ini/ini"
    )
    // 停止导播台
    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"
        "testing"
      	"github.com/go-ini/ini"
    )
    // 停止并删除导播台
    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)
      	}
        // 删除导播台
        deleteCasterRequest := live.CreateDeleteCasterRequest()
        deleteCasterRequest.CasterId = "xxxxxxx"
        _, err = liveClient.DeleteCaster(deleteCasterRequest)
        if err != nil {
            t.Fatal(err)
        }
    }

    关于DeleteCaster接口的更多信息,请参见删除导播台

  • 创建一个定时任务

    package caster
    
    import (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"github.com/go-ini/ini"
    	"testing"
    )
    
    func InitializeAutoShowListTask(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)
    	}
    	req := live.CreateInitializeAutoShowListTaskRequest()
    	req.CasterConfig = `{"CasterTemplate": "lp_ld","LiveTemplates":["lhd", "lsd","lud"]}`
    	req.DomainName = `xxxx-xxxx.xxxxx.com`
    	req.ResourceIds = `["xxxxx"]`   // 查看媒资库(点播控制台)
    	req.StartTime = "1660632600000" // 开始时间,毫秒
    	req.EndTime = "1660632660000"   // 结束时间,毫秒
    	rsp, err := liveClient.InitializeAutoShowListTask(req)
    	if err != nil {
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于InitializeAutoShowListTask接口的更多信息,请参见创建一个定时任务

  • 删除节目单中的一个节目

    package caster
    
    import (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"github.com/go-ini/ini"
    	"testing"
    )
    
    func RemoveShowFromShowList(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)
    	}
    	req := live.CreateRemoveShowFromShowListRequest()
    	req.CasterId = "xxxx"
    	req.ShowId = "xxxxx" // 无法删除正在播放的节目
    	req.RegionId = "cn-shanghai"
    	rsp, err := liveClient.RemoveShowFromShowList(req)
    	if err != nil {
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于RemoveShowFromShowList接口的更多信息,请参见删除节目单中的节目

  • 修改播单属性

    package caster
    
    import (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"github.com/go-ini/ini"
    	"testing"
    )
    
    func ModifyShowList(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)
    	}
    	req := live.CreateModifyShowListRequest()
    	req.CasterId = "xxxx"
    	req.RegionId = "cn-shanghai"
    	req.RepeatTimes = "2" // RepeatTimes为重复次数,示例:0表示重复0次(实际播放1次),1表示重复1次(实际播放2次),以此类推。
    	//req.ShowId = "xxxx"
    	//req.Spot = "0"        // 插入到播放列表的位置。位置从0 开始,默认添加到当前节目单的末尾。
    	rsp, err := liveClient.ModifyShowList(req)
    	if err != nil {
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于ModifyShowList接口的更多信息,请参见修改播单属性

  • 节目单查询

    package caster
    
    import (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"github.com/go-ini/ini"
    	"testing"
    )
    
    func TestDescribeShowList(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)
    	}
    	req := live.CreateDescribeShowListRequest()
    	req.CasterId = "xxxxxx"
    	req.RegionId = "cn-shanghai"
    	rsp, _ := liveClient.DescribeShowList(req)
    	if err != nil {  // 此处会同时返回错误和结果,如果有结果可以忽略错误信息。
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于DescribeShowList接口的更多信息,请参见节目单查询

  • 查询自动启停的定时任务

    package caster
    
    import (
    	"fmt"
    	"github.com/aliyun/alibaba-cloud-sdk-go/services/live"
    	"github.com/go-ini/ini"
    	"testing"
    )
    
    func DescribeAutoShowListTasks(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)
    	}
    	req := live.CreateDescribeAutoShowListTasksRequest()
    	req.CasterId = "xxxx"
    	rsp, err := liveClient.DescribeAutoShowListTasks(req)
    	if err != nil {
    		t.Fatal(err)
    	}
    	println(fmt.Sprintf("%+v", rsp))
    }

    关于DescribeAutoShowListTasks接口的更多信息,请参见查询自动启停的定时任务