阿里云视频直播推流,视频录制工具类
视频推流地址生成工具类AliPlayAndPushUtils.classpublic class AliPlayAndPushUtils {/*** 推流地址 rtmp://push.aliyunlive.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************为例,* UR...
·
视频推流地址生成工具类AliPlayAndPushUtils.class
public class AliPlayAndPushUtils {
/**
* 推流地址 rtmp://push.aliyunlive.com/app/stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************为例,
* URL:填写rtmp://push.aliyunlive.com/app/,
* 流名称:填写stream?auth_key=1543302081-0-0-9c6e7c8190c10bdfb3c0************
* appName
*/
private static final String appName = " ";
/**
* 鉴权key: 阿里云创建了推流域名和播流域名过后,他给生成的,每个域名一个,推流用推流的key,播流用播流的key,我这里只有一个key,因为我自己定义的一个,然后去阿里云里面把他们两个的权鉴备用key都设置成我设置的了
*/
private static final String key = " ";
/**
* @param time 十位数的时间戳
* @return 推流的地址
*/
public static String CreatePushUrl(String streamName, long time,String rand,String pushDomain) {
String strpush = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;
String pushUrl = "rtmp://" + pushDomain + "/" + appName + "/" + streamName + "?auth_key=" + time + "-"+rand+"-0-"+MD5Util.md5(strpush);
return pushUrl;
}
/**
* @param time 十位数的时间戳
// * @param rand 这是用来标识的 否则同一个时间戳 生成的地址总是相同的 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)
* @return 播放流的地址 默认是flv 也可以更改此代码
*/
public static String GetPlayUrl(String streamName, long time,String rand,String pullDomain) {
String strviewrtmp1 = null;
String strviewflv1 = null;
String strviewm3u81 = null;
String rtmpurl1 = null;
String flvurl1 = null;
String m3u8url1 = null;
strviewrtmp1 = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;
strviewflv1 = "/" + appName + "/" + streamName + ".flv-" + time + "-"+rand+"-0-" + key;
strviewm3u81 = "/" + appName + "/" + streamName + ".m3u8-" + time + "-"+rand+"-0-" + key;
rtmpurl1 = "rtmp://" + pullDomain + "/" + appName + "/" + streamName + "?auth_key=" + time + "-"+rand+"-0-" +MD5Util.md5(strviewrtmp1);
flvurl1 = "http://" + pullDomain + "/" + appName + "/" + streamName + ".flv?auth_key=" + time + "-"+rand+"-0-" + MD5Util.md5(strviewflv1);
m3u8url1 = "http://" + pullDomain + "/" + appName + "/" + streamName + ".m3u8?auth_key=" + time + "-"+rand+"-0-" + MD5Util.md5(strviewm3u81);
Map<String, String> resultMap = new HashMap<>(5);
resultMap.put("rtmp", rtmpurl1);
resultMap.put("flv", flvurl1);
resultMap.put("m3u8", m3u8url1);
return JSONObject.toJSONString(resultMap);
}
}
signature加密工具类AliSignatureUtils.calss
public class AliSignatureUtils {
private static Logger logger = LoggerFactory.getLogger(AliSignatureUtils.class);
public static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
public static final String ALGORITHM = "HmacSHA1";
public static final String ENCODING = "UTF-8";
public static final String FORMAT_JSON = "JSON";
public static final String FORMAT_XML = "XML";
public static final String AccessKeyId = "";
public static final String AccessKeySecret = "";
public static final String SignatureMethod = "HMAC-SHA1";
public static final String SignatureVersion = "1.0";
public static String getSignature(Map<String, String> parameters) {
String signature = "";
try {
// Map parameters = new HashMap();
// parameters.put("Format", Format);
// parameters.put("Version", VERSION);
// parameters.put("AccessKeyId", AccessKeyId);
// parameters.put("SignatureMethod", SignatureMethod);
// parameters.put("Timestamp", Timestamp);
// parameters.put("SignatureVersion", SignatureVersion);
// parameters.put("SignatureNonce", SignatureNonce);
//
// parameters.put("Action", OnlineUserNumAction);
// parameters.put("DomainName", DomainName);
// parameters.put("AppName", appName);
// parameters.put("StreamName", streatName);
// 对参数进行排序
String[] sortedKeys = (String[]) parameters.keySet().toArray(new String[]{});
Arrays.sort(sortedKeys);
String SEPARATOR = "&";
// 生成stringToSign字符串
StringBuilder stringToSign = new StringBuilder();
stringToSign.append("GET").append(SEPARATOR);
stringToSign.append(percentEncode("/")).append(SEPARATOR);
StringBuilder canonicalizedQueryString = new StringBuilder();
for (String key : sortedKeys) {
canonicalizedQueryString.append("&").append(percentEncode(key))
.append("=").append(percentEncode((String) parameters.get(key)));
}
// 这里注意对canonicalizedQueryString进行编码
stringToSign.append(percentEncode(canonicalizedQueryString.toString()
.substring(1)));
String key = AccessKeySecret + "&";
Mac mac = Mac.getInstance(ALGORITHM);
mac.init(new SecretKeySpec(key.getBytes(ENCODING), ALGORITHM));
byte[] signData = mac.doFinal(stringToSign.toString().getBytes(ENCODING));
signature = new String(new BASE64Encoder().encode(signData));
signature = percentEncode(signature);
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
}
return signature;
}
private static String percentEncode(String value) throws UnsupportedEncodingException {
return value != null ? URLEncoder.encode(value, "utf-8").replace("+", "%20").replace("*", "%2A").replace("%7E", "~") : null;
}
/*public static String getSignatureNonce() {
return StringUtils.getRandomString3(20);
}
*/
public static String getTimeStamp(Date date) {
SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);
df.setTimeZone(new SimpleTimeZone(0, "GMT"));
return df.format(date);
}
}
视频直播录制工具类AliLiveUtils.class
import com.sun.org.apache.xerces.internal.xs.datatypes.ObjectList;
import com.xm.redis.RedisClient;
import org.apache.commons.collections.MapUtils;
import org.apache.log4j.Logger;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;
/**
* 阿里云直播工具类
*
* @author lwg
* @time 2018-03-14
*/
public class AliLiveUtils {
private static Logger logger = Logger.getLogger(AliLiveUtils.class);
private static final char[] DIGITS_LOWER = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
//推拉流配置
private static final String PUSH_ADR_TEMPLATE = "rtmp://video-center.alivecdn.com/%s/%s?vhost=%s&auth_key=%s";
private static final String PLAY_ADR_TEMPLATE = "%s://live.xiameikeji.com/%s/%s?auth_key=%s";
private static final String KEY = "juyp6sG2I4";
private static final String LIVE_HOST = " ";
private static final String APP_NAME = "live";
private static final String RTMP_PREFIX = "rtmp";
private static final String FLV_PREFIX = "http";
private static final String FLV_SUFFIX = ".flv";
private static final String M3U8_PREFIX = "http";
private static final String M3U8_SUFFIX = ".m3u8";
//服务器配置
public static final String LIVE_SERVER_HOST = "https://live.aliyuncs.com/";
public static final String LIVE_VERSION = "2016-11-01";
public static final String LIVE_OnlineUserNumAction = "DescribeLiveStreamOnlineUserNum";
public static final String LIVE_RecordContent = "DescribeLiveStreamRecordContent";
public static final String LIVE_ForbidLiveStream = "ForbidLiveStream";
public static final String LIVE_ResumeLiveStream = "ResumeLiveStream";
public static final String LIVE_RecordIndexFiles = "DescribeLiveStreamRecordIndexFiles";
public static final String RECORD_PREFIX = "https://xiameilive.oss-cn-shanghai.aliyuncs.com/";
private static String getAuthKey(String channel, long time) {
String input = new StringBuilder()
.append("/")
.append(APP_NAME)
.append("/")
.append(channel)
.append("-")
.append(time)
.append("-")
.append("0")
.append("-")
.append("0")
.append("-")
.append(KEY)
.toString();
String authKey = null;
try {
MessageDigest messageDigest = MessageDigest.getInstance("MD5");
authKey = byteArrayToHexString(
messageDigest.digest(input.getBytes("UTF-8")));
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
authKey = authKey == null ? "" :
new StringBuilder()
.append(time)
.append("-")
.append("0")
.append("-")
.append("0")
.append("-")
.append(authKey).
toString();
return authKey;
}
private static String byteArrayToHexString(byte[] data) {
char[] out = new char[data.length << 1];
for (int i = 0, j = 0; i < data.length; i++) {
out[j++] = DIGITS_LOWER[(0xF0 & data[i]) >>> 4];
out[j++] = DIGITS_LOWER[0x0F & data[i]];
}
return new String(out);
}
/**
* 获取推流地址
*
* @param channel 频道号
* @return
*/
public static String getPushAdr(String channel) {
String authKey = getAuthKey(channel, new Date().getTime() / 1000);
return String.format(PUSH_ADR_TEMPLATE, APP_NAME, channel, LIVE_HOST, authKey);
}
/**
* 获取播放地址
*
* @param channel 频道号
* @param type 播放类型 0:RTMP 1:FLV 2:M3U8
* @return
*/
public static String getPlayAdr(String channel, Integer type) {
String prefix = null;
if (type == 0) {
prefix = RTMP_PREFIX;
} else if (type == 1) {
channel += FLV_SUFFIX;
prefix = FLV_PREFIX;
} else if (type == 2) {
channel += M3U8_SUFFIX;
prefix = M3U8_PREFIX;
}
long time = new Date().getTime() / 1000;
String authKey = getAuthKey(channel, time);
String playAdr = String.format(PLAY_ADR_TEMPLATE, prefix, APP_NAME, channel, authKey);
return playAdr;
}
/**
* 查询在线人数
*
* @param channel
*/
public static Integer getOnlineNum(String channel) {
//真实数据
/*Integer online = 0;
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", LIVE_OnlineUserNumAction);
parameters.put("DomainName", LIVE_HOST);
parameters.put("AppName", APP_NAME);
parameters.put("StreamName", channel);
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&DomainName=" + LIVE_HOST)
.append("&Action=" + LIVE_OnlineUserNumAction)
.append("&AppName=" + APP_NAME)
.append("&StreamName=" + channel)
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
online = MapUtils.getInteger(resMap, "TotalUserNumber");
logger.info("result==>" + resJson);
} catch (Exception e) {
logger.error("查询在线人数失败", e);
}
return online;*/
//虚拟数据
return getOnlineNumByRandom(channel);
}
/**
* 禁止直播流推送
*
* @param channel
*/
public static void forbidLiveStream(String channel) {
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", LIVE_ForbidLiveStream);
parameters.put("DomainName", LIVE_HOST);
parameters.put("AppName", APP_NAME);
parameters.put("LiveStreamType", "publisher");
parameters.put("StreamName", channel);
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + LIVE_ForbidLiveStream)
.append("&DomainName=" + LIVE_HOST)
.append("&AppName=" + APP_NAME)
.append("&LiveStreamType=" + "publisher")
.append("&StreamName=" + channel)
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
logger.info("result==>" + resJson);
clearOnlineNum(channel);
} catch (Exception e) {
logger.error("禁止直播流推送", e);
}
}
/**
* 恢复直播推流
*
* @param channel
*/
public static void resumeLiveStream(String channel) {
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", LIVE_ResumeLiveStream);
parameters.put("DomainName", LIVE_HOST);
parameters.put("AppName", APP_NAME);
parameters.put("LiveStreamType", "publisher");
parameters.put("StreamName", channel);
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + LIVE_ResumeLiveStream)
.append("&DomainName=" + LIVE_HOST)
.append("&AppName=" + APP_NAME)
.append("&LiveStreamType=" + "publisher")
.append("&StreamName=" + channel)
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
logger.info("result==>" + resJson);
} catch (Exception e) {
logger.error("恢复直播推流失败", e);
}
}
/**
* 获取直播录制文件(OSS)
*
* @param channel
* @return
*/
// public static List<String> getFileList(String channel) {
// String fileName = null;
// try {
// String catalog = String.format(OSSUtil.LIVE_CATALOG_TEMPLATE, APP_NAME, channel);
// List<String> fileListByEndpoint = OSSUtil.getFileListByEndpoint(OSSUtil.SHANGHAI_ENDPOINT, OSSUtil.LIVE_BUCKET, catalog);
// List<String> fileList = new ArrayList<>();
// String temp;
// for (String url : fileListByEndpoint) {
// temp = "https://xiameilive.oss-cn-shanghai.aliyuncs.com/" + url;
// fileList.add(temp);
// }
// fileListByEndpoint = null;
// temp = null;
// return fileList;
// //fileName = JsonUtils.listToJson(fileList);
// } catch (Exception e) {
// logger.error("查询录制文件失败", e);
// return null;
// }
// }
public static List<Map<String, Object>> getFileListByLiveApi(String channel, Date actualStartTime) {
try {
List<Map<String, Object>> resultList = new ArrayList<>();
if (actualStartTime == null) {
return resultList;
}
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
String startTime = AliSignatureUtils.getTimeStamp(actualStartTime);
Calendar c = Calendar.getInstance();
c.setTime(actualStartTime);
c.add(Calendar.DAY_OF_YEAR, 3);
String endTime = AliSignatureUtils.getTimeStamp(c.getTime());
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", LIVE_RecordIndexFiles);
parameters.put("DomainName", LIVE_HOST);
parameters.put("AppName", APP_NAME);
parameters.put("StreamName", channel);
parameters.put("StartTime", startTime);
parameters.put("EndTime", endTime);
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + LIVE_RecordIndexFiles)
.append("&DomainName=" + LIVE_HOST)
.append("&AppName=" + APP_NAME)
.append("&StreamName=" + channel)
.append("&StartTime=" + startTime)
.append("&EndTime=" + endTime)
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
logger.info("result==>" + resJson);
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
if (resMap != null) {
Map<String, Object> recordIndexInfoList = MapUtils.getMap(resMap, "RecordIndexInfoList");
List<Map<String, Object>> recordIndexInfo = (List<Map<String, Object>>) recordIndexInfoList.get("RecordIndexInfo");
for (Map<String, Object> map : recordIndexInfo) {
Map<String, Object> temp = new HashMap<>();
//temp.put("fileName", RECORD_PREFIX + MapUtils.getString(map, "OssObject"));
temp.put("fileName", MapUtils.getString(map, "RecordUrl"));
Date ISOStartTime = DateUtiles.stringToDate(MapUtils.getString(map, "StartTime"), Constant.ISO8601_DATE_FORMAT);
temp.put("startTime", DateUtiles.dateToString(ISOStartTime, Constant.TIME_FORMAT));
Date ISOEndTime = DateUtiles.stringToDate(MapUtils.getString(map, "EndTime"), Constant.ISO8601_DATE_FORMAT);
temp.put("endTime", DateUtiles.dateToString(ISOEndTime, Constant.TIME_FORMAT));
temp.put("duration", MapUtils.getObject(map, "Duration") + "");
resultList.add(temp);
}
}
resMap = null;
return resultList;
} catch (Exception e) {
logger.error("恢复直播推流失败", e);
}
return null;
}
//FIXME
private static void addLiveRecordNotifyConfig() {
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
String action = "AddLiveRecordNotifyConfig";
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", action);
parameters.put("DomainName", LIVE_HOST);
parameters.put("NotifyUrl", Constant.DOMAIN_NAME + "/ali/live/record.json");//回调 url 地址。需要做 url encode
parameters.put("NeedStatusNotify", "false");//是否需要录制任务状态回调
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + action)
.append("&DomainName=" + LIVE_HOST)
.append("&NotifyUrl=" + Constant.DOMAIN_NAME + "/ali/live/record.json")
.append("&NeedStatusNotify=" + "false")
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
logger.info("result==>" + resJson);
} catch (Exception e) {
logger.error("添加录制回调配置", e);
}
}
//FIXME
private static void deleteLiveRecordNotifyConfig() {
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
String action = "DeleteLiveRecordNotifyConfig";
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", action);
parameters.put("DomainName", LIVE_HOST);
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + action)
.append("&DomainName=" + LIVE_HOST)
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
logger.info("result==>" + resJson);
} catch (Exception e) {
logger.error("删除录制回调配置", e);
}
}
//FIXME
private static void getLiveRecordNotifyConfig() {
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
String action = "DescribeLiveRecordNotifyConfig";
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", action);
parameters.put("DomainName", LIVE_HOST);
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + action)
.append("&DomainName=" + LIVE_HOST)
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
logger.info("result==>" + resJson);
} catch (Exception e) {
logger.error("删除录制回调配置", e);
}
}
//FIXME
private static void updateLiveRecordNotifyConfig() {
try {
StringBuffer params = new StringBuffer();
String signatureNonce = AliSignatureUtils.getSignatureNonce();
String UTCTimeStr = AliSignatureUtils.getTimeStamp(new Date());
String action = "UpdateLiveRecordNotifyConfig";
Map parameters = new HashMap();
//公共参数
parameters.put("Format", AliSignatureUtils.FORMAT_JSON);
parameters.put("Version", LIVE_VERSION);
parameters.put("AccessKeyId", AliSignatureUtils.AccessKeyId);
parameters.put("SignatureMethod", AliSignatureUtils.SignatureMethod);
parameters.put("SignatureVersion", AliSignatureUtils.SignatureVersion);
parameters.put("SignatureNonce", signatureNonce);
parameters.put("Timestamp", UTCTimeStr);
//接口参数
parameters.put("Action", action);
parameters.put("DomainName", LIVE_HOST);
parameters.put("AppName", APP_NAME);
parameters.put("NotifyUrl", Constant.DOMAIN_NAME + "/ali/live/recordSuccess.json");//回调 url 地址。需要做 url encode
parameters.put("NeedStatusNotify", "false");//是否需要录制任务状态回调
String signature = AliSignatureUtils.getSignature(parameters);
params.append("Format=" + AliSignatureUtils.FORMAT_JSON)
.append("&Version=" + LIVE_VERSION)
.append("&AccessKeyId=" + AliSignatureUtils.AccessKeyId)
.append("&SignatureMethod=" + AliSignatureUtils.SignatureMethod)
.append("&SignatureVersion=" + AliSignatureUtils.SignatureVersion)
.append("&SignatureNonce=" + signatureNonce)
.append("&Timestamp=" + UTCTimeStr)
.append("&Action=" + action)
.append("&DomainName=" + LIVE_HOST)
.append("&AppName=" + APP_NAME)
.append("&NotifyUrl=" + Constant.DOMAIN_NAME + "/ali/live/recordSuccess.json")
.append("&NeedStatusNotify=" + "false")
.append("&Signature=" + signature);
logger.info("url===" + LIVE_SERVER_HOST + "?" + params.toString());
String resJson = HttpRequestUtils.sendGet(LIVE_SERVER_HOST, params.toString());
Map<String, Object> resMap = JsonUtils.json2Map(resJson);
logger.info("result==>" + resJson);
} catch (Exception e) {
logger.error("删除录制回调配置", e);
}
}
/**
* 虚拟在线人数
*
* @param channel
* @return
*/
private static int getOnlineNumByRandom(String channel) {
Integer num = 0;
String redisKey = Constant.REDIS_KEY_LIVE_ONLINE_NUM + channel;
int random = new Random().nextInt(4) + 1;
String temp = RedisClient.get(redisKey);
if (temp != null) {
num = Integer.valueOf(temp) + random;
} else {
num = random;
}
RedisClient.set(redisKey, num + "", 60 * 60);
return num;
}
/**
* 清除虚拟在线人数
*
* @param channel
*/
private static void clearOnlineNum(String channel) {
RedisClient.del(Constant.REDIS_KEY_LIVE_ONLINE_NUM + channel);
}
public static void main(String[] args) throws Exception {
String channel = "123456";
//推拉流
// String pushAdr = getPushAdr(channel);
// System.out.println("pushAdr");
// System.out.println(pushAdr);
////
// String playAdr = getPlayAdr(channel, 0);
// System.out.println("playAdr");
// System.out.println(playAdr);
// String playAdr2 = getPlayAdr(channel, 1);
// System.out.println("playAdr2");
// System.out.println(playAdr2);
//
// String playAdr3 = getPlayAdr(channel, 2);
// System.out.println("playAdr3");
// System.out.println(playAdr3);
//测试在线人数
// while (true) {
// Thread.sleep(20000);
// Integer onlineNum = getOnlineNum(channel);
// System.out.println(onlineNum);
// }
// 获取录制文件
// Date date = DateUtiles.stringToDate("2018-03-20 12:00:00", Constant.TIME_FORMAT);
// List<String> aV1Pdteb = getFileList("aV1Pdteb");
// for (String s:aV1Pdteb) {
// System.out.println(s);
// }
// 禁止推流
forbidLiveStream(channel);
// resumeLiveStream(channel);
//查询录制内容,无法获取文件
// while (true){
// List<Map<String, Object>> fileListByLiveApi = getFileListByLiveApi(channel, DateUtiles.stringToDate("2018-05-07 00:00:00", Constant.TIME_FORMAT));
// for (Map<String, Object> map : fileListByLiveApi) {
// System.out.println(JsonUtils.mapToJson(map));
// }
// Thread.sleep(5000);
// }
//配置录制回调
// addLiveRecordNotifyConfig();
// getLiveRecordNotifyConfig();
// deleteLiveRecordNotifyConfig();
}
}
更多推荐
所有评论(0)