本文介绍了使用导播API服务的操作步骤及说明。
特别说明
请您区分导播服务与云导播台,导播服务仅提供API服务,您需要自行开发完成前端页面与交互部分,本文适用于导播服务。
云导播台用户请忽略该文档,视频直播控制台提供了导播台产品,可直接使用前端页面进行导播操作。具体操作请参见云导播快速入门。
阅读对象
具备Java或者PHP开发能力,具体请参见Java SDK使用说明。
了解导播产品的基本功能
了解视频直播的基本功能
前提条件
导播操作步骤
配置导播台
步骤说明
导播台实例创建完成后,根据使用需求完成导播台名称、域名、转码、录制、延播、备播素材等配置。
接口说明
名称
描述
SetCasterConfig
设置导播台配置信息
domainName
将客户提供的域名绑定至导播台实例
casterTemplate
配置导播台输出分辨率
liveTemplate
配置导播台直播转码参数
recordConfig
配置导播台直播录制参数
示例代码
AddCasterVideoResourceRequest addCasterVideoResourceRequest = new AddCasterVideoResourceRequest(); addCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterVideoResourceRequest.setResourceName("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterVideoResourceRequest.setLocationId("RV01" ); // RV01~RV06为视频源在预监窗口的位置ID,不可重复,布局通过该ID引用视频源 addCasterVideoResourceRequest.setLiveStreamUrl( null); // 采用点播素材时不输入 addCasterVideoResourceRequest.setMaterialId("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterVideoResourceRequest.setRepeatNum( -1); // 视频播放完毕后循环播放 AddCasterVideoResourceResponse response = client.getAcsResponse(addCasterVideoResourceRequest); // 修改视频源(AddCasterVideo) ModifyCasterVideoResourceRequest modifyCasterVideoResourceRequest = new ModifyCasterVideoResourceRequest(); modifyCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterVideoResourceRequest.setResourceId("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterVideoResourceRequest.setLiveStreamUrl(“rtmp://192.168.1.1“); modifyCasterVideoResourceRequest.setResourceName("LIVEPRODUCER_POST-cn-0pp123h****"); ModifyCasterVideoResourceResponse response = client.getAcsResponse(modifyCasterVideoResourceRequest); // 查询视频源列表(DescribeCasterVideo) DescribeCasterVideoResourcesRequest describeCasterVideoResourcesRequest = new DescribeCasterVideoResourcesRequest(); describeCasterVideoResourcesRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); DescribeCasterVideoResourcesResponse response = client.getAcsResponse(describeCasterVideoResourcesRequest); // 删除视频源列表(DescribeCasterVideo) DeleteCasterVideoResourceRequest deleteCasterVideoResourceRequest = new DeleteCasterVideoResourceRequest(); deleteCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); deleteCasterVideoResourceRequest.setResourceId("LIVEPRODUCER_POST-cn-0pp123h****"); DeleteCasterVideoResourceResponse response = client.getAcsResponse(deleteCasterVideoResourceRequest);
编辑视频源
步骤说明
配置用于输出的视频源信息,目前支持直播流及点播素材两种类型。
接口说明
名称
描述
AddCasterVideo
新增视频源
ModifyCasterVideoResource
修改视频源
DescribeCasterVideoResources
查询视频源列表
DeleteCasterVideoResource
删除视频源
liveStreamUrl
视频源类型为直播流时需提供直播流地址
materialId
视频源类型为点播素材时需提供点播素材ID,以及循环播放次数(repeatNum)
locationId
配置视频源名称及视频源位置,作为布局画面的引用编号
示例代码
// 新增视频源(AddCasterVideo) AddCasterVideoResourceRequest addCasterVideoResourceRequest = new AddCasterVideoResourceRequest(); addCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterVideoResourceRequest.setResourceName("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterVideoResourceRequest.setLocationId("RV01" ); // RV01~RV06为视频源在预监窗口的位置ID,不可重复,布局通过该ID引用视频源 addCasterVideoResourceRequest.setLiveStreamUrl( null); // 采用点播素材时不输入 addCasterVideoResourceRequest.setMaterialId("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterVideoResourceRequest.setRepeatNum( -1); // 视频播放完毕后循环播放 AddCasterVideoResourceResponse response = client.getAcsResponse(addCasterVideoResourceRequest); // 修改视频源(AddCasterVideo) ModifyCasterVideoResourceRequest modifyCasterVideoResourceRequest = new ModifyCasterVideoResourceRequest(); modifyCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterVideoResourceRequest.setResourceId("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterVideoResourceRequest.setLiveStreamUrl(“rtmp://192.168.1.1“); modifyCasterVideoResourceRequest.setResourceName("LIVEPRODUCER_POST-cn-0pp123h****"); ModifyCasterVideoResourceResponse response = client.getAcsResponse(modifyCasterVideoResourceRequest); // 查询视频源列表(DescribeCasterVideo) DescribeCasterVideoResourcesRequest describeCasterVideoResourcesRequest = new DescribeCasterVideoResourcesRequest(); describeCasterVideoResourcesRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); DescribeCasterVideoResourcesResponse response = client.getAcsResponse(describeCasterVideoResourcesRequest); // 删除视频源列表(DescribeCasterVideo) DeleteCasterVideoResourceRequest deleteCasterVideoResourceRequest = new DeleteCasterVideoResourceRequest(); deleteCasterVideoResourceRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); deleteCasterVideoResourceRequest.setResourceId("LIVEPRODUCER_POST-cn-0pp123h****"); DeleteCasterVideoResourceResponse response = client.getAcsResponse(deleteCasterVideoResourceRequest);
编辑组件
步骤说明
配置用于输出的组件信息,目前支持文字及图片两种类型。
接口说明
名称
描述
AddCasterComponent
新增组件
ModifyCasterComponent
修改组件
DescribeCasterComponents
查询组件列表
DeleteCasterComponent
删除组件
说明配置组件内容:
文字组件需提供文字内容、字体比例、颜色等。
图片组件需提供图片素材ID。
示例代码
// 新增组件(AddCasterComponent) 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", text); textLayerContent.put("Color", 0xff0000); textLayerContent.put("FontName", "KaiTi"); textLayerContent.put("SizeNormalized", 0.3F); textLayerContent.put("BorderWidthNormalized", 0.3F); textLayerContent.put("BorderColor", 0xff0000); AddCasterComponentRequest addCasterComponntRequest = new AddCasterComponentRequest(); // 设置组件元素属性 addCasterComponntRequest.setCasterId(casterId); addCasterComponntRequest.setLocationId(locationId); addCasterComponntRequest.setComponentName(componentName); addCasterComponntRequest.setComponentType("text"); addCasterComponntRequest.setEffect(effect); addCasterComponntRequest.setComponentLayer(componentLayer.toJSONString()); addCasterComponntRequest.setTextLayerContent(textLayerContent.toJSONString()); AddCasterComponentResponse response = client.getAcsResponse(addCasterComponntRequest); // 修改组件(ModifyCasterComponent) 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", text); 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("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterComponentRequest.setComponentId("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterComponentRequest.setComponentName("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterComponentRequest.setComponentType("text"); // 文本类型 modifyCasterComponentRequest.setEffect("none"); // 无特效 modifyCasterComponentRequest.setComponentLayer(componentLayer.toJSONString()); modifyCasterComponentRequest.setTextLayerContent(textLayerContent.toJSONString()); ModifyCasterComponentResponse response = client.getAcsResponse(modifyCasterComponentRequest); // 查询组件列表(DescribeCasterComponents) DescribeCasterComponentsRequest describeCasterComponentsRequest= new DescribeCasterComponentsRequest(); describeCasterComponentsRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); DescribeCasterComponentsResponse response = iAcsClient.getAcsResponse(describeCasterComponentsRequest); // 删除组件列表(DescribeCasterComponent) DeleteCasterComponentRequest deleteCasterComponentRequest = new DeleteCasterComponentRequest(); deleteCasterComponentRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); deleteCasterComponentRequest.setComponentId("LIVEPRODUCER_POST-cn-0pp123h****"); DeleteCasterComponentResponse response = client.getAcsResponse(deleteCasterComponentRequest);
编辑布局
步骤说明
配置用于导播输出的画面布局,用户可自定义画面及位置,目前支持最多四个画面。
接口说明
名称
描述
AddCasterLayout
新增布局
ModifyCasterLayout
修改布局
DescribeCasterLayouts
查询布局列表
DeleteCasterLayout
删除视频源
videoLayer
配置布局样式信息列表
audioLayer
配置音频信息列表
blendList
配置视频源位置列表
mixList
音频位置列表
示例代码
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 imageLayerContent = new JSONObject(); // 组件ImageLayerContent imageLayerContent.put("MaterialId", "materailId"); AddCasterComponentRequest addCasterComponntRequest = new AddCasterComponentRequest(); // 设置组件元素属性 addCasterComponntRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterComponntRequest.setLocationId("RC01"); // 与组件关联的LocationId addCasterComponntRequest.setComponentName("LIVEPRODUCER_POST-cn-0pp123h****"); addCasterComponntRequest.setComponentType("image"); // 图片类型 addCasterComponntRequest.setEffect("none"); // 无特效 addCasterComponntRequest.setComponentLayer(componentLayer.toJSONString()); addCasterComponntRequest.setImageLayerContent(imageLayerContent.toJSONString()); AddCasterComponentResponse response = client.getAcsResponse(addCasterComponntRequest); // 修改布局(ModifyCasterLayout) ModifyCasterLayoutRequest modifyCasterLayoutRequest = new ModifyCasterLayoutRequest(); modifyCasterLayoutRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); modifyCasterLayoutRequest.setLayoutId("LIVEPRODUCER_POST-cn-0pp123h****"); List videoLayersList = new ArrayList(); // 视频layer ModifyCasterLayoutRequest.VideoLayer videoLayer1 = new ModifyCasterLayoutRequest.VideoLayer(); videoLayer1.setHeightNormalized(0.5F); videoLayer1.setWidthNormalized(0.5F); videoLayer1.setPositionRefer("topLeft"); videoLayer1.setPositionNormalizeds(Arrays.asList(new Float[]{0F, 0F})); videoLayersList.add(videoLayer1); ModifyCasterLayoutRequest.VideoLayer videoLayer2 = new ModifyCasterLayoutRequest.VideoLayer(); videoLayer2.setHeightNormalized(0.5F); videoLayer2.setWidthNormalized(0.5F); videoLayer2.setPositionRefer("topLeft"); videoLayer2.setPositionNormalizeds(Arrays.asList(new Float[]{0.5F, 0F})); videoLayersList.add(videoLayer2); ModifyCasterLayoutRequest.VideoLayer videoLayer3 = new ModifyCasterLayoutRequest.VideoLayer(); videoLayer3.setHeightNormalized(0.5F); videoLayer3.setWidthNormalized(0.5F); videoLayer3.setPositionRefer("topLeft"); videoLayer3.setPositionNormalizeds(Arrays.asList(new Float[]{0.2F, 0.5F})); videoLayersList.add(videoLayer3); modifyCasterLayoutRequest.setVideoLayers(videoLayersList); List audioLayerList = new ArrayList(); ModifyCasterLayoutRequest.AudioLayer audioLayer1 = new ModifyCasterLayoutRequest.AudioLayer(); // 音频layer audioLayer1.setVolumeRate(1F); audioLayer1.setValidChannel("all"); audioLayerList.add(audioLayer1); ModifyCasterLayoutRequest.AudioLayer audioLayer2 = new ModifyCasterLayoutRequest.AudioLayer(); audioLayer2.setVolumeRate(1F); audioLayer2.setValidChannel("all"); audioLayerList.add(audioLayer2); ModifyCasterLayoutRequest.AudioLayer audioLayer3 = new ModifyCasterLayoutRequest.AudioLayer(); audioLayer3.setVolumeRate(1F); audioLayer3.setValidChannel("all"); audioLayerList.add(audioLayer3); modifyCasterLayoutRequest.setAudioLayers(audioLayerList); modifyCasterLayoutRequest.setBlendLists(Arrays.asList(new String[]{"RV01", "RV02", "RV03"})); modifyCasterLayoutRequest.setMixLists(Arrays.asList(new String[]{"RV01", "RV02", "RV03"})); ModifyCasterLayoutResponse response = client.getAcsResponse(modifyCasterLayoutRequest); // 查询布局列表(DescribeCasterLayout) DescribeCasterLayoutsRequest request = new DescribeCasterLayoutsRequest(); request.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); DescribeCasterLayoutsResponse response = client.getAcsResponse(request); // 删除布局(DescribeCasterLayout) DeleteCasterLayoutRequest deleteCasterLayoutRequest = new DeleteCasterLayoutRequest(); deleteCasterLayoutRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); deleteCasterLayoutRequest.setLayoutId("LIVEPRODUCER_POST-cn-0pp123h****"); DeleteCasterLayoutResponse response = client.getAcsResponse(deleteCasterLayoutRequest);
启动导播台
示例代码
导播台创建并配置完毕后,即可启动导播台,启动底层音视频处理任务。
前提条件
完成导播台配置,包括域名、导播台输出分辨率等。
接口说明
名称
描述
StartCaster
启动导播台
CasterID
指定需要启动的导播台实例ID
说明接口启动成功后返回PVW及PGM场景信息列表,包括场景ID及流信息等,后续操作指定场景时指定场景ID即可。
示例代码
StartCasterRequest request = new StartCasterRequest(); request.setCasterId("test"); StartCasterResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response));
更新场景
步骤说明
导播台启动成功后,可将已配置好的布局(组件)生效至指定场景。
前提条件
完成指定布局(组件)的编辑
指定场景存在并启动
接口说明
名称
描述
UpdateCasterSceneConfig
更新场景配置
DeleteCasterSceneConfig
删除场景配置
CasterID
指定导播台实例ID
SceneID
指定场景ID
示例代码
// 更新场景配置(UpdateCasterSceneConfig) UpdateCasterSceneConfigRequest updateCasterSceneConfigRequest = new UpdateCasterSceneConfigRequest(); updateCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); updateCasterSceneConfigRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); updateCasterSceneConfigRequest.setComponentIds(componentList); UpdateCasterSceneConfigResponse response = client.getAcsResponse(updateCasterSceneConfigRequest); // 删除场景配置(DeleteCasterSceneConfig) DeleteCasterSceneConfigRequest deleteCasterSceneConfigRequest = new DeleteCasterSceneConfigRequest(); deleteCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); deleteCasterSceneConfigRequest.setType("Component") // 清除场景中的组件配置 DeleteCasterSceneConfigResponse response = client.getAcsResponse(deleteCasterSceneConfigRequest);
预监(PVW)切换到节目(PGM)
步骤说明
导播台启动成功后,可将PVW的布局配置信息设置到PGM场景。
前提条件
PVW场景存在并启动
PGM场景存在并启动
接口说明
名称
描述
CopyCasterSceneConfig
更新场景配置
CasterID
指定导播台实例ID
FromSceneID
指定PVW场景ID
ToSceneID
指定PGM场景ID
示例代码
// 场景切换(CopyCasterSceneConfig) CopyCasterSceneConfigRequest copyCasterSceneConfigRequest = new CopyCasterSceneConfigRequest(); copyCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); copyCasterSceneConfigRequest.setFromSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); copyCasterSceneConfigRequest.setToSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); CopyCasterSceneConfigResponse response = client.getAcsResponse(copyCasterSceneConfigRequest);
预监开启、关闭
步骤说明
导播台启动成功后,可通过预监开启、关闭服务控制PVW场景,关闭PVW场景后布局及视频源变动可直接生效至PGM场景。
前提条件
PVW场景存在。
接口说明
名称
描述
StartCasterScene
预监开启
StopCasterScene
预监关闭
CasterID
指定导播台实例ID
SceneID
指定PVW场景ID
示例代码
// 预监开启(StartCasterScene) StartCasterSceneRequest startCasterSceneRequest = new StartCasterSceneRequest(); startCasterSceneRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); startCasterSceneRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); StartCasterSceneResponse response = client.getAcsResponse(startCasterSceneRequest); // 预监关闭(StopCasterScene) StopCasterSceneRequest stopCasterSceneRequest = new StopCasterSceneRequest(); stopCasterSceneRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); stopCasterSceneRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); StopCasterSceneResponse response = client.getAcsResponse(stopCasterSceneRequest);
备播切换、切回
步骤说明
导播台启动成功后,可通过备播切换服务将PGM场景切换至备播画面,若需要切回直播场景可通过回切直播服务完成。
前提条件
导播台实例已启动
完成备播素材ID配置
接口说明
名称
描述
EffectCasterUrgent
备播紧急生效
SetCasterSceneConfig
切回直播
CasterID
指定导播台实例ID
SceneID
指定PGM场景实例ID
示例代码
// 切换备播(StartCasterScene) EffectCasterUrgentRequest effectCasterUrgentRequest = new EffectCasterUrgentRequest(); effectCasterUrgentRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); effectCasterUrgentRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); EffectCasterUrgentResponse response = client.getAcsResponse(effectCasterUrgentRequest); // 切回直播(SetCasterSceneConfig) SetCasterSceneConfigRequest setCasterSceneConfigRequest = new SetCasterSceneConfigRequest(); setCasterSceneConfigRequest.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); setCasterSceneConfigRequest.setSceneId("LIVEPRODUCER_POST-cn-0pp123h****"); setCasterSceneConfigRequest.setLayoutId(null); // 若需要退出备播播放传null,若需要转到指定布局输入layoutId即可 SetCasterSceneConfigResponse response = client.getAcsResponse(setCasterSceneConfigRequest);
停止导播台
步骤说明
导播台启动成功后,可通过停止导播台服务停止指定导播台及底层音视频任务。
前提条件
导播台实例已启动。
接口说明
名称
描述
StopCaster
停止导播台
CasterID
指定导播台实例ID
示例代码
// 停止导播台(StopCaster) StopCasterRequest request = new StopCasterRequest(); request.setCasterId("LIVEPRODUCER_POST-cn-0pp123h****"); StopCasterResponse response = client.getAcsResponse(request);