配置导播台
步骤说明
导播台实例创建完成后,根据使用需求完成导播台名称、域名、转码、录制、延播、备播素材等配置。
相关接口
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));
}编辑视频源
步骤说明
配置用于输出的视频源信息,目前支持直播流及点播素材两种类型。
相关接口
AddCasterVideoResource - 添加导播台视频资源
DescribeCasterVideoResources - 查询导播台视频源
ModifyCasterVideoResource - 修改导播台视频源
DeleteCasterVideoResource - 删除导播台视频资源
示例代码
/**
* 添加视频源到指定的导播台
*
* @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));
}
编辑组件
步骤说明
配置用于输出的组件信息,目前支持文字及图片两种类型。
相关接口
AddCasterComponent - 添加导播台组件
DescribeCasterComponents - 查询导播台组件列表
ModifyCasterComponent - 修改导播台组件
DeleteCasterComponent - 删除导播台组件
说明 配置组件内容:
文字组件需提供文字内容、字体比例、颜色等。
图片组件需提供图片素材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));
}编辑布局
步骤说明
配置用于导播输出的画面布局,用户可自定义画面及位置,目前支持最多四个画面。
相关接口
AddCasterLayout - 添加导播台布局
DescribeCasterLayouts - 查询导播台布局列表
ModifyCasterLayout - 修改导播台布局
DeleteCasterLayout - 删除导播台布局数据
示例代码
/**
* 添加导播台布局
*
* @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 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 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 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 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));
}
启动导播台
示例代码
导播台创建并配置完毕后,即可启动导播台,启动底层音视频处理任务。
前提条件
完成导播台配置,包括域名、导播台输出分辨率等。
相关接口
StartCaster - 启动导播台
说明 接口启动成功后返回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
// 构造更新导播台场景配置请求对象
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场景存在。
相关接口
StartCasterScene - 启动导播台场景
StopCasterScene - 停止导播台场景
示例代码
/**
* 预监开启
*
* @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配置
相关接口
EffectCasterUrgent - 切换导播台备播
SetCasterSceneConfig - 全量设置导播台场景配置
示例代码
/**
* 执行导播台紧急效果切换操作,将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));
}停止导播台
步骤说明
导播台启动成功后,可通过停止导播台服务停止指定导播台及底层音视频任务。
前提条件
导播台实例已启动。
相关接口
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));
}