先说背景:
项目中用到阿里云直播相关,通过阿里云提供接口判断流状态,验证部分代码比较绕,分享上来希望能帮助他人;
不说废话直接上干货:
// 签名算法版本,目前版本是1.0
private static final String SIGNATURE_VERSION = "1.0";
// 签名方式,目前支持 HMAC-SHA1
private static final String SIGNATURE_METHOD = "HMACSHA1";
// API 版本号为日期形式:YYYY-MM-DD。本版本对应为:2016-11-01
private static final String VERSION = "2016-11-01";
// 请求类型(GET/POST)
private static final String REQUEST_METHOD_TYPE = "GET";
// 返回值类型(JSON/XML)
private static final String RET_FORMAT_TYPE = "JSON";
// 参数之间分隔符
private static final Character SEPARATOR = '&';
private static final String HOST = "https://live.aliyuncs.com";
/**
* 查询推流地址是否在推流
* @return
*/
@Override
public Boolean steamIsOnline(String streamName) {
logger.info("oooo 查询推流地址是否在推流");
//构建请求参数
Map<String, Object> params = Maps.newConcurrentMap();
try {
//接口参数
params.put("Action", "DescribeLiveStreamsOnlineList");
params.put("DomainName", ApplicationConfig.ali_live_domain_name);
params.put("AppName", ApplicationConfig.ali_live_app_name);
//公共参数
buildPublicParams(params);
}catch (Exception e) {
logger.error("oooo 查询推流地址是否在推流, 参数构建出错", e);
}
//构建请求
String request = null;
try {
request = buildRequest(HOST, params, ApplicationConfig.alimedia_accessKeySecret);
} catch (UnsupportedEncodingException e) {
logger.error("oooo 查询推流地址是否在推流, 【UTF-8】编码方式不支持", e);
} catch (NoSuchAlgorithmException e