使用导播API开发和管理导播台

使用导播API开发和管理导播台

配置导播台

步骤说明

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

相关接口

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 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 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 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 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));

}

启动导播台

示例代码

导播台创建并配置完毕后,即可启动导播台,启动底层音视频处理任务。

前提条件

完成导播台配置,包括域名、导播台输出分辨率等。

相关接口

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 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场景存在。

相关接口

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));

}

相关推荐

无卡etc弊端太多了,拿走不谢!新手车友的无卡ETC真实测评 无卡ETC日益普及,众多新手车友纷纷选购。面对市场上琳琅满目的无卡ETC品牌,该如何选择适合新手的款式呢?以下是几款适合新手的无卡ETC推荐。 📣 ETCSP
跨地区使用UG软件:许可证处理实用指南,确保UG许可证合规使用
美国哪个州的缩写是mo?
beat365网页登录

美国哪个州的缩写是mo?

2025-10-28 👁️ 1568
那首曾让无数人为爱流泪的歌:一路向北背后的故事与情感
永远不掏耳朵,会发生什么?
365流水不够不能提现

永远不掏耳朵,会发生什么?

2025-10-17 👁️ 6031
中国历史上最大地震发生在哪
beat365网页登录

中国历史上最大地震发生在哪

2026-01-11 👁️ 8353