本文提供了直接調用通用型導播臺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 = "1" _, 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 ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "testing" "github.com/go-ini/ini" ) // 添加資源 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" "testing" "github.com/go-ini/ini" ) // 添加布局 func AddCasterLayout(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) } // 創建布局 addCasterLayoutRequest := live.CreateAddCasterLayoutRequest() addCasterLayoutRequest.CasterId = "xxx" addCasterLayoutRequest.BlendList = &[]string{"RV01"} // 對應于視頻的位置 addCasterLayoutRequest.MixList = &[]string{"RV01"} // 對應于視頻的位置 addCasterLayoutRequest.AudioLayer = &[]live.AddCasterLayoutAudioLayer{ { VolumeRate: "1", ValidChannel: "all", FixedDelayDuration: "0", }, } addCasterLayoutRequest.VideoLayer = &[]live.AddCasterLayoutVideoLayer{ { FillMode: "fit", HeightNormalized: "1", WidthNormalized: "1", PositionRefer: "topLeft", PositionNormalized: &[]string{"0", "0"}, FixedDelayDuration: "0", }, } _, err = liveClient.AddCasterLayout(addCasterLayoutRequest) if err != nil { t.Fatal(err) } }
關于AddCasterLayout接口的更多信息,請參見添加導播臺布局。
添加ET字幕組件并應用到場景
package caster import ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "testing" "github.com/go-ini/ini" ) // 添加ET字幕組件并應用到場景 func AddETComponent(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) } // 此方法前提: 導播臺已經存在,且添加的視頻資源是直播流,且locationID是RV01 // 注:ET字幕必須是直播流才有效 casterID := "xxxxx" // 創建組件 r := live.CreateAddCasterComponentRequest() r.CasterId = casterID r.ComponentType = "caption" r.ComponentName = "ET字幕測試使用" r.Effect = "none" r.LocationId = "RC01" r.ComponentLayer = `{"HeightNormalized":"1","WidthNormalized":"1","PositionRefer":"topLeft","PositionNormalized":["0.05", "0.7"]}` // 字幕具體字段請參考:AddCasterComponent文檔內的【CaptionLayerContent】字段說明 // 其中新增以下字段,目前官網文檔尚未更新,請注意 // BoxWidthNormalized:文字背景寬度歸一化值,該歸一化值是基于文字的size來計算的,即boxWidth/font_size, 如果系統歸一化反計算出來的值超過16,取16. 默認0。 // BoxColor:文字背景色彩,取值格式為 0xRGBA,比如: 取值"0xff0000ff" 表示紅色, 不透明; 默認"" 表示無效。 // ShadowxWidthNormalized:文字陰影x坐標歸一化值,該歸一化值是基于文字的size來計算的,即shadowxWidth/font_size, 如果系統歸一化反計算出來的值超過16,取16. 默認0。 // ShadowyWidthNormalized:文字陰影y坐標歸一化值,該歸一化值是基于文字的size來計算的,即shadowyWidth/font_size, 如果系統歸一化反計算出來的值超過16,取16. 默認0。 // ShadowColor:文字陰影色彩,取值格式為 0xRGBA,比如: 取值"0xff0000ff" 表示紅色, 不透明; 默認"" 表示無效。 r.CaptionLayerContent = `{ "SizeNormalized": 0.05, "Color": "0xFFFFFF", "LocationId": "RV01", "BorderColor": "0x696969", "BorderWidthNormalized": 0.1, "BoxColor": "0xffffff", "BoxWidthNormalized": 0.7, "ShadowColor": "0x3c3c3c", "ShadowxWidthNormalized": 0.4, "ShadowyWidthNormalized": 0.4, "SourceLan": "cn", "TargetLan": "en", "PtsOffset": -1000, "SourceLanPerLineWordCount": 28, "TargetLanPerLineWordCount": 60, "ShowSourceLan": true, "ShowTargetLan": true, "Truncation": false, "AppearDuration": 20000, "AppearMode": "Movie" }` addCasterComponentResp, err := liveClient.AddCasterComponent(r) if err != nil { t.Fatal(err) } // 應用組件到指定的場景下 setCasterSceneConfigRequest := live.CreateUpdateCasterSceneConfigRequest() setCasterSceneConfigRequest.LayoutId = "xxxxx" setCasterSceneConfigRequest.CasterId = casterID setCasterSceneConfigRequest.SceneId = "xxxx" setCasterSceneConfigRequest.ComponentId = &[]string{addCasterComponentResp.ComponentId} _, err = liveClient.UpdateCasterSceneConfig(setCasterSceneConfigRequest) if err != nil { t.Fatal(err) } }
關于AddCasterComponent接口的更多信息,請參見添加導播臺組件。
關于SetCasterSceneConfig接口的更多信息,請參見設置場景配置。
啟動導播臺、設置播放場景
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 ( "github.com/aliyun/alibaba-cloud-sdk-go/services/live" "testing" "github.com/go-ini/ini" ) // 切換布局 func ChangeLayout(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) } casterID := "xxxxxx" // 更改場景使用的布局ID setCasterSceneConfigRequest := live.CreateUpdateCasterSceneConfigRequest() setCasterSceneConfigRequest.LayoutId = "xxxxxxxxxxxx" setCasterSceneConfigRequest.CasterId = casterID setCasterSceneConfigRequest.SceneId = "xxxxxxxxxxxxxx" _, err = liveClient.UpdateCasterSceneConfig(setCasterSceneConfigRequest) if err != nil { t.Fatal(err) } }
關于SetCasterSceneConfig接口的更多信息,請參見設置場景配置。
停止導播臺
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接口的更多信息,請參見刪除導播臺。
文檔內容是否對您有幫助?