cc视频
java对接CC视频的API
点播的接口文档
直播的接口文档
对接流程:
1.HTTP通信加密实现:
CC视频接口的请求参数hash需要由其它请求参数和api key为盐值hash而成,首先要对普通的查询参数(包括当前时间戳)进行字典序的排序,然后再以key为盐值进行MD5得到hash值
实现代码如下:
/**
* 将参数按字典序排序
*
* @param queryString 查询的参数
* @return 按字典序的参数
*/
private String order(String queryString) {
String[] list = queryString.split("&");
return Arrays.stream(list)
.sorted()
.collect(Collectors.joining("&"));
}
/**
* 日期格式字符串转换成时间戳
*
* @param dateStr 字符串日期
* @param format 如:yyyy-MM-dd HH:mm:ss
*/
private String DateToTimeStamp(String dateStr, String format) {
try {
simpledateformat sdf = new SimpleDateFormat(format);
return String.valueOf(sdf.parse(dateStr).getTime() / 1000);
} catch (Exception e) {
e.printstacktrace();
}
return "";
}
/**
* 生成md5
*/
private String getMD5(String message) {
String md5str = "";
try {
// 1 创建一个提供信息摘要算法的对象,初始化为md5算法对象
MessageDigest md = MessageDigest.getinstance("MD5");
// 2 将消息变成byte数组
byte[] input = message.getBytes();
// 3 计算后获得字节数组,这就是那128位了
byte[] buff = md.digest(input);
// 4 把数组每一字节(一个字节占八位)换成16进制连成md5字符串
md5str = bytesToHex(buff);
} catch (Exception e) {
e.printStackTrace();
}
return md5str;
}
/**
* 二进制转十六进制
*/
private String bytesToHex(byte[] bytes) {
StringBuffer md5str = new StringBuffer();
// 把数组每一字节换成16进制连成md5字符串
int digital;
for (int i = 0; i < bytes.length; i++) {
digital = bytes[i];
if (digital < 0) {
digital += 256;
}
if (digital < 16) {
md5str.APPend("0");
}
md5str.append(integer.toHexString(digital));
}
return md5str.toString().toUpperCase();
}
/**
* @param queryString 要求转化的参数
* @param isVideo 是否调用点播,true为点播api,false为直播api
* @return 有效的请求参数
*/
private String decode(String queryString, boolean isVideo) {
//获得当前时间
Date now = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
//最終的MD5后的結果除了&hash=以外的参数
String hashedQueryString = order(queryString)
+ "&time=" + DateToTimeStamp(simpleDateFormat.format(now), dateFormat);
//进行md5的参数
String temp;
if (isVideo) {
temp = hashedQueryString + "&salt=" + key;
} else {
temp = hashedQueryString + "&salt=" + room_key;
}
return hashedQueryString + "&hash=" + getMD5(temp);
}
注意点:点播的key和直播的key是不一样的
2.HTTP请求实现
CC视频的接口均采用GET方式访问,博主使用的时JDK的HttpURLConnection
这个类来进行请求。
实现如下:
/**
* 使用HttpURLConnection
* 访问CC视频接口的函数
* @param requestUri 調用的api的地址
* @param isVideo 是否调用点播,true为点播api,false为直播api
* @return 请求结果
*/
private String request(String requestUri, String params, boolean isVideo) {
URL url;
HttpURLConnection conn;
try {
//url_prefix 为基本上所有api请求都有的参数userid以及format
url = new URL(requestUri + decode(url_prefix + params, isVideo));
conn = (HttpURLConnection) url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.connect();
InputStream inputStream = conn.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new inputstreamreader(inputStream, "UTF-8"));
final StringBuffer stringBuffer = new StringBuffer();
String line;
while ((line = bufferedReader.readLine()) != null) {
stringBuffer.append(line);
}
bufferedReader.close();
inputStream.close();
return stringBuffer.toString();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
注意点:如果请求的参数存在中文,比如调用搜索视频的接口时,title的参数值需要进行转码URLEncoder.encode(title, "UTF-8")
,注意特殊字符也需要装码,例如请求排序时&sort=CREATION_DATE:DESC
要写成&sort=CREATION_DATE%3ADESC
最后附上博主github的样例代码,只实现了部分api功能的工具包
文章最后发布于: 2018-05-19 11:57:22
相关阅读
曦力音视频转换专家英文名叫做Xilisoft Video Converter Ultimate,在国外是大名鼎鼎的需要购买的高级视频转换器,在进军中国市场之
尽管Spotify奋起直追,但最大的音乐流媒体平台依然是YouTube,YouTube上有很多音乐达人比如SteveTerreberry,deadmau5,风格也迥异,比如de
微信小视频的上线让微信富有更多更新的玩法,视频比图片和文字都更直接,视频能够更清楚的传达想要表达的信息,多用在公众号和朋友圈,一
为啥不好用?因为兼容性贼差,但是后续肯定会改动的,所以现在记录下来先:http://caniuse.com/#search=FullScreen <!DOCTYPE html>
项目中需要调用一下第三方地图的API,因为自己一直用的是高德地图,所以优先采用高德地图。事实证明我也没选错,百度地图的API使用起来