本文介紹了使用導播API服務的操作步驟及說明。
特別說明
請您區分導播服務與雲導播台,導播服務僅提供API服務,您需要自行開發完成前端頁面與互動部分,本文適用於導播服務。
雲導播台使用者請忽略該文檔,ApsaraVideo for Live控制台提供了導播台產品,可直接使用前端頁面進行導播操作。具體操作請參見雲導播快速入門。
閱讀對象
具備Java或者PHP開發能力,具體請參見Java SDK使用說明。
瞭解導播產品的準系統
瞭解ApsaraVideo for Live的準系統
前提條件
請開通導播需要的相關服務並綁定網域名稱,具體操作請參見開通雲導播服務。
導播操作步驟
配置導播台
步驟說明
導播台執行個體建立完成後,根據使用需求完成導播台名稱、網域名稱、轉碼、錄製、延播、備播素材等配置。
相關介面
範例程式碼
/** * 設定導播台配置 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @throws Exception 當配置過程中發生錯誤時拋出異常 */ private void setCasterConfig(Client client, String casterId) throws Exception { SetCasterConfigRequest request = new SetCasterConfigRequest(); request.setCasterId(casterId); // 佈建網域名 request.setDomainName("domainName"); // 轉碼配置 JSONObject transcodeConfig = new JSONObject(); // 直播轉碼配置,lsd:標清;lld:流暢;lud:超清;lhd:高清自適應轉碼模板;daobo-lsd:標清;daobo-lld:流暢;daobo-lud:超清;daobo-lhd:高清。 JSONObject liveTemplateIds = new JSONObject(); JSONArray locationId = new JSONArray(); locationId.add("lld"); liveTemplateIds.put("LocationId", locationId); transcodeConfig.put("LiveTemplateIds", liveTemplateIds); // 導播台轉碼模板,lp_ld:流暢;lp_sd:標清;lp_hd:高清;lp_ud:超清;lp_ld_v:豎屏流暢;lp_sd_v:豎屏標清;lp_hd_v:豎屏高清;lp_ud_v:豎屏超清。 transcodeConfig.put("CasterTemplate", "lp_sd"); request.setTranscodeConfig(transcodeConfig.toJSONString()); // 配置導播台直播錄製參數 JSONObject recordConfig = new JSONObject(); recordConfig.put("endpoint", ""); recordConfig.put("ossBucket", ""); recordConfig.put("videoFormat", ""); recordConfig.put("interval", 5); request.setRecordConfig(recordConfig.toJSONString()); SetCasterConfigResponse response = client.setCasterConfig(request); System.out.println("添加導播台配置:response: " + JSON.toJSONString(response)); }編輯視頻源
步驟說明
配置用於輸出的視頻源資訊,目前支援直播流及點播素材兩種類型。
相關介面
範例程式碼
/** * 添加視頻源到指定的導播台 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,指定要添加視頻源的導播台 * @return 返回添加的視頻源資源ID * @throws Exception 當API調用失敗或其他異常情況時拋出 */ private String addCasterVideoResource(Client client, String casterId) throws Exception { AddCasterVideoResourceRequest addCasterVideoResourceRequest = new AddCasterVideoResourceRequest(); addCasterVideoResourceRequest.setCasterId(casterId); addCasterVideoResourceRequest.setResourceName("testResourceName"); addCasterVideoResourceRequest.setMaterialId(""); // 設定重播次數,可選範圍[-1,60]。預設值為0表示不重播;-1表示無限迴圈; addCasterVideoResourceRequest.setRepeatNum(-1); AddCasterVideoResourceResponse addCasterVideoResourceResponse = client.addCasterVideoResource(addCasterVideoResourceRequest); System.out.println("添加視頻源:response: " + JSON.toJSONString(addCasterVideoResourceResponse)); return addCasterVideoResourceResponse.getBody().getResourceId(); } /** * 查詢指定導播台的視頻源資源清單 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,用於標識要查詢的導播台 * @return DescribeCasterVideoResourcesResponse 視頻源資源清單響應對象 * @throws Exception API調用過程中可能拋出的異常 */ private DescribeCasterVideoResourcesResponse describeCasterVideoResources(Client client, String casterId) throws Exception { DescribeCasterVideoResourcesRequest describeCasterVideoResourcesRequest = new DescribeCasterVideoResourcesRequest(); describeCasterVideoResourcesRequest.setCasterId(casterId); DescribeCasterVideoResourcesResponse describeCasterVideoResourcesResponse = client.describeCasterVideoResources(describeCasterVideoResourcesRequest); System.out.println("查詢視頻源列表:response: " + JSON.toJSONString(describeCasterVideoResourcesResponse)); return describeCasterVideoResourcesResponse; } /** * 修改導播台視頻資源 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param resourceId 資源ID * @throws Exception 當API調用失敗時拋出異常 */ private void modifyCasterVideoResource(Client client, String casterId, String resourceId) throws Exception { ModifyCasterVideoResourceRequest modifyCasterVideoResourceRequest = new ModifyCasterVideoResourceRequest(); modifyCasterVideoResourceRequest.setCasterId(casterId); modifyCasterVideoResourceRequest.setResourceId(resourceId); modifyCasterVideoResourceRequest.setResourceName("newResourceName"); modifyCasterVideoResourceRequest.setMaterialId(""); modifyCasterVideoResourceRequest.setVodUrl(""); modifyCasterVideoResourceRequest.setRepeatNum(-1); ModifyCasterVideoResourceResponse modifyCasterVideoResourceResponse = client.modifyCasterVideoResource(modifyCasterVideoResourceRequest); System.out.println("修改視頻源:response: " + JSON.toJSONString(modifyCasterVideoResourceResponse)); } /** * 刪除視頻源 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param resourceId 資源ID * @throws Exception 當API調用失敗時拋出異常 */ private void deleteCasterVideoResource(Client client, String casterId, String resourceId) throws Exception { DeleteCasterVideoResourceRequest deleteCasterVideoResourceRequest = new DeleteCasterVideoResourceRequest(); deleteCasterVideoResourceRequest.setCasterId(casterId); deleteCasterVideoResourceRequest.setResourceId(resourceId); DeleteCasterVideoResourceResponse deleteCasterVideoResourceResponse = client.deleteCasterVideoResource(deleteCasterVideoResourceRequest); System.out.println("刪除視頻源:response: " + JSON.toJSONString(deleteCasterVideoResourceResponse)); }編輯組件
步驟說明
配置用於輸出的組件資訊,目前支援文字及圖片兩種類型。
相關介面
說明配置組件內容:
文字組件需提供文字內容、字型比例、顏色等。
圖片組件需提供圖片素材ID。
範例程式碼
/** * 添加一個文字組件到指定的導播台中。 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @return 返回新添加組件的唯一識別碼(ComponentId) * @throws Exception 如果在請求過程中發生錯誤,則拋出異常 */ private String addCasterComponent(Client client, String casterId) throws Exception { // 構造組件Layer參數:設定組件在螢幕上的尺寸和位置 JSONObject componentLayer = new JSONObject(); componentLayer.put("HeightNormalized", 0.2); componentLayer.put("WidthNormalized", 0.2); JSONArray positionNormalized = new JSONArray(); positionNormalized.add("0.3"); positionNormalized.add("0.3"); componentLayer.put("PositionNormalized", positionNormalized); componentLayer.put("PositionRefer", "topLeft"); // 構造文字圖層內容:設定文字、顏色、字型等屬性 JSONObject textLayerContent = new JSONObject(); // 組件TextLayerContent textLayerContent.put("Text", "hello world!"); textLayerContent.put("Color", 0xff0000); textLayerContent.put("FontName", "KaiTi"); textLayerContent.put("SizeNormalized", 0.3F); textLayerContent.put("BorderWidthNormalized", 0.3F); textLayerContent.put("BorderColor", 0xff0000); // 構造添加組件請求對象,並設定相關參數 AddCasterComponentRequest addCasterComponentRequest = new AddCasterComponentRequest(); // 設定組件元素屬性 addCasterComponentRequest.setCasterId(casterId); // 用於指定組件位置,每個位置至多設定一個組件,格式需符合“RC01~RC99” addCasterComponentRequest.setLocationId("RC01"); // 組件名稱 addCasterComponentRequest.setComponentName("testComponentName"); // 組件類型。取值:text:文字組件,必須同時佈建要求參數TextLayerContent;image:圖片組件,必須同時佈建要求參數ImageLayerContent,caption:翻譯跑馬燈元件,必須同時佈建要求參數CaptionLayerContent。 addCasterComponentRequest.setComponentType("text"); addCasterComponentRequest.setTextLayerContent(textLayerContent.toJSONString()); // 組件顯示的特效 。取值:none:(預設值)無;animateH:水平滾動;animateV:垂直滾動。 addCasterComponentRequest.setEffect("animateH"); // 組件Layer的尺寸 addCasterComponentRequest.setComponentLayer(componentLayer.toJSONString()); // 發送請求並擷取響應結果 AddCasterComponentResponse addCasterComponentResponse = client.addCasterComponent(addCasterComponentRequest); System.out.println("添加組件,傳回值:" + JSON.toJSONString(addCasterComponentResponse)); // 返回新增組件的ID return addCasterComponentResponse.getBody().getComponentId(); } /** * 查詢導播台組件列表 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,用於指定要查詢的導播台 * @param componentId 組件ID,用於指定要查詢的具體組件 * @return DescribeCasterComponentsResponse 組件列表響應對象 * @throws Exception 當API請求或處理過程中發生錯誤時拋出異常 */ private DescribeCasterComponentsResponse describeCasterComponents(Client client, String casterId, String componentId) throws Exception { // 構造查詢導播台組件列表的請求對象 DescribeCasterComponentsRequest describeCasterComponentsRequest = new DescribeCasterComponentsRequest(); describeCasterComponentsRequest.setCasterId(casterId); describeCasterComponentsRequest.setComponentId(componentId); DescribeCasterComponentsResponse describeCasterComponentsResponse = client.describeCasterComponents(describeCasterComponentsRequest); System.out.println("查詢組件列表,傳回值:" + JSON.toJSONString(describeCasterComponentsResponse)); return describeCasterComponentsResponse; } /** * 更新導播台組件 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param componentId 組件ID * @throws Exception 當API請求或處理過程中發生錯誤時拋出異常 */ private void modifyCasterComponent(Client client, String casterId, String componentId) throws Exception { JSONObject componentLayer = new JSONObject(); componentLayer.put("HeightNormalized", 0.6); componentLayer.put("WidthNormalized", 0.6); JSONArray positionNormalized = new JSONArray(); positionNormalized.add("0.3"); positionNormalized.add("0.3"); componentLayer.put("PositionNormalized", positionNormalized); componentLayer.put("PositionRefer", "topLeft"); JSONObject textLayerContent = new JSONObject();// 組件TextLayerContent textLayerContent.put("Text", "hello world!"); textLayerContent.put("Color", 0xff0000); textLayerContent.put("FontName", "KaiTi"); textLayerContent.put("SizeNormalized", 0.3F); textLayerContent.put("BorderWidthNormalized", 0.3F); textLayerContent.put("BorderColor", 0xff0000); ModifyCasterComponentRequest modifyCasterComponentRequest = new ModifyCasterComponentRequest(); // 設定組件元素屬性 modifyCasterComponentRequest.setCasterId(casterId); modifyCasterComponentRequest.setComponentId(componentId); modifyCasterComponentRequest.setComponentName("newComponentName"); modifyCasterComponentRequest.setComponentType("text"); modifyCasterComponentRequest.setTextLayerContent(textLayerContent.toJSONString()); modifyCasterComponentRequest.setEffect("none"); // 無特效 modifyCasterComponentRequest.setComponentLayer(componentLayer.toJSONString()); ModifyCasterComponentResponse modifyCasterComponentResponse = client.modifyCasterComponent(modifyCasterComponentRequest); System.out.println("修改組件,傳回值:" + JSON.toJSONString(modifyCasterComponentResponse)); } /** * 刪除caster組件 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param componentId 組件ID * @throws Exception 刪除操作過程中可能拋出的異常 */ private void deleteCasterComponent(Client client, String casterId, String componentId) throws Exception { // 構造刪除群組件請求對象並設定參數 DeleteCasterComponentRequest deleteCasterComponentRequest = new DeleteCasterComponentRequest(); deleteCasterComponentRequest.setCasterId(casterId); deleteCasterComponentRequest.setComponentId(componentId); // 調用用戶端介面執行刪除操作 DeleteCasterComponentResponse deleteCasterComponentResponse = client.deleteCasterComponent(deleteCasterComponentRequest); // 輸出刪除結果 System.out.println("刪除群組件,傳回值:" + JSON.toJSONString(deleteCasterComponentResponse)); }編輯布局
步驟說明
配置用於導播輸出的畫面布局,使用者可自訂畫面及位置,目前支援最多四個畫面。
相關介面
範例程式碼
/** * 添加導播檯布局 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,用於標識要操作的導播台 * @return 返回新建立的布局ID * @throws Exception 當API調用失敗或其他異常情況時拋出 */ private String addCasterLayout(Client client, String casterId) throws Exception { // 建立添加導播檯布局請求對象並設定基本參數 AddCasterLayoutRequest addCasterLayoutRequest = new AddCasterLayoutRequest(); addCasterLayoutRequest.setCasterId(casterId); addCasterLayoutRequest.setBlendList(Arrays.asList("RV01")); addCasterLayoutRequest.setMixList(Arrays.asList("RV01")); // 配置視頻圖層參數 List<AddCasterLayoutRequest.AddCasterLayoutRequestVideoLayer> videoLayers = new ArrayList<>(); AddCasterLayoutRequest.AddCasterLayoutRequestVideoLayer videoLayer = new AddCasterLayoutRequest.AddCasterLayoutRequestVideoLayer(); videoLayer.setFillMode("fit"); videoLayer.setHeightNormalized(0.5F); videoLayer.setWidthNormalized(0.5F); videoLayer.setPositionRefer("topLeft"); videoLayer.setPositionNormalized(Arrays.asList(0.1F, 0.1F)); videoLayer.setFixedDelayDuration(0); videoLayers.add(videoLayer); addCasterLayoutRequest.setVideoLayer(videoLayers); // 配置音頻圖層參數 List<AddCasterLayoutRequest.AddCasterLayoutRequestAudioLayer> audioLayers = new ArrayList<>(); AddCasterLayoutRequest.AddCasterLayoutRequestAudioLayer audioLayer = new AddCasterLayoutRequest.AddCasterLayoutRequestAudioLayer(); audioLayer.setVolumeRate(1.0F); audioLayer.setValidChannel("all"); audioLayer.setFixedDelayDuration(0); audioLayers.add(audioLayer); addCasterLayoutRequest.setAudioLayer(audioLayers); // 調用API執行添加導播檯布局操作 AddCasterLayoutResponse addCasterLayoutResponse = client.addCasterLayout(addCasterLayoutRequest); System.out.println("添加導播檯布局:response:" + JSON.toJSONString(addCasterLayoutResponse)); return addCasterLayoutResponse.getBody().getLayoutId(); } /** * 查詢導播檯布局列表 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param layoutId 布局ID * @return DescribeCasterLayoutsResponse 布局列表響應對象 * @throws Exception API調用異常 */ private DescribeCasterLayoutsResponse describeCasterLayouts(Client client, String casterId, String layoutId) throws Exception { // 構造查詢布局列表請求參數 DescribeCasterLayoutsRequest describeCasterLayoutsRequest = new DescribeCasterLayoutsRequest(); describeCasterLayoutsRequest.setCasterId(casterId); describeCasterLayoutsRequest.setLayoutId(layoutId); // 調用用戶端API查詢布局列表 DescribeCasterLayoutsResponse describeCasterLayoutsResponse = client.describeCasterLayouts(describeCasterLayoutsRequest); System.out.println("查詢布局列表,傳回值:" + JSON.toJSONString(describeCasterLayoutsResponse)); return describeCasterLayoutsResponse; } /** * 修改導播檯布局 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,標識要修改的導播台 * @param layoutId 布局ID,標識要應用的布局模板 * @throws Exception 當API調用失敗或參數異常時拋出 */ private void modifyCasterLayout(Client client, String casterId, String layoutId) throws Exception { ModifyCasterLayoutRequest modifyCasterLayoutRequest = new ModifyCasterLayoutRequest(); modifyCasterLayoutRequest.setCasterId(casterId); modifyCasterLayoutRequest.setLayoutId(layoutId); modifyCasterLayoutRequest.setBlendList(Arrays.asList("RV02")); modifyCasterLayoutRequest.setMixList(Arrays.asList("RV02")); // 配置視頻圖層參數 List<ModifyCasterLayoutRequest.ModifyCasterLayoutRequestVideoLayer> videoLayers = new ArrayList<>(); ModifyCasterLayoutRequest.ModifyCasterLayoutRequestVideoLayer videoLayer = new ModifyCasterLayoutRequest.ModifyCasterLayoutRequestVideoLayer(); videoLayer.setFillMode("fit"); videoLayer.setHeightNormalized(1.0F); videoLayer.setWidthNormalized(1.0F); videoLayer.setPositionRefer("topLeft"); videoLayer.setPositionNormalized(Arrays.asList(0.1F, 0.1F)); videoLayer.setFixedDelayDuration(0); videoLayers.add(videoLayer); modifyCasterLayoutRequest.setVideoLayer(videoLayers); // 配置音頻圖層參數 List<ModifyCasterLayoutRequest.ModifyCasterLayoutRequestAudioLayer> audioLayers = new ArrayList<>(); ModifyCasterLayoutRequest.ModifyCasterLayoutRequestAudioLayer audioLayer = new ModifyCasterLayoutRequest.ModifyCasterLayoutRequestAudioLayer(); audioLayer.setVolumeRate(1.0F); audioLayer.setValidChannel("all"); audioLayer.setFixedDelayDuration(0); audioLayers.add(audioLayer); modifyCasterLayoutRequest.setAudioLayer(audioLayers); // 調用API修改導播檯布局並輸出響應結果 ModifyCasterLayoutResponse modifyCasterLayoutResponse = client.modifyCasterLayout(modifyCasterLayoutRequest); System.out.println("修改導播檯布局:response:" + JSON.toJSONString(modifyCasterLayoutResponse)); } /** * 刪除導播檯布局 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,指定要操作的導播台 * @param layoutId 布局ID,指定要刪除的布局 * @throws Exception 當刪除操作失敗時拋出異常 */ private void deleteCasterLayout(Client client, String casterId, String layoutId) throws Exception { // 構造刪除導播檯布局請求參數 DeleteCasterLayoutRequest deleteCasterLayoutRequest = new DeleteCasterLayoutRequest(); deleteCasterLayoutRequest.setCasterId(casterId); deleteCasterLayoutRequest.setLayoutId(layoutId); // 調用用戶端介面執行刪除操作並輸出響應結果 DeleteCasterLayoutResponse deleteCasterLayoutResponse = client.deleteCasterLayout(deleteCasterLayoutRequest); System.out.println("刪除導播檯布局:response:" + JSON.toJSONString(deleteCasterLayoutResponse)); }啟動導播台
範例程式碼
導播台建立並配置完畢後,即可啟動導播台,啟動底層音視頻處理任務。
前提條件
完成導播台配置,包括網域名稱、導播台輸出解析度等。
相關介面
說明介面啟動成功後返回PVW及PGM情境資訊列表,包括情境ID及流資訊等,後續操作指定情境時指定情境ID即可。
範例程式碼
/** * 啟動導播台 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,指定要啟動的導播台標識 * @return StartCasterResponse 啟動導播台的響應結果 * @throws Exception 啟動過程中可能拋出的異常 */ private StartCasterResponse startCaster(Client client, String casterId) throws Exception { // 構造啟動導播台請求參數 StartCasterRequest startCasterRequest = new StartCasterRequest(); startCasterRequest.setCasterId(casterId); StartCasterResponse startCasterResponse = client.startCaster(startCasterRequest); System.out.println("開啟導播台成功"); return startCasterResponse; }更新情境
步驟說明
導播台啟動成功後,可將已配置好的布局(組件)生效至指定情境。
前提條件
完成指定布局(組件)的編輯
指定情境存在並啟動
相關介面
UpdateCasterSceneConfig - 更新導播情境配置
範例程式碼
/** * 更新導播台情境配置 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param sceneId 情境ID * @param layoutId 布局ID * @param componentIds 組件ID列表 * @throws Exception 當介面調用失敗時拋出異常 */ private void updateCasterSceneConfig(Client client, String casterId, String sceneId, String layoutId, List<String> componentIds) throws Exception { // 構造更新導播台情境配置請求對象 UpdateCasterSceneConfigRequest updateCasterSceneConfigRequest = new UpdateCasterSceneConfigRequest(); updateCasterSceneConfigRequest.setCasterId(casterId); updateCasterSceneConfigRequest.setSceneId(sceneId); updateCasterSceneConfigRequest.setComponentId(componentIds); updateCasterSceneConfigRequest.setLayoutId(layoutId); // 調用用戶端介面更新導播台情境配置 UpdateCasterSceneConfigResponse updateCasterSceneConfigResponse = client.updateCasterSceneConfig(updateCasterSceneConfigRequest); System.out.println("更新導播台情境配置:response:" + JSON.toJSONString(updateCasterSceneConfigResponse)); }預監(PVW)切換到節目(PGM)
步驟說明
導播台啟動成功後,可將PVW的布局配置資訊設定到PGM情境。
前提條件
PVW情境存在並啟動
PGM情境存在並啟動
相關介面
CopyCasterSceneConfig - 複製導播台情境配置
範例程式碼
/** * 複製導播台情境配置 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param fromSceneID 源情境ID * @param toSceneID 目標情境ID * @throws Exception 當複製操作失敗時拋出異常 */ private void copyCasterSceneConfig(Client client, String casterId, String fromSceneID, String toSceneID) throws Exception { // 構造複製導播台情境配置請求對象 CopyCasterSceneConfigRequest copyCasterSceneConfigRequest = new CopyCasterSceneConfigRequest(); copyCasterSceneConfigRequest.setCasterId(casterId); copyCasterSceneConfigRequest.setFromSceneId(fromSceneID); copyCasterSceneConfigRequest.setToSceneId(toSceneID); // 調用用戶端介面執行複製操作並輸出結果 CopyCasterSceneConfigResponse copyCasterSceneConfigResponse = client.copyCasterSceneConfig(copyCasterSceneConfigRequest); System.out.println("複製導播台情境配置:response:" + JSON.toJSONString(copyCasterSceneConfigResponse)); }預監開啟、關閉
步驟說明
導播台啟動成功後,可通過預監開啟、關閉服務控制PVW情境,關閉PVW情境後布局及視頻源變動可直接生效至PGM情境。
前提條件
PVW情境存在。
相關介面
範例程式碼
/** * 預監開啟 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param pvwSceneId 情境ID * @throws Exception 當介面調用失敗時拋出異常 */ private void startCasterScene(Client client, String casterId, String pvwSceneId) throws Exception { // 構造啟動導播台情境請求參數 StartCasterSceneRequest startCasterSceneRequest = new StartCasterSceneRequest(); startCasterSceneRequest.setCasterId(casterId); startCasterSceneRequest.setSceneId(pvwSceneId); // 調用介面啟動導播台情境 StartCasterSceneResponse startCasterSceneResponse = client.startCasterScene(startCasterSceneRequest); System.out.println("預監開啟PVW情境:response:" + JSON.toJSONString(startCasterSceneResponse)); } /** * 預監關閉 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param pvwSceneId 情境ID * @throws Exception 當介面調用失敗時拋出異常 */ private void stopCasterScene(Client client, String casterId, String pvwSceneId) throws Exception { // 構造停止導播情境請求參數 StopCasterSceneRequest stopCasterSceneRequest = new StopCasterSceneRequest(); stopCasterSceneRequest.setCasterId(casterId); stopCasterSceneRequest.setSceneId(pvwSceneId); // 調用用戶端介面停止導播情境 StopCasterSceneResponse stopCasterSceneResponse = client.stopCasterScene(stopCasterSceneRequest); // 輸出預監關閉PVW情境的響應結果 System.out.println("預監關閉PVW情境:response:" + JSON.toJSONString(stopCasterSceneResponse)); }備播切換、切回
步驟說明
導播台啟動成功後,可通過備播切換服務將PGM情境切換至備播畫面,若需要切回直播情境可通過回切直播服務完成。
前提條件
導播台執行個體已啟動
完成備播素材ID配置
相關介面
範例程式碼
/** * 執行導播台緊急效果切換操作,將PGM情境切換至備播畫面 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param pgmSceneId PGM情境ID * @throws Exception 當介面調用或執行過程中發生異常時拋出 */ private void effectCasterUrgent(Client client, String casterId, String pgmSceneId) throws Exception { // 構造緊急效果切換請求對象 EffectCasterUrgentRequest effectCasterUrgentRequest = new EffectCasterUrgentRequest(); effectCasterUrgentRequest.setCasterId(casterId); effectCasterUrgentRequest.setSceneId(pgmSceneId); // 調用用戶端介面執行緊急效果切換 EffectCasterUrgentResponse effectCasterUrgentResponse = client.effectCasterUrgent(effectCasterUrgentRequest); // 輸出切換結果日誌 System.out.println("將PGM情境切換至備播畫面,response:" + JSON.toJSONString(effectCasterUrgentResponse)); } /** * 設定導播台情境配置,切回直播 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID * @param pgmSceneId PGM情境ID * @param layoutId 布局ID * @throws Exception 當API調用失敗時拋出異常 */ private void setCasterSceneConfig(Client client, String casterId, String pgmSceneId, String layoutId) throws Exception { // 構造設定導播台情境配置請求對象 SetCasterSceneConfigRequest setCasterSceneConfigRequest = new SetCasterSceneConfigRequest(); setCasterSceneConfigRequest.setCasterId(casterId); setCasterSceneConfigRequest.setSceneId(pgmSceneId); setCasterSceneConfigRequest.setLayoutId(layoutId); // 若需要退出備播播放傳null,若需要轉到指定布局輸入layoutId即可 // 調用用戶端API設定導播台情境配置 SetCasterSceneConfigResponse setCasterSceneConfigResponse = client.setCasterSceneConfig(setCasterSceneConfigRequest); // 輸出響應結果 System.out.println("將備播畫面切換至直播畫面,response:" + JSON.toJSONString(setCasterSceneConfigResponse)); }停止導播台
步驟說明
導播台啟動成功後,可通過停止導播台服務停止指定導播台及底層音視頻任務。
前提條件
導播台執行個體已啟動。
相關介面
範例程式碼
/** * 停止指定的導播台 * * @param client 阿里雲ApsaraVideo for Live用戶端執行個體 * @param casterId 導播台ID,指定要停止的導播台 * @throws Exception 當停止導播台操作失敗時拋出異常 */ private void stopCaster(Client client, String casterId) throws Exception { StopCasterRequest request = new StopCasterRequest(); request.setCasterId(casterId); StopCasterResponse response = client.stopCaster(request); System.out.println("停止導播台,response:" + JSON.toJSONString(response)); }