开发指南

本文介绍了使用导播API服务的操作步骤及说明。

特别说明

  • 请您区分导播服务与云导播台,导播服务仅提供API服务,您需要自行开发完成前端页面与交互部分,本文适用于导播服务。

  • 云导播台用户请忽略该文档,视频直播控制台提供了导播台产品,可直接使用前端页面进行导播操作。具体操作请参见云导播快速入门

阅读对象

  • 具备Java或者PHP开发能力,具体请参见Java SDK使用说明

  • 了解导播产品的基本功能

  • 了解视频直播的基本功能

前提条件

导播操作步骤

  1. 配置导播台

    步骤说明

    导播台实例创建完成后,根据使用需求完成导播台名称、域名、转码、录制、延播、备播素材等配置。

    相关接口

    SetCasterConfig - 设置导播台配置

    示例代码

    /**
         * 设置导播台配置
         *
         * @param client   阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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     阿里云视频直播客户端实例
         * @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     阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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      阿里云视频直播客户端实例
         * @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      阿里云视频直播客户端实例
         * @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      阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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 - 启动导播台

    说明

    接口启动成功后返回PVWPGM场景信息列表,包括场景ID及流信息等,后续操作指定场景时指定场景ID即可。

    示例代码

    /**
         * 启动导播台
         *
         * @param client   阿里云视频直播客户端实例
         * @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       阿里云视频直播客户端实例
         * @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      阿里云视频直播客户端实例
         * @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     阿里云视频直播客户端实例
         * @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     阿里云视频直播客户端实例
         * @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     阿里云视频直播客户端实例
         * @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     阿里云视频直播客户端实例
         * @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   阿里云视频直播客户端实例
         * @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));
        }