本文介绍了使用导播API服务的操作步骤及说明。
特别说明
请您区分导播服务与云导播台,导播服务仅提供API服务,您需要自行开发完成前端页面与交互部分,本文适用于导播服务。
云导播台用户请忽略该文档,视频直播控制台提供了导播台产品,可直接使用前端页面进行导播操作。具体操作请参见云导播快速入门。
阅读对象
具备Java或者PHP开发能力,具体请参见Java SDK使用说明。
了解导播产品的基本功能
了解视频直播的基本功能
前提条件
导播操作步骤
配置导播台
步骤说明
导播台实例创建完成后,根据使用需求完成导播台名称、域名、转码、录制、延播、备播素材等配置。
相关接口
示例代码
/** * 设置导播台配置 * * @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)); }
编辑视频源
步骤说明
配置用于输出的视频源信息,目前支持直播流及点播素材两种类型。
相关接口
示例代码
/** * 添加视频源到指定的导播台 * * @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)); }
编辑组件
步骤说明
配置用于输出的组件信息,目前支持文字及图片两种类型。
相关接口
说明配置组件内容:
文字组件需提供文字内容、字体比例、颜色等。
图片组件需提供图片素材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)); }
编辑布局
步骤说明
配置用于导播输出的画面布局,用户可自定义画面及位置,目前支持最多四个画面。
相关接口
示例代码
/** * 添加导播台布局 * * @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)); }
启动导播台
示例代码
导播台创建并配置完毕后,即可启动导播台,启动底层音视频处理任务。
前提条件
完成导播台配置,包括域名、导播台输出分辨率等。
相关接口
说明接口启动成功后返回PVW及PGM场景信息列表,包括场景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; }
更新场景
步骤说明
导播台启动成功后,可将已配置好的布局(组件)生效至指定场景。
前提条件
完成指定布局(组件)的编辑
指定场景存在并启动
相关接口
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)); }
预监(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)); }
预监开启、关闭
步骤说明
导播台启动成功后,可通过预监开启、关闭服务控制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)); }
备播切换、切回
步骤说明
导播台启动成功后,可通过备播切换服务将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)); }
停止导播台
步骤说明
导播台启动成功后,可通过停止导播台服务停止指定导播台及底层音视频任务。
前提条件
导播台实例已启动。
相关接口
示例代码
/** * 停止指定的导播台 * * @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)); }