本文提供了直接調用虛擬演播廳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接口的相關信息,請參見接口的相關信息,請參見查詢虛擬演播廳布局。
文檔內容是否對您有幫助?