全部產品
Search
文件中心

ApsaraVideo Live:開發指南

更新時間:Aug 06, 2025

本文介紹了使用導播API服務的操作步驟及說明。

特別說明

  • 請您區分導播服務與雲導播台,導播服務僅提供API服務,您需要自行開發完成前端頁面與互動部分,本文適用於導播服務。

  • 雲導播台使用者請忽略該文檔,ApsaraVideo for Live控制台提供了導播台產品,可直接使用前端頁面進行導播操作。具體操作請參見雲導播快速入門

閱讀對象

  • 具備Java或者PHP開發能力,具體請參見Java SDK使用說明

  • 瞭解導播產品的準系統

  • 瞭解ApsaraVideo for Live的準系統

前提條件

導播操作步驟

  1. 配置導播台

    步驟說明

    導播台執行個體建立完成後,根據使用需求完成導播台名稱、網域名稱、轉碼、錄製、延播、備播素材等配置。

    相關介面

    SetCasterConfig - 設定導播台配置

    範例程式碼

    /**
         * 設定導播台配置
         *
         * @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));
        }
  2. 編輯視頻源

    步驟說明

    配置用於輸出的視頻源資訊,目前支援直播流及點播素材兩種類型。

    相關介面

    範例程式碼

    
        /**
         * 添加視頻源到指定的導播台
         *
         * @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));
        }
    
  3. 編輯組件

    步驟說明

    配置用於輸出的組件資訊,目前支援文字及圖片兩種類型。

    相關介面

    說明

    配置組件內容:

    • 文字組件需提供文字內容、字型比例、顏色等。

    • 圖片組件需提供圖片素材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));
        }
  4. 編輯布局

    步驟說明

    配置用於導播輸出的畫面布局,使用者可自訂畫面及位置,目前支援最多四個畫面。

    相關介面

    範例程式碼

     /**
         * 添加導播檯布局
         *
         * @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));
        }
    
  5. 啟動導播台

    範例程式碼

    導播台建立並配置完畢後,即可啟動導播台,啟動底層音視頻處理任務。

    前提條件

    完成導播台配置,包括網域名稱、導播台輸出解析度等。

    相關介面

    StartCaster - 啟動導播台

    說明

    介面啟動成功後返回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;
        }
  6. 更新情境

    步驟說明

    導播台啟動成功後,可將已配置好的布局(組件)生效至指定情境。

    前提條件

    • 完成指定布局(組件)的編輯

    • 指定情境存在並啟動

    相關介面

    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));
        }
    
  7. 預監(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));
        }
  8. 預監開啟、關閉

    步驟說明

    導播台啟動成功後,可通過預監開啟、關閉服務控制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));
        }
  9. 備播切換、切回

    步驟說明

    導播台啟動成功後,可通過備播切換服務將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));
        }
  10. 停止導播台

    步驟說明

    導播台啟動成功後,可通過停止導播台服務停止指定導播台及底層音視頻任務。

    前提條件

    導播台執行個體已啟動。

    相關介面

    StopCaster - 停止導播台

    範例程式碼

     /**
         * 停止指定的導播台
         *
         * @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));
        }