通过阅读本文,您可以查看合流代码的示例。
示例说明
本文以Java语言为例进行介绍,获取其他语言SDK,请参见视频直播SDK。
说明
我们认为您在阅读本文时已了解合流输出,布局等基本概念。如您暂不清楚相关信息,可参见云端合流概述。
SDK引入
使用Java SDK,详情请参见Java SDK使用说明。
创建合流任务(使用预设布局)
public void createDefault() throws ClientException {
CreateMixStreamRequest createMixStreamRequest = new CreateMixStreamRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
createMixStreamRequest.setDomainName("your domain name");
// 设置预设的layoutId,以"MixStreamLayout-2-1"为例
createMixStreamRequest.setLayoutId("MixStreamLayout-2-1");
// 设置输出配置
JSONObject outputConfig = new JSONObject();
outputConfig.put("AppName", "your app name"); // AppName
outputConfig.put("StreamName", "your stream name"); // StreamName
outputConfig.put("MixStreamTemplate", "lp_ld"); // 合流输出规格模板
String outputConfigStr = outputConfig.toJSONString();
createMixStreamRequest.setOutputConfig(outputConfigStr);
// 初始化输入流
JSONArray inputStreamList = new JSONArray();
// 构建输入流A
JSONObject inputStreamA = new JSONObject();
inputStreamA.put("LayoutChildId", 1); // 布局id,注意:一定要从1开始,并且所有id要连续
inputStreamA.put("ResourceType", "url"); // 资源类型: url 或 live
inputStreamA.put("ResourceValue", "your resource value"); // 资源地址
inputStreamList.add(inputStreamA);
// 构建输入流B(方法同A)
JSONObject inputStreamB = new JSONObject();
inputStreamB.put("LayoutChildId", 2);
inputStreamB.put("ResourceType", "url");
inputStreamB.put("ResourceValue", "your resource value");
inputStreamList.add(inputStreamB);
// 设置输入流
String inputStreamListStr = inputStreamList.toJSONString();
createMixStreamRequest.setInputStreamList(inputStreamListStr);
// 发起openapi请求
CreateMixStreamResponse createMixStreamResponse = client.getAcsResponse(createMixStreamRequest);
// 打印合流id
String mixStreamId = createMixStreamResponse.getMixStreamId();
System.out.println(mixStreamId);
}
创建合流任务(自定义布局)
public void createMixStream() throws ClientException {
CreateMixStreamRequest createMixStreamRequest = new CreateMixStreamRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
createMixStreamRequest.setDomainName("your domain name");
// 设置布局id,自定义布局填写"USERDEFINED"
createMixStreamRequest.setLayoutId("USERDEFINED");
// 设置输出配置
JSONObject outputConfig = new JSONObject();
outputConfig.put("AppName", "your app name"); // AppName
outputConfig.put("StreamName", "your stream name"); // StreamName
outputConfig.put("MixStreamTemplate", "lp_ld"); // 合流输出规格模板
String outputConfigStr = outputConfig.toJSONString();
createMixStreamRequest.setOutputConfig(outputConfigStr);
// 初始化输入流
JSONArray inputStreamList = new JSONArray();
// 构建输入流A
JSONObject inputStreamA = new JSONObject();
JSONObject layoutConfigA = new JSONObject(); // 自定义布局配置设置
Float[] fillPositionNormalizedA = new Float[]{0f, 0f}; // 位置坐标
Float[] fillSizeNormalizedA = new Float[]{1f, 1f}; // 大小归一化值
layoutConfigA.put("FillMode", "fit");
layoutConfigA.put("PositionRefer", "topLeft");
layoutConfigA.put("FillPositionNormalized", fillPositionNormalizedA);
layoutConfigA.put("FillSizeNormalized", fillSizeNormalizedA);
inputStreamA.put("LayoutChildId", 1); // 布局id,注意:一定要从1开始,并且所有id要连续
inputStreamA.put("ResourceType", "url"); // 资源类型: url 或 live
inputStreamA.put("ResourceValue", "your resource value"); // 资源地址
inputStreamA.put("LayoutConfig", layoutConfigA); // 设置自定义的布局配置
inputStreamList.add(inputStreamA);
// 构建输入流B(方法同A)
JSONObject inputStreamB = new JSONObject();
JSONObject layoutConfigB = new JSONObject();
Float[] fillPositionNormalizedB = new Float[]{0.7f, 0.03f};
Float[] fillSizeNormalizedB = new Float[]{0.25f, 0.25f};
layoutConfigB.put("FillMode", "fit");
layoutConfigB.put("PositionRefer", "topLeft");
layoutConfigB.put("FillPositionNormalized", fillPositionNormalizedB);
layoutConfigB.put("FillSizeNormalized", fillSizeNormalizedB);
inputStreamB.put("LayoutChildId", 2);
inputStreamB.put("ResourceType", "url");
inputStreamB.put("ResourceValue", "your resource value");
inputStreamB.put("LayoutConfig", layoutConfigB);
inputStreamList.add(inputStreamB);
// 设置输入流
String inputStreamListStr = inputStreamList.toJSONString();
createMixStreamRequest.setInputStreamList(inputStreamListStr);
// 发起openapi请求
CreateMixStreamResponse createMixStreamResponse = client.getAcsResponse(createMixStreamRequest);
// 打印合流id
String mixStreamId = createMixStreamResponse.getMixStreamId();
System.out.println(mixStreamId);
}
更新合流任务
public void updateMixStream() throws ClientException {
UpdateMixStreamRequest updateMixStreamRequest = new UpdateMixStreamRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
updateMixStreamRequest.setDomainName("your domain name");
// 设置布局id,自定义布局填写"USERDEFINED"
updateMixStreamRequest.setLayoutId("USERDEFINED");
// 设置要更新的合流id,即之前创建过的合流任务
updateMixStreamRequest.setMixStreamId("your mixstreamId");
// 初始化输入流
JSONArray inputStreamList = new JSONArray();
// 构建输入流A
JSONObject inputStreamA = new JSONObject();
JSONObject layoutConfigA = new JSONObject(); // 自定义布局配置设置
Float[] fillPositionNormalizedA = new Float[]{0f, 0f}; // 位置坐标
Float[] fillSizeNormalizedA = new Float[]{1f, 1f}; // 大小归一化值
layoutConfigA.put("FillMode", "fit");
layoutConfigA.put("PositionRefer", "topLeft");
layoutConfigA.put("FillPositionNormalized", fillPositionNormalizedA);
layoutConfigA.put("FillSizeNormalized", fillSizeNormalizedA);
inputStreamA.put("LayoutChildId", 1); // 布局id,注意:一定要从1开始,并且所有id要连续
inputStreamA.put("ResourceType", "url"); // 资源类型: url 或 live
inputStreamA.put("ResourceValue", "your resource value"); // 资源地址
inputStreamA.put("LayoutConfig", layoutConfigA); // 设置自定义的布局配置
inputStreamList.add(inputStreamA);
// 构建输入流B(方法同A)
JSONObject inputStreamB = new JSONObject();
JSONObject layoutConfigB = new JSONObject();
Float[] fillPositionNormalizedB = new Float[]{0.5f, 0.5f};
Float[] fillSizeNormalizedB = new Float[]{0.3f, 0.3f};
layoutConfigB.put("FillMode", "fit");
layoutConfigB.put("PositionRefer", "topLeft");
layoutConfigB.put("FillPositionNormalized", fillPositionNormalizedB);
layoutConfigB.put("FillSizeNormalized", fillSizeNormalizedB);
inputStreamB.put("LayoutChildId", 2);
inputStreamB.put("ResourceType", "url");
inputStreamB.put("ResourceValue", "your resource value");
inputStreamB.put("LayoutConfig", layoutConfigB);
inputStreamList.add(inputStreamB);
// 设置输入流
String inputStreamListStr = inputStreamList.toJSONString();
updateMixStreamRequest.setInputStreamList(inputStreamListStr);
// 发起openapi请求
UpdateMixStreamResponse updateMixStreamResponse = client.getAcsResponse(updateMixStreamRequest);
String mixStreamId = updateMixStreamResponse.getMixStreamId();
// 打印合流id
System.out.println(mixStreamId);
}
查询合流任务
public void describeMixStreamList() throws ClientException {
DescribeMixStreamListRequest describeMixStreamListRequest = new DescribeMixStreamListRequest();
// 设置拉流域名(直播播流域名,即用该域名观看合流后的内容)
describeMixStreamListRequest.setDomainName("your domain name");
// 设置appName
describeMixStreamListRequest.setAppName("your app name");
// 设置查询开始时间
describeMixStreamListRequest.setStartTime("2020-12-03T14:00:00Z");
// 设置查询结束时间
describeMixStreamListRequest.setEndTime("2020-12-05T14:00:00Z");
// 发起openapi请求
DescribeMixStreamListResponse describeMixStreamListResponse = client.getAcsResponse(describeMixStreamListRequest);
// 获取合流列表
List<MixStreamInfo> result = describeMixStreamListResponse.getMixStreamList();
// 打印合流id
if (result != null && !result.isEmpty()) {
for (MixStreamInfo mixStreamInfo : result) {
String mixStreamId = mixStreamInfo.getMixstreamId();
System.out.println(mixStreamId);
}
}
}
删除合流任务
public void deleteMixStream() throws ClientException {
DeleteMixStreamRequest deleteMixStreamRequest = new DeleteMixStreamRequest();
// 设置拉流域名(直播播流域名,此前用该域名观看合流后的内容)
deleteMixStreamRequest.setDomainName("your domain name");
// 设置appName
deleteMixStreamRequest.setAppName("your app name");
// 设置流名
deleteMixStreamRequest.setStreamName("your stream name");
// 设置要删除的合流id
deleteMixStreamRequest.setMixStreamId("your mixstreamId");
// 发起openapi请求
DeleteMixStreamResponse deleteMixStreamResponse = client.getAcsResponse(deleteMixStreamRequest);
String mixStreamId = deleteMixStreamResponse.getMixStreamId();
// 打印合流id
System.out.println(mixStreamId);
}
相关API
CreateMixStream(创建合流任务)
UpdateMixStream(更新合流任务)
DescribeMixStreamList(查询合流任务列表)
DeleteMixStream(删除合流任务)
文档内容是否对您有帮助?