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

轮播台调用流程

示例代码

说明 了解API的详细信息,请参见云导播API概览
  • 创建导播台
    package caster
    
    import (
        "github.com/aliyun/alibaba-cloud-sdk-go/services/live"
        uuid "github.com/satori/go.uuid"
        "testing"
    )
    
    // 创建导播台
    func CreateCaster(t *testing.T) {
        liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
        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"
    )
    
    // 设置导播台
    func SetCasterConfig(t *testing.T) {
        liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
        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接口的更多信息,请参见配置导播台

  • 添加一个节目到节目单
    func TestAddShowIntoShowList(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxxx", "xxxxx")
       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"
    )
    
    // 启动导播台、设置播放场景
    func StartCaster(t *testing.T) {
        liveClient, err := live.NewClientWithAccessKey("xxx", "xxx", "xxx")
        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接口的更多信息,请参见设置场景配置

  • 手动切换节目
    func TestPlayChoosenShow(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxxxx", "xxxxx")
       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"
    )
    // 停止导播台
    func StopCaster(t *testing.T) {
        liveClient, err := live.NewClientWithAccessKey("", "", "")
        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"
    )
    // 停止并删除导播台
    func DeleteCaster(t *testing.T) {
        liveClient, err := live.NewClientWithAccessKey("", "", "")
        if err != nil {
            t.Fatal(err)
        }
        // 删除导播台
        deleteCasterRequest := live.CreateDeleteCasterRequest()
        deleteCasterRequest.CasterId = "xxxxxxx"
        _, err = liveClient.DeleteCaster(deleteCasterRequest)
        if err != nil {
            t.Fatal(err)
        }
    }

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

  • 创建一个定时任务
    func TestInitializeAutoShowListTask(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxxx", "xxxx")
       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接口的更多信息,请参见创建一个定时任务

  • 删除节目单中的一个节目
    func TestRemoveShowFromShowList(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxxx", "xxxxx")
       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接口的更多信息,请参见删除节目单中的节目

  • 修改播单属性
    func TestModifyShowList(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxx", "xxxx")
       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接口的更多信息,请参见修改播单属性

  • 节目单查询
    func TestDescribeShowList(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxxxx", "xxxxxx")
       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接口的更多信息,请参见节目单查询

  • 查询自动启停的定时任务
    func TestDescribeAutoShowListTasks(t *testing.T) {
       liveClient, err := live.NewClientWithAccessKey("cn-shanghai", "xxxx", "xxxx")
       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接口的更多信息,请参见查询自动启停的定时任务